terça-feira, 17 de julho de 2018

OracleXETNSListner não inicializa

Oracle\app\oracle\product\11.2.0\server\network\ADMIN

Edite o arquivo: listener.ora

------------------------------------------------------------------------------------------
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = D:\Sistemas\BancoDados\Oracle\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = D:\Sistemas\BancoDados\Oracle\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.50)(PORT = 1521))
    )
  )

DEFAULT_SERVICE_LISTENER = (XE)
------------------------------------------------------------------------------------------

Reinicie os serviços do Oracle.

quinta-feira, 5 de outubro de 2017

WildFly: Configurar Oracle XA Datasource

standalone.xml

  <xa-datasource jndi-name="java:jboss/datasources/dataBaseXA" pool-name="dataBaseXA" enabled="true">
                    <xa-datasource-property name="URL">
                        jdbc:oracle:thin:@127.0.0.1:1521:XE
                    </xa-datasource-property>
                    <driver>oracleXA</driver>
                    <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
                    <xa-pool>
                        <is-same-rm-override>false</is-same-rm-override>
                        <no-tx-separate-pools>true</no-tx-separate-pools>
                    </xa-pool>
                    <security>
                        <user-name>****</user-name>
                        <password>*****</password>
                    </security>
                </xa-datasource>
      </driver>
            <driver name="oracleXA" module="com.oracle.ojdbc6">
            <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
      </driver>


An XA transaction, in the most general terms, is a "global transaction" that may span multiple resources. A non-XA transaction always involves just one resource. 

An XA transaction involves a coordinating transaction manager, with one or more databases (or other resources, like JMS) all involved in a single global transaction. Non-XA transactions have no transaction coordinator, and a single resource is doing all its transaction work itself (this is sometimes called local transactions). 

XA transactions come from the X/Open group specification on distributed, global transactions. JTA includes the X/Open XA spec, in modified form. 

Most stuff in the world is non-XA - a Servlet or EJB or plain old JDBC in a Java application talking to a single database. XA gets involved when you want to work with multiple resources - 2 or more databases, a database and a JMS connection, all of those plus maybe a JCA resource - all in a single transaction. In this scenario, you'll have an app server like Websphere or Weblogic or JBoss acting as the Transaction Manager, and your various resources (Oracle, Sybase, IBM MQ JMS, SAP, whatever) acting as transaction resources. Your code can then update/delete/publish/whatever across the many resources. When you say "commit", the results are commited across all of the resources. When you say "rollback", _everything_ is rolled back across all resources. 

The Transaction Manager coordinates all of this through a protocol called Two Phase Commit (2PC). This protocol also has to be supported by the individual resources. 

In terms of datasources, an XA datasource is a data source that can participate in an XA global transaction. A non-XA datasource generally can't participate in a global transaction (sort of - some people implement what's called a "last participant" optimization that can let you do this for exactly one non-XA item). 

For more details - see the JTA pages on java.sun.com. Look at the XAResource and Xid interfaces in JTA. See the X/Open XA Distributed Transaction specification. Do a google source on "Java JTA XA transaction". 

Fonte: http://www.theserverside.com/discussions/thread/21385.html

ARJUNA012140: Adding multiple last resources is disallowed



<server xmlns="urn:jboss:domain:2.2">

    <extensions>
    ....
    </extensions>
    // Adicione as linhas abaixo para resolver o problema
    <system-properties>
        <property name="java.util.Arrays.useLegacyMergeSort" value="true"/>
    </system-properties>
</server>

segunda-feira, 25 de setembro de 2017

Gerenciamento de Transações com JTA

Fonte: http://www.portalarquiteto.com.br/gerenciamento-de-transacoes-com-jta/

Segue abaixo algumas considerações acerca da API JTA e de como EJB3 suporta transações declarativamente.
Normalmente as transações em aplicações são controladas em nível de métodos de negócio. Para se declarar que se está sendo utilizada alguma transação deve se utilizar a anotação @TransactionAttribute.
Por padrão a transação utiliza a estratégia REQUIRED, que significa que se o método do serviço não possuir alguma transação, uma será criada, e se já possuir uma transação esta será aproveitada. Esta é a estratégia que deve ser utilizada na maior parte dos casos uma vez que é bem lógica.
O que esta estratégia quer dizer resumidamente? Quando você estiver em um contexto de transação e caso ocorra alguma exceção do tipo Runtime ou exceção com a anotação @ApplicationException(rollback=true), deve ser dado o rollback na base de dados. Com esta estratégia padrão sempre será dado o rollback da transação mais externa, o que na maioria dos casos faz todo sentido.
Outras estratégias são:
  • SUPPORTS – Não cria nenhuma transação, mas se já existir alguma ela será utilizada.
  • MANDATORY – Requer que quem chamou o método tenha criado uma transação.
  • NEVER – Proíbe que quem chamou o método tenha iniciado uma transação.
  • REQUIRESNEW – Sempre começa uma nova transação, suspendendo a antiga existente.
  • NOTSUPPORTED – Suspende qualquer transação ativa.
Como padrão, pode-se anotar toda a classe com a anotação @TransactionAttribute, o que determina que todos os métodos da classe utilizam transação e com a estratégia REQUIRED. Caso exista algum método que deva usar outra estratégia basta sobrescrever a estratégia usando acima do método alguma das anotações abaixo:
  • @TransactionAttribute(TransactionAttributeType.NEVER)
  • @TransactionAttribute(TransactionAttributeType.MANDATORY)
  • @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
  • @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
  • @TransactionAttribute(TransactionAttributeType.SUPPORTS)
Agora é definir para os métodos qual o melhor tipo de estratégia de transação e sobreescrever. É isto aí pessoal. Qualquer problema me avisem.

terça-feira, 15 de agosto de 2017

7zip: backup com data e hora no nome do arquivo | 7zip with date and time in backup file name




@ECHO OFF

REM DATA E HORA SEPARADA POR PONTO(.)
REM        DIA(DD)     MES(MM)     ANO(AAAA)   HORA(HH)    MINUTO(MM)  SEGUNDO(SS)   
Set TODAY="%DATE:~0,2%.%DATE:~3,2%.%DATE:~-4%" %time:~0,2%.%time:~3,2%.%time:~6,2%
 
ECHO.

REM -mx9 = MAXIMA COMPRESSAO
7za a -tzip "C:\TESTE_%TODAY%.zip" "C:\TESTE" -mx9

ECHO.
 
PAUSE

Postgresql: Backup automático com data e hora no nome do arquivo | Pgdump with date and time in backup file name

Windows!

Crie o arquivo e salve com a extensão .BAT, em seguida faça o agendamento da tarefa no Windows.

// Base local
@ECHO OFF

SET PGPASSWORD=123456

pg_dump.exe -h localhost -U postgres -F c -b -v -f "c:\BackupPostGre_%date:/=%_%time:~0,2%-%time:~3,2%-%time:~6,2%.backup" minhabase

// Base na Amazon
@ECHO OFF

SET PGPASSWORD=123456

pg_dump.exe -h minhabase.xxxx.sa-east-1.rds.amazonaws.com -p 5432 -U postgres -F c -b -v -f "c:\BackupPostGre_%date:/=%_%time:~0,2%-%time:~3,2%-%time:~6,2%.backup" minhabase 

sábado, 12 de agosto de 2017

JPA: JPQL count + distinct



Query q = em.createQuery("select "
            + " new com.apalmeira.modelo.followup.Gf( count( distinct p.nome ), u.nome)"
            + " from " + FollowUp.class.getName() + " o"
            + " left join o.pessoa p"
            + " left join o.usuarioResponsavel u"
            + " where"
            + " o.modulo = :modulo and "
            + " o.atividade in (:atividade1, :atividade2, :atividade3) and"
            + " o.mesVigencia between :dataInicio and :dataFim "
            + " group by 2"
            + " order by u.nome");