Связь с мэйнфреймом Java через ошибку JCA - соединение не в транзакции - PullRequest
3 голосов
/ 17 декабря 2010

Я подключаюсь к среде мэйнфрейма из Java с помощью JCA-коннектора comporsys. Java-приложение развернуто в JBOSS. Разъем, настроенный таким образом:

<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>

Сообщение не должно быть на 100% в порядке, так как я вижу много ошибок в журналах, как это:

[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

К сожалению, у меня нет никакой информации, что это значит, так как composys больше не поддерживает его. У вас есть идеи, почему это происходит?

Существует IMSConnectionFactory, которая инициализирует материал comporsys

 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());

Обработка транзакций может быть в m_IMSStatementSync.execute, но это черный ящик, так как это сторонний материал. IMSConnector регистрируется в JBOSS, и мы получаем к нему доступ в сервлете. Детали обработчика транзакции:

для (int попытки = 1 + цепкость; попытки> 0;) { попробуй {

                    // 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) { ... }

                }

Ответы [ 3 ]

2 голосов
/ 17 декабря 2010

Причина предупреждения довольно очевидна из трассировки стека:

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

.... но вы определенно хотели бы уточнить, работает ли интерфейс на самом деле или нет.В любом случае предупреждение о том, что соединение отсутствует в транзакции, вызвано тем, что у вас есть пул JCA, определенный как нетранзакционный пул.Чтобы переключиться на транзакционный пул, он должен выглядеть примерно так:

<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>

Я предполагаю, что это поддерживается только потому, что в предупреждающем сообщении указано, что соединения ожидают в транзакции, что tx-connection-factory сделает.

Я бы попробовал и посмотрел, что произойдет.

1 голос
/ 28 декабря 2010

Из какого места вы инициируете вызов на свой ресурс JCA?

Другими словами, что такое

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

?

Из трассировки стека это кажетсяПонятно, что здесь нет EJB.Вызов поступает от сервлета, а затем распространяется на ваш собственный код, пока не будет использовано соединение JCA.

GenericImsTransaction звучит так, как будто он делает что-то транзакционное, но что именно?Вы должны убедиться, что где-то запущена транзакция JTA.В вашем сервлете вы можете получить UserTransaction, простой интерфейс для запуска и фиксации транзакций JTA:

@Resource 
private UserTransaction tx;

Если вы используете версию JBoss AS, предшествующую Java EE 5, тогдаВы можете использовать следующий код для получения 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;
}

Где-то в вашем стеке вызовов вам нужно будет позвонить tx.begin();, а затем tx.commit() или tx.rollback().

Если вы можете использовать EJB3, проще позволить сервлету вызывать сессионный компонент без состояния (@Stateless), а затем позволить этому бобу вызывать ваш другой код.После этого вы автоматически совершите транзакцию, и контейнер позаботится о ее фиксации или отмене.Если вы еще не используете EJB-компоненты, может быть сложно адаптировать существующий код для их использования, а ручной код JTA будет проще вставить.

1 голос
/ 27 декабря 2010

Декларация фабрики соединения транзакции необходима, но не достаточна.

Также необходимо добавить декларативную транзакцию в методы, взаимодействующие с базой данных.Я бы порекомендовал "PROPAGATION = REQUIRED_NEW".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...