Olá pessoal! A minha situação é bem complexa, uma vez que estou usando Weblogic 12C, padrão da empresa.
No meu servidor eu tenho o data source normal para um banco Oracle, não é XA.
Então, eu tenho o meu EJB Stateless anotado e lindinho como segue, e a transação é controlada pelo Container:
@Stateless(mappedName = "ejb/GrupoAtividade")
@Local(value = GrupoAtividadeRemote.class)
@TransactionAttribute(TransactionAttributeType.REQUIRED)
@TransactionManagement(TransactionManagementType.CONTAINER)
public class Grupos implements GruposLocal {
@PersistenceContext(name = "slaDS")
protected EntityManager em;
Com esse EJB eu consigo listar os Grupos e fazer update nos mesmos, sem problemas, conforme nos métodos:
public List<Grupo> listar() {
List<Grupo> retorno = new ArrayList<Grupo>();
retorno = em.createQuery(" SELECT S from Grupos", Grupo.class).getResultList();
return retorno;
}
@Transactional
public void gravar(Grupo grupo) {
Grupo grupoBanco = null;
try {
grupoBanco = em.find(GrupoAtividade.class, grupoAtividade.getId());
} catch (Exception e) {
System.out.println("Entidade nova");//TODO remover
}
try {
if (grupoBanco == null) {
em.persist(grupo);//aqui dá pau
} else {
em.merge(grupo);
}
} catch (Exception t) {
e.printstactrace();
}
}
Porém quando vou persistir eu tenho problemas: stack trace. Note que ainda são feitas 5 tentativas para pegar o ID novo do objeto a ser persistido, mas a transação está morta.
Se alguém souber qual o configuração do Weblogic eu preciso mexer, eu agradeço.
<03/04/2013 15h25min58s BRT> <2013-04-03 15:25:58.804–ClientSession(10120026)–Communication failure detected when attempting to perform read query outside of a transaction. Attempting to retry query. Error was: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Transaction BEA1-00070031DE273057A4BD not active anymore. tx status = Marked rollback. [Reason=weblogic.transaction.internal.AppSetRollbackOnlyException: setRollbackOnly called on transaction]
Error Code: 0
Call: SELECT SEQ_SLA.NEXTVAL FROM DUAL
Query: ValueReadQuery(sql=“SELECT SEQ_SLA.NEXTVAL FROM DUAL”).>
<03/04/2013 15h25min58s BRT> <2013-04-03 15:25:58.804–ClientSession(10120026)–Communication failure detected when attempting to perform read query outside of a transaction. Attempting to retry query. Error was: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Transaction BEA1-00070031DE273057A4BD not active anymore. tx status = Marked rollback. [Reason=weblogic.transaction.internal.AppSetRollbackOnlyException: setRollbackOnly called on transaction]
Error Code: 0
Call: SELECT SEQ_SLA.NEXTVAL FROM DUAL
Query: ValueReadQuery(sql=“SELECT SEQ_SLA.NEXTVAL FROM DUAL”).>
<03/04/2013 15h26min03s BRT> <2013-04-03 15:26:03.805–ClientSession(10120026)–Communication failure detected when attempting to perform read query outside of a transaction. Attempting to retry query. Error was: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Transaction BEA1-00070031DE273057A4BD not active anymore. tx status = Marked rollback. [Reason=weblogic.transaction.internal.AppSetRollbackOnlyException: setRollbackOnly called on transaction]
Error Code: 0
Call: SELECT SEQ_SLA.NEXTVAL FROM DUAL
Query: ValueReadQuery(sql=“SELECT SEQ_SLA.NEXTVAL FROM DUAL”).>
<03/04/2013 15h26min08s BRT> <2013-04-03 15:26:08.806–ClientSession(10120026)–Communication failure detected when attempting to perform read query outside of a transaction. Attempting to retry query. Error was: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Transaction BEA1-00070031DE273057A4BD not active anymore. tx status = Marked rollback. [Reason=weblogic.transaction.internal.AppSetRollbackOnlyException: setRollbackOnly called on transaction]
Error Code: 0
Call: SELECT SEQ_SLA.NEXTVAL FROM DUAL
Query: ValueReadQuery(sql=“SELECT SEQ_SLA.NEXTVAL FROM DUAL”).>
<03/04/2013 15h26min13s BRT> <2013-04-03 15:26:13.807–ClientSession(10120026)–Communication failure detected when attempting to perform read query outside of a transaction. Attempting to retry query. Error was: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Transaction BEA1-00070031DE273057A4BD not active anymore. tx status = Marked rollback. [Reason=weblogic.transaction.internal.AppSetRollbackOnlyException: setRollbackOnly called on transaction]
Error Code: 0
Call: SELECT SEQ_SLA.NEXTVAL FROM DUAL
Query: ValueReadQuery(sql=“SELECT SEQ_SLA.NEXTVAL FROM DUAL”).>
<03/04/2013 15h26min13s BRT> <2013-04-03 15:26:13.808–ClientSession(10120026)–Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Transaction BEA1-00070031DE273057A4BD not active anymore. tx status = Marked rollback. [Reason=weblogic.transaction.internal.AppSetRollbackOnlyException: setRollbackOnly called on transaction]
Error Code: 0
Call: SELECT SEQ_SLA.NEXTVAL FROM DUAL
Query: ValueReadQuery(sql=“SELECT SEQ_SLA.NEXTVAL FROM DUAL”)>
org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:309)
org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:135)
org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.connectInternal(DatasourceAccessor.java:330)
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.connectInternal(DatabaseAccessor.java:293)
org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.reconnect(DatasourceAccessor.java:565)
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.reconnect(DatabaseAccessor.java:1508)
org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.incrementCallCount(DatasourceAccessor.java:305)
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:579)
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:535)
org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:1717)
org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:566)
org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:207)
org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:193)
org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:264)
org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelect(DatasourceCallQueryMechanism.java:246)
org.eclipse.persistence.queries.DataReadQuery.executeNonCursor(DataReadQuery.java:197)
org.eclipse.persistence.queries.DataReadQuery.executeDatabaseQuery(DataReadQuery.java:152)
org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:844)
org.eclipse.persistence.queries.DataReadQuery.execute(DataReadQuery.java:137)
org.eclipse.persistence.internal.sessions.AbstractSession.internalExecuteQuery(AbstractSession.java:2831)
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1516)
org.eclipse.persistence.internal.sessions.AbstractSession.retryQuery(AbstractSession.java:1586)
org.eclipse.persistence.sessions.server.ClientSession.retryQuery(ClientSession.java:593)
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1552)
org.eclipse.persistence.internal.sessions.AbstractSession.retryQuery(AbstractSession.java:1586)
org.eclipse.persistence.sessions.server.ClientSession.retryQuery(ClientSession.java:593)
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1552)
org.eclipse.persistence.internal.sessions.AbstractSession.retryQuery(AbstractSession.java:1586)
org.eclipse.persistence.sessions.server.ClientSession.retryQuery(ClientSession.java:593)
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1552)
org.eclipse.persistence.internal.sessions.AbstractSession.retryQuery(AbstractSession.java:1586)
org.eclipse.persistence.sessions.server.ClientSession.retryQuery(ClientSession.java:593)
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1552)
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1498)
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1449)
org.eclipse.persistence.sequencing.QuerySequence.select(QuerySequence.java:309)
org.eclipse.persistence.sequencing.QuerySequence.updateAndSelectSequence(QuerySequence.java:254)
org.eclipse.persistence.sequencing.StandardSequence.getGeneratedVector(StandardSequence.java:71)
org.eclipse.persistence.sequencing.Sequence.getGeneratedVector(Sequence.java:257)
org.eclipse.persistence.internal.sequencing.SequencingManager$Preallocation_NoTransaction_State.getNextValue(SequencingManager.java:664)
org.eclipse.persistence.internal.sequencing.SequencingManager.getNextValue(SequencingManager.java:1067)
org.eclipse.persistence.internal.sequencing.ClientSessionSequencing.getNextValue(ClientSessionSequencing.java:70)
org.eclipse.persistence.internal.descriptors.ObjectBuilder.assignSequenceNumber(ObjectBuilder.java:349)
org.eclipse.persistence.internal.descriptors.ObjectBuilder.assignSequenceNumber(ObjectBuilder.java:308)
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.assignSequenceNumber(UnitOfWorkImpl.java:465)
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNotRegisteredNewObjectForPersist(UnitOfWorkImpl.java:4231)
org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.registerNotRegisteredNewObjectForPersist(RepeatableWriteUnitOfWork.java:513)
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4176)
org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:440)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
weblogic.persistence.BasePersistenceContextProxyImpl.invoke(BasePersistenceContextProxyImpl.java:111)
weblogic.persistence.TransactionalEntityManagerProxyImpl.invoke(TransactionalEntityManagerProxyImpl.java:82)
weblogic.persistence.BasePersistenceContextProxyImpl.invoke(BasePersistenceContextProxyImpl.java:92)
$Proxy86.persist(Unknown Source)
com.gvt.sla.session.grupo.GruposSession.gravar(GruposSession.java:81)
com.gvt.sla.session.grupo.GruposSession_rfefeo_GrupoAtividadeRemoteImpl.__WL_invoke(Unknown Source)
weblogic.ejb.container.internal.SessionLocalMethodInvoker.invoke(SessionLocalMethodInvoker.java:31)
com.gvt.sla.session.grupo.GruposSession_rfefeo_GrupoAtividadeRemoteImpl.gravar(Unknown Source)
de.com.dcr.usuario.MBCadastroGruposAtividade.addRow(MBCadastroGruposAtividade.java:79)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.sun.el.parser.AstValue.invoke(AstValue.java:255)
com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:302)
com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:148)
javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769)
javax.faces.component.UICommand.broadcast(UICommand.java:300)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:242)
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:216)
weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:132)
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:338)
weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3288)
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3254)
weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2163)
weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2089)
weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2074)
weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1513)
weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:254)
weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
Editei para colocar as mudanças do código.
