【发布时间】:2018-02-08 21:26:52
【问题描述】:
我在向 activmq 发布消息时遇到以下异常。我将 JBOSS 与使用 PostgresDB 的 ActiveMQ 一起使用。
我已经在目录中配置了下面的 activemq.xml 文件。
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
<bean id="postgres-ds" class="org.postgresql.ds.PGPoolingDataSource" destroy-method="close">
<property name="serverName" value="localhost"/>
<property name="databaseName" value="activemq"/>
<property name="portNumber" value="5432"/>
<property name="user" value="postgres"/>
<property name="password" value="admin123"/>
<property name="dataSourceName" value="postgres"/>
<property name="initialConnections" value="1"/>
<property name="maxConnections" value="10"/>
</bean>
并且在broker标签中
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
<persistenceAdapter>
<jdbcPersistenceAdapter dataDirectory="activemq-data" dataSource="#postgres-ds" lockKeepAlivePeriod="5000">
<adapter>
<postgresql-jdbc-adapter/>
</adapter>
<locker>
<lease-database-locker lockAcquireSleepInterval="10000"/>
</locker>
</jdbcPersistenceAdapter>
</persistenceAdapter>
下面已经在JBOSS中配置了standalone-full.xml文件。
<resource-adapters>
<resource-adapter id="activemq-ra.rar">
<archive>
activemq-ra.rar
</archive>
<transaction-support>XATransaction</transaction-support>
<config-property name="ServerUrl">
tcp://localhost:61616
</config-property>
<connection-definitions>
<connection-definition class-name="org.apache.activemq.ra.ActiveMQManagedConnectionFactory" jndi-name="jms/ConnectionFactory" enabled="true" use-java-context="true" pool-name="ActiveMQConnectionFactoryPool" use-ccm="true">
<xa-pool>
<min-pool-size>1</min-pool-size>
<max-pool-size>20</max-pool-size>
</xa-pool>
</connection-definition>
</connection-definitions>
<admin-objects>
<admin-object class-name="org.apache.activemq.command.ActiveMQQueue" jndi-name="queue/IP_NAME" enabled="true" use-java-context="true" pool-name="ActiveMQQueue.IP_NAME">
<config-property name="PhysicalName">
IP_NAME
</config-property>
</admin-object>
<admin-object class-name="org.apache.activemq.command.ActiveMQQueue" jndi-name="queue/IP_NAME_2" enabled="true" use-java-context="true" pool-name="ActiveMQQueue.IP_NAME_2">
<config-property name="PhysicalName">
IP_NAME_2
</config-property>
</admin-object>
</admin-objects>
</resource-adapter>
</resource-adapters>
例外:
17:31:28,466 WARN [com.arjuna.ats.jta] (http-localhost/127.0.0.1:8080-1) ARJUNA016041:准备在 (XAResourceWrapperImpl@1c956d35[xaResource=org.apache. activemq.ra.ActiveMQManagedConnection$1@5daa43e4 pad=false overrideRmValue=null productName=ActiveMQ productVersion=5.9.1 jndiName=java:/jms/ConnectionFactory]) 失败,出现异常 XAException.XAER_RMFAIL: javax.transaction.xa.XAException: javax/xml /绑定/数据类型转换器 在 org.apache.activemq.TransactionContext.toXAException(TransactionContext.java:793) 在 org.apache.activemq.TransactionContext.prepare(TransactionContext.java:487) 在 org.apache.activemq.ra.LocalAndXATransaction.prepare(LocalAndXATransaction.java:126) 在 org.jboss.jca.core.tx.jbossts.XAResourceWrapperImpl.prepare(XAResourceWrapperImpl.java:177) 在 com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord.topLevelPrepare(XAResourceRecord.java:213) 在 com.arjuna.ats.arjuna.coordinator.BasicAction.doPrepare(BasicAction.java:2530) 在 com.arjuna.ats.arjuna.coordinator.BasicAction.doPrepare(BasicAction.java:2497) 在 com.arjuna.ats.arjuna.coordinator.BasicAction.prepare(BasicAction.java:2074) 在 com.arjuna.ats.arjuna.coordinator.BasicAction.End(BasicAction.java:1485) 在 com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:98) 在 com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:162) 在 com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1189) 在 com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:126) 在 com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:75) 在 org.jboss.as.ejb3.tx.CMTTxInterceptor.endTransaction(CMTTxInterceptor.java:92) [jboss-as-ejb3-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21] 在 org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:284) [jboss-as-ejb3-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21] 在 org.jboss.as.ejb3.tx.CMTTxInterceptor.requiresNew(CMTTxInterceptor.java:367) [jboss-as-ejb3-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21] 在 org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:245) [jboss-as-ejb3-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21] 在 org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1] 在 org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41) [jboss-as-ejb3-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat- 21] 在 org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1] 在 org.jboss.as.ejb3.component.invocationmetrics.WaitTimeInterceptor.processInvocation(WaitTimeInterceptor.java:43) [jboss-as-ejb3-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat- 21] 在 org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1] 在 org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:64) [jboss-as-ejb3-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat -21] 在 org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1] 在 org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59) [jboss-as-ejb3-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat- 21] 在 org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1] 在 org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21] 在 org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1] 在 org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:55) [jboss-as-ejb3-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat- 21] 在 org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1] 在 org.jboss.as.ee.component.TCCLInterceptor.processInvocation(TCCLInterceptor.java:45) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21] 在 org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1] 在 org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1] 在 org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:185) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat- 21] 在 org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:185) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21 ] 在 org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1] 在 org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1] 在 org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:73) [jboss-as-ee-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21] 在 com.deb.ec.courier.api.MessageBus$$$view4.publish(未知来源)[courier-core-1.3.0-SNAPSHOT.jar:1.3.0-SNAPSHOT] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_65] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_65] 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_65] 在 java.lang.reflect.Method.invoke(Method.java:497) [rt.jar:1.8.0_65] 在 org.jboss.weld.util.reflection.SecureReflections$13.work(SecureReflections.java:267) [weld-core-1.1.28.Final-redhat-1.jar:1.1.28.Final-redhat-1] 在 org.jboss.weld.util.reflection.SecureReflectionAccess.run(SecureReflectionAccess.java:52) [weld-core-1.1.28.Final-redhat-1.jar:1.1.28.Final-redhat-1] 在 org.jboss.weld.util.reflection.SecureReflectionAccess.runAsInvocation(SecureReflectionAccess.java:137) [weld-core-1.1.28.Final-redhat-1.jar:1.1.28.Final-redhat-1] 在 org.jboss.weld.util.reflection.SecureReflections.invoke(SecureReflections.java:263) [weld-core-1.1.28.Final-redhat-1.jar:1.1.28.Final-redhat-1] 在 org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler.invoke(EnterpriseBeanProxyMethodHandler.java:115) [weld-core-1.1.28.Final-redhat-1.jar:1.1.28.Final-redhat-1] 在 org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance.invoke(EnterpriseTargetBeanInstance.java:56) [weld-core-1.1.28.Final-redhat-1.jar:1.1.28.Final-redhat-1] 在 org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:105) [weld-core-1.1.28.Final-redhat-1.jar:1.1.28.Final-redhat-1] 在 com.deb.ec.courier.jms.MessageBus$-1689182988$Proxy$_$$Weld$Proxy$.publish(MessageBus$-1689182988$Proxy$$$_Weld$Proxy$.java ) [courier-jms-1.3.0-SNAPSHOT.jar:1.3.0-SNAPSHOT] 在 com.deb.ec.courier.impl.CourierMessageBusSingleton.publish(CourierMessageBusSingleton.java:117) [courier-core-1.3.0-SNAPSHOT.jar:1.3.0-SNAPSHOT] 在 com.deb.ec.courier.impl.CourierPublishContract.publish(CourierPublishContract.java:26) [courier-core-1.3.0-SNAPSHOT.jar:1.3.0-SNAPSHOT] 在 com.deb.ec.courier.reference.ECRecordServlet.doPost(ECRecordServlet.java:72) [类:] 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:754) [jboss-servlet-api_3.0_spec-1.0.2.Final-redhat-2.jar:1.0.2.Final-redhat-2] 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.2.Final-redhat-2.jar:1.0.2.Final-redhat-2] 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 com.deb.service.provider.server.web.SpfServletFilter.doFilter(SpfServletFilter.java:68) [service-provider-3.3.1.jar:3.3.1] 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:231) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169) [jboss-as-web-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21] 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:150) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:854) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:926) [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1] 在 java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_65] 引起:javax.jms.JMSException:javax/xml/bind/DatatypeConverter 在 org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:54) 在 org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1408) 在 org.apache.activemq.TransactionContext.syncSendPacketWithInterruptionHandling(TransactionContext.java:757) 在 org.apache.activemq.TransactionContext.prepare(TransactionContext.java:453) ... 71 更多 引起:java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter 在 org.apache.activemq.store.jdbc.adapter.DefaultJDBCAdapter.doAddMessage(DefaultJDBCAdapter.java:242) 在 org.apache.activemq.store.jdbc.JDBCMessageStore.addMessage(JDBCMessageStore.java:158) 在 org.apache.activemq.store.memory.MemoryTransactionStore$3.run(MemoryTransactionStore.java:342) 在 org.apache.activemq.store.jdbc.JdbcMemoryTransactionStore.prepare(JdbcMemoryTransactionStore.java:75) 在 org.apache.activemq.transaction.XATransaction.prepare(XATransaction.java:188) 在 org.apache.activemq.broker.TransactionBroker.prepareTransaction(TransactionBroker.java:247) 在 org.apache.activemq.broker.BrokerFilter.prepareTransaction(BrokerFilter.java:129) 在 org.apache.activemq.broker.TransportConnection.processPrepareTransaction(TransportConnection.java:510) 在 org.apache.activemq.command.TransactionInfo.visit(TransactionInfo.java:98) 在 org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:330) 在 org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:194) 在 org.apache.activemq.transport.MutexTransport.onCommand(MutexTransport.java:50) 在 org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:125) 在 org.apache.activemq.transport.AbstractInactivityMonitor.onCommand(AbstractInactivityMonitor.java:301) 在 org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83) 在 org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:233) 在 org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:215) 在 java.lang.Thread.run(Unknown Source) [rt.jar:1.8.0_65]
17:31:28,478 WARN [com.arjuna.ats.arjuna] (http-localhost/127.0.0.1:8080-1) ARJUNA012073: BasicAction.End() - action-id 0:ffff0a4b02b4:34361599 的准备阶段:5a7aea01:26 失败。 17:31:28,478 WARN [com.arjuna.ats.arjuna] (http-localhost/127.0.0.1:8080-1) ARJUNA012075:操作中止 17:31:28,716 错误 [org.jboss.as.ejb3.invocation] (http-localhost/127.0.0.1:8080-1) JBAS014134:组件 TransactionalJmsMessageBus 上的 EJB 调用失败,用于方法 public abstract void com.deb.ec.courier .api.MessageBus.publish(java.lang.String,com.deb.ec.courier.api.CourierMessage) 抛出 com.deb.ec.courier.error.CourierException: javax.ejb.EJBTransactionRolledbackException: 事务回滚 在 org.jboss.as.ejb3.tx.CMTTxInterceptor.handleEndTransactionException(CMTTxInterceptor.java:138) [jboss-as-ejb3-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21] 在 org.jboss.as.ejb3.tx.CMTTxInterceptor.endTransaction(CMTTxInterceptor.java:118) [jboss-as-ejb3-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21] 在 org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:284) [jboss-as-ejb3-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21] 在 org.jboss.as.ejb3.tx.CMTTxInterceptor.requiresNew(CMTTxInterceptor.java:367) [jboss-as-ejb3-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21] 在 org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:245) [jboss-as-ejb3-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]
【问题讨论】:
-
请注意,我确实在编辑过程中将
<bean>添加到您的问题中的原始“代码”/xml 中(您可能还看不到它),因为它丢失了。是不是真的不见了? -
另外,您收到此错误
Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter是与您的应用程序一起部署的 jdbc 驱动程序还是它存在于服务器的 lib 文件夹中? -
您好 JGlass,感谢您的回复。正确修改了标签。我正在使用 postgresql-9.1-901-1.jdbc4.jar 作为 postgres 驱动程序。
-
您好 JGlass,上述问题已解决,这是由于 jdk9.在 jdk9 DatatypeConverter.java 文件中不存在。已将 jdk9 用于 ActiveMQ 和 Jboss 中的 jdk1.8,这就是问题的原因。谢谢