3

I'm connecting to a mainframe environment from Java using comporsys JCA connector. The java application is deployed in JBOSS. The connector configured in that way:

<connection-factories>
    <no-tx-connection-factory>
        <jndi-name>ComporsysIMSConnector</jndi-name>
        <rar-name>ims_connector_port4027_CreditAuth.rar</rar-name>
        <connection-definition>de.comporsys.connector.ims.ConnectionFactory</connection-definition>
        <min-pool-size>1</min-pool-size>
        <max-pool-size>15</max-pool-size>
        <shrinking-enabled>true</shrinking-enabled>
        <shrink-period-minutes>2</shrink-period-minutes>
        <logging-enabled>true</logging-enabled>
        <!-- <log-filename>/opt/jboss/xxxx/logs/ims_connector.log</log-filename> -->
        <log-filename>D:\ims_connector.log</log-filename>
    </no-tx-connection-factory>
</connection-factories>

The communication must no be 100% ok as I see a lot of error in the logs like this:

[2010-12-16 05:21:10,061] WARN  (org.jboss.resource.connectionmanager.NoTxConnectionManager:738) - Pearl 1,DE82000,CGN,D5 ,10450565,768209411 - Connection error occured: org.jboss.resource.connectionmanager.NoTxConnectionManager$NoTxConnectionEventListener@3dcbef2a[state=NORMAL mc=de.comporsys.connector.ims.ManagedConnectionImpl@4743f21b handles=1 lastUse=1292++++++++++++ permit=true trackByTx=false mcp=org.jboss.resource.connectionmanager.JBossManagedConnectionPool$OnePool@7afdd15b context=org.jboss.resource.connectionmanager.InternalManagedConnectionPool@2dbbec72]
de.comporsys.connector.ims.imstoc.ImstocException: IMS Connect-Error: Return=40, Reason=59
    at de.comporsys.connector.ims.imstoc.Connection.execute(Connection.java:261)
    at de.comporsys.connector.ims.imstoc.IMSTOCWorkunit.execute(IMSTOCWorkunit.java:261)
    at de.comporsys.connector.ims.imstoc.IMSTOCWorkunit.resumeTPipe(IMSTOCWorkunit.java:167)
    at de.comporsys.connector.ims.imstoc.IMSTOCWorkunit.execute(IMSTOCWorkunit.java:98)
    at de.comporsys.connector.AbstractStatement.executeRequest(AbstractStatement.java:45)
    at de.comporsys.connector.ims.Statement.execute(Statement.java:101)
    at com.xxx.ims.access.GenericImsTransaction.executeUCIAysnc(GenericImsTransaction.java:340)
    at com.xxx.ims.access.GenericImsTransaction.executeUCI(GenericImsTransaction.java:127)
    at com.xxx.ims.access.GenericImsTransaction.execute(GenericImsTransaction.java:60)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:50)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:28)
    at com.xxx.ims.GenericCheckinOperation.executeTransaction(GenericCheckinOperation.java:229)
    at com.xxx.ims.UpdateCheckinIMF.handleRepromptWithEnter(UpdateCheckinIMF.java:280)
    at com.xxx.ims.UpdateCheckinIMF.parseOutput(UpdateCheckinIMF.java:208)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:57)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:28)
    at com.xxx.ims.GenericCheckinOperation.executeTransaction(GenericCheckinOperation.java:229)
    at com.xxx.ims.UpdateCheckinIMF.handleOverPaymentResponse(UpdateCheckinIMF.java:367)
    at com.xxx.ims.UpdateCheckinIMF.parseOutput(UpdateCheckinIMF.java:219)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:57)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:28)
    at com.xxx.ims.GenericCheckinOperation.executeTransaction(GenericCheckinOperation.java:229)
    at com.xxx.ims.UpdateCheckinIMF.handleRepromptWithEnter(UpdateCheckinIMF.java:280)
    at com.xxx.ims.UpdateCheckinIMF.parseOutput(UpdateCheckinIMF.java:208)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:57)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:28)
    at com.xxx.ims.GenericCheckinOperation.executeTransaction(GenericCheckinOperation.java:121)
    at com.xxx.ims.GenericCheckinOperation.executeTransaction(GenericCheckinOperation.java:22)
    at com.xxx.core.rental.VehicleCheckinBC.executeUpdateCheckInWizardTransaction(VehicleCheckinBC.java:541)
    at com.xxx.core.rental.VehicleCheckinBC.executeVehicleCheckin(VehicleCheckinBC.java:315)
    at com.xxx.merlin.vehiclecheckin.VehicleCheckinMH.processMessage(VehicleCheckinMH.java:112)
    at com.xxx.merlin.servlet.util.HttpRequestHandler.handleMessage(HttpRequestHandler.java:150)
    at com.xxx.merlin.servlet.util.HttpRequestHandler.processRequest(HttpRequestHandler.java:88)
    at com.xxx.merlin.servlet.MerlinServlet.doPost(MerlinServlet.java:22)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at com.xxx.scope.ServletRequestScopeFilter.doFilter(ServletRequestScopeFilter.java:37)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:595)
[2010-12-16 05:21:10,155] WARN  (com.xxx.ims.access.GenericImsTransaction:82) - Pearl 1,DE82000,CGN,D5 ,10450565,768209411 - pac71068: ResourceException caught upon IMF execute.  IMF body was:/MSKY\/RAN768209411\/MVA10450565\/DOM23021\/DOGY/G8\/COLN\/AGT82000\/OWM\/FLO\/MOPCV\/DLAY\/DOLCGN\/DOD16Dec10/0600\/TAM39058\/ACTA\/RPIY\/ENT\/AUT\/PRTN\@
javax.resource.spi.ResourceAdapterInternalException: de.comporsys.connector.NoActiveTransactionException: connection is not in transaction: de.comporsys.connector.ims.ManagedConnectionImpl@4743f21b
    at de.comporsys.connector.AbstractManagedConnection.getActiveTransaction(AbstractManagedConnection.java:216)
    at de.comporsys.connector.AbstractStatement.executeRequest(AbstractStatement.java:53)
    at de.comporsys.connector.ims.Statement.execute(Statement.java:101)
    at com.xxx.ims.access.GenericImsTransaction.executeUCIAysnc(GenericImsTransaction.java:340)
    at com.xxx.ims.access.GenericImsTransaction.executeUCI(GenericImsTransaction.java:127)
    at com.xxx.ims.access.GenericImsTransaction.execute(GenericImsTransaction.java:60)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:50)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:28)
    at com.xxx.ims.GenericCheckinOperation.executeTransaction(GenericCheckinOperation.java:229)
    at com.xxx.ims.UpdateCheckinIMF.handleRepromptWithEnter(UpdateCheckinIMF.java:280)
    at com.xxx.ims.UpdateCheckinIMF.parseOutput(UpdateCheckinIMF.java:208)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:57)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:28)
    at com.xxx.ims.GenericCheckinOperation.executeTransaction(GenericCheckinOperation.java:229)
    at com.xxx.ims.UpdateCheckinIMF.handleOverPaymentResponse(UpdateCheckinIMF.java:367)
    at com.xxx.ims.UpdateCheckinIMF.parseOutput(UpdateCheckinIMF.java:219)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:57)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:28)
    at com.xxx.ims.GenericCheckinOperation.executeTransaction(GenericCheckinOperation.java:229)
    at com.xxx.ims.UpdateCheckinIMF.handleRepromptWithEnter(UpdateCheckinIMF.java:280)
    at com.xxx.ims.UpdateCheckinIMF.parseOutput(UpdateCheckinIMF.java:208)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:57)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:28)
    at com.xxx.ims.GenericCheckinOperation.executeTransaction(GenericCheckinOperation.java:121)
    at com.xxx.ims.GenericCheckinOperation.executeTransaction(GenericCheckinOperation.java:22)
    at com.xxx.core.rental.VehicleCheckinBC.executeUpdateCheckInWizardTransaction(VehicleCheckinBC.java:541)
    at com.xxx.core.rental.VehicleCheckinBC.executeVehicleCheckin(VehicleCheckinBC.java:315)
    at com.xxx.merlin.vehiclecheckin.VehicleCheckinMH.processMessage(VehicleCheckinMH.java:112)
    at com.xxx.merlin.servlet.util.HttpRequestHandler.handleMessage(HttpRequestHandler.java:150)
    at com.xxx.merlin.servlet.util.HttpRequestHandler.processRequest(HttpRequestHandler.java:88)
    at com.xxx.merlin.servlet.MerlinServlet.doPost(MerlinServlet.java:22)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at com.xxx.scope.ServletRequestScopeFilter.doFilter(ServletRequestScopeFilter.java:37)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:595)

    at de.comporsys.connector.ExceptionHandler.handle(ExceptionHandler.java:46)
    at de.comporsys.connector.AbstractStatement.executeRequest(AbstractStatement.java:55)
    at de.comporsys.connector.ims.Statement.execute(Statement.java:101)
    at com.xxx.ims.access.GenericImsTransaction.executeUCIAysnc(GenericImsTransaction.java:340)
    at com.xxx.ims.access.GenericImsTransaction.executeUCI(GenericImsTransaction.java:127)
    at com.xxx.ims.access.GenericImsTransaction.execute(GenericImsTransaction.java:60)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:50)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:28)
    at com.xxx.ims.GenericCheckinOperation.executeTransaction(GenericCheckinOperation.java:229)
    at com.xxx.ims.UpdateCheckinIMF.handleRepromptWithEnter(UpdateCheckinIMF.java:280)
    at com.xxx.ims.UpdateCheckinIMF.parseOutput(UpdateCheckinIMF.java:208)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:57)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:28)
    at com.xxx.ims.GenericCheckinOperation.executeTransaction(GenericCheckinOperation.java:229)
    at com.xxx.ims.UpdateCheckinIMF.handleOverPaymentResponse(UpdateCheckinIMF.java:367)
    at com.xxx.ims.UpdateCheckinIMF.parseOutput(UpdateCheckinIMF.java:219)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:57)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:28)
    at com.xxx.ims.GenericCheckinOperation.executeTransaction(GenericCheckinOperation.java:229)
    at com.xxx.ims.UpdateCheckinIMF.handleRepromptWithEnter(UpdateCheckinIMF.java:280)
    at com.xxx.ims.UpdateCheckinIMF.parseOutput(UpdateCheckinIMF.java:208)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:57)
    at com.xxx.ims.UpdateCheckinIMF.executeTransactionInternally(UpdateCheckinIMF.java:28)
    at com.xxx.ims.GenericCheckinOperation.executeTransaction(GenericCheckinOperation.java:121)
    at com.xxx.ims.GenericCheckinOperation.executeTransaction(GenericCheckinOperation.java:22)
    at com.xxx.core.rental.VehicleCheckinBC.executeUpdateCheckInWizardTransaction(VehicleCheckinBC.java:541)
    at com.xxx.core.rental.VehicleCheckinBC.executeVehicleCheckin(VehicleCheckinBC.java:315)
    at com.xxx.merlin.vehiclecheckin.VehicleCheckinMH.processMessage(VehicleCheckinMH.java:112)
    at com.xxx.merlin.servlet.util.HttpRequestHandler.handleMessage(HttpRequestHandler.java:150)
    at com.xxx.merlin.servlet.util.HttpRequestHandler.processRequest(HttpRequestHandler.java:88)
    at com.xxx.merlin.servlet.MerlinServlet.doPost(MerlinServlet.java:22)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at com.xxx.scope.ServletRequestScopeFilter.doFilter(ServletRequestScopeFilter.java:37)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:595)
Caused by: de.comporsys.connector.NoActiveTransactionException: connection is not in transaction: de.comporsys.connector.ims.ManagedConnectionImpl@4743f21b
    at de.comporsys.connector.AbstractManagedConnection.getActiveTransaction(AbstractManagedConnection.java:216)
    at de.comporsys.connector.AbstractStatement.executeRequest(AbstractStatement.java:53)
    ... 52 more

Unfortunately I do not have any info what does it mean as composys does not support it any more. Do you have any idea why this happens?

There is an IMSConnectionFactory which initializes the comporsys stuff

 public static ConnectionFactory getIMSConnectionFactory() {
        InitialContext context;
        ConnectionFactory imsConnectionFactory = null;

        try {
            // Create a Properties Object and set the JNDI properties
            Properties jndiProperties = new Properties();

            jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, WizardContext.getInstance().getWizardProperties().getJndiClass());

            // Try obtaining a JNDI context so that the application server can be queried
            context = new InitialContext(jndiProperties);

            // Request the Connection Factory from the application server using a JNDI context lookup 
            imsConnectionFactory = (ConnectionFactory) context.lookup(WizardContext.getInstance().getWizardProperties().getConnectionJndi());

Ther transaction handling might be in m_IMSStatementSync.execute, but it is a black box as it is a third party stuff. The IMSConnector registere in JBOSS and we access it in a servlet. Details of the transaction handler:

for (int attempts = 1 + tenaciousness; attempts > 0;) { try {

                    // Slightly nervous re. the location of this block.
                    // It looks like it should be above, where it is now commented out,
                    // but moving it there coincided with failures.
                    // This may well have just been a coincidence - but it all happened at cutover time,
                    // so for the sake of safety I've put it back here for now.
                    m_IMSStatementSync = m_IMSConnection.createStatement(); /* This created by the connection factory */
                    m_IMSRequest = m_IMSStatementSync.createRequest();
                    m_IMSRequest.setTimeout(m_WizardConfiguration.getWizardTimeOut());
                    m_IMSRequest.setTransaction(p_Input.get_TransactionCode());
                    m_IMSRequest.setCommArea(p_Input);
                    m_IMSRequest.setLterm(p_Input.get_TSR().get_ID());
                    m_IMSRequest.setTimer((byte) WizardOperationConstants.IMS_CONNECT_SYNC_TIMEOUT);
                    // end of block

                    // Execute the IMS transaction
                    m_IMSReply = m_IMSStatementSync.execute(m_IMSRequest);      /*pac7102*/

                    attempts = 0;
                }
                catch (NoActiveTransactionException e) {

                    if (--attempts < 1) {
                        tenaciousness >>= 1;
                        throw (e);
                    }
                    try {
                        wait(rnd());
                    }
                    catch (InterruptedException f) { ... }

                }
HamoriZ
  • 2,370
  • 18
  • 38

3 Answers3

2

The reason for the warning is fairly explicit from the stack trace:

de.comporsys.connector.NoActiveTransactionException: connection is not in transaction

.... but you would definitely want to clarify whether or not the interface is actually working or not. At any rate, the warning that the connection is not in a transaction is because you have your JCA pool defined as a non-transactional pool. In order to switch to a transactional pool, it should look something like this:

<connection-factories>
    <tx-connection-factory>
        <jndi-name>ComporsysIMSConnector</jndi-name>
        <rar-name>ims_connector_port4027_CreditAuth.rar</rar-name>
        <connection-definition>de.comporsys.connector.ims.ConnectionFactory</connection-definition>
        <min-pool-size>1</min-pool-size>
        <max-pool-size>15</max-pool-size>
        <shrinking-enabled>true</shrinking-enabled>
        <shrink-period-minutes>2</shrink-period-minutes>
        <logging-enabled>true</logging-enabled>
        <!-- <log-filename>/opt/jboss/xxxx/logs/ims_connector.log</log-filename> -->
        <log-filename>D:\ims_connector.log</log-filename>
    </tx-connection-factory>
</connection-factories>

I am assuming this is supported only because the warning message indicates it expects the connections to be in a transaction which is what the tx-connection-factory will do.

I would give it a spin and see what happens.

Nicholas
  • 15,916
  • 4
  • 42
  • 66
1

Transaction connection factory declaration is necessary, but not sufficient.

You also need to add a declarative transaction to the methods that interact with the database. I'd recommend "PROPAGATION=REQUIRED_NEW".

duffymo
  • 305,152
  • 44
  • 369
  • 561
1

From what location are you initiating the call to your JCA resource?

In other words, what is

 at com.xxx.ims.access.GenericImsTransaction.executeUCIAysnc(GenericImsTransaction.java:340)

?

From the stack trace it seems clear that there is no EJB involved here. The call comes in from a Servlet and then propagates to your own code until the JCA connection is being used.

GenericImsTransaction sounds like it does something transactional, but what exactly? You should verify that there is a JTA transaction being started somewhere. In your Servlet you can get a hold of a UserTransaction, which is a simple interface to start and commit JTA transactions:

@Resource 
private UserTransaction tx;

If you're using a pre-Java EE 5 version of JBoss AS, then you can use the following code to obtain a UserTransaction:

private UserTransaction getUserTransaction() {
    UserTransaction tx = null;

    try {
        tx = (UserTransaction)new InitialContext().lookup("java:comp/UserTransaction");
    } catch (NamingException e) {
        throw new RuntimeException("No UserTransaction available at default location, is a transaction manager installed?", e);
    }

    return tx;
}

Somewhere in your callstack, you then need to call tx.begin(); and afterwards tx.commit() or tx.rollback().

If you're able to use EJB3, then it's easier to let your Servlet call a stateless session bean (@Stateless) and then let this bean call your other code. You will then automatically have a transaction and the container will take care of committing or rolling it back. If you're not yet using EJBs it may be difficult to retrofit the existing code into using them and the manual JTA code may be easier to insert.

Arjan Tijms
  • 37,782
  • 12
  • 108
  • 140