【发布时间】:2015-07-28 15:30:33
【问题描述】:
我正在使用 sun-jms-adapter.rar。在开始使用身份验证之前,我的所有配置都可以正常工作。我还尝试从独立应用程序和无状态 bean(用于向队列发送消息)访问队列,一切正常。
我的实际配置是:
weblogic-ds.xml
<connection-factories>
<!-- SUN JMS JCA Resource adapter, use this to get transacted JMS in beans -->
<no-tx-connection-factory>
<jndi-name>CFX/ExternalConnectionFactory</jndi-name>
<xa-transaction />
<rar-name>sun-jms-adapter.rar</rar-name>
<connection-definition>javax.jms.QueueConnectionFactory</connection-definition>
<config-property name="SessionDefaultType" type="java.lang.String">javax.jms.Queue</config-property>
<config-property name="JmsProviderAdapterJNDI" type="java.lang.String">java:/DefaultJMSProvider</config-property>
<config-property name="Destination" type="java.lang.String">javax.jms.Destination</config-property>
<max-pool-size>20</max-pool-size>
<depends>jboss.messaging:service=ServerPeer</depends>
</no-tx-connection-factory>
</connection-factories>
ejb-jar.xml 配置:
<enterprise-beans>
<message-driven>
<ejb-name>QueueReceiverMDB</ejb-name>
<ejb-class>com.tests.mdb.QueueReceiverMDB</ejb-class>
<transaction-type>Bean</transaction-type>
<activation-config>
<activation-config-property>
<activation-config-property-name>destination</activation-config-property-name>
<activation-config-property-value>${weblogic.jms.queue.in}</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>destinationType</activation-config-property-name>
<activation-config-property-value>javax.jms.Queue</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>ConnectionURL</activation-config-property-name>
<activation-config-property-value>${weblogic.jms.url}</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>UserName</activation-config-property-name>
<activation-config-property-value>${weblogic.jms.username}</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>Password</activation-config-property-name>
<activation-config-property-value>${weblogic.jms.password}</activation-config-property-value>
</activation-config-property>
</activation-config>
</message-driven>
</enterprise-beans>
最后是我的 jboss.xml:
<message-driven>
<ejb-name>QueueReceiverMDB</ejb-name>
<destination-jndi-name>java:/CFX/ExternalConnectionFactory</destination-jndi-name>
<local-jndi-name>local/QueueReceiverMDB</local-jndi-name>
<resource-adapter-name>sun-jms-adapter.rar</resource-adapter-name>
<configuration-name>JMSJCA Message Driven Bean</configuration-name>
</message-driven>
我总是收到此错误:
16:25:07,126 警告 [激活] JMSJCA-E016: [sync-QueueReceiver(jms/TestJMSQueueIn) @ [t3://localhost:7001]]: 消息传递启动失败(尝试 #1);将在 1 秒后重试。错误是:拒绝访问资源:type=,application=TestJMSModule,destinationType=queue,resource=TestJMSQueueIn,action=receive weblogic.jms.common.JMSSecurityException:拒绝访问资源:type=,application=TestJMSModule,destinationType=queue,resource=TestJMSQueueIn,action=receive 在 weblogic.jms.dispatcher.DispatcherAdapter.convertToJMSExceptionAndThrow(DispatcherAdapter.java:110) 在 weblogic.jms.dispatcher.DispatcherAdapter.dispatchSync(DispatcherAdapter.java:45) 在 weblogic.jms.client.JMSSession.consumerCreate(JMSSession.java:2982) 在 weblogic.jms.client.JMSSession.setupConsumer(JMSSession.java:2749) 在 weblogic.jms.client.JMSSession.createConsumer(JMSSession.java:2691) 在 weblogic.jms.client.JMSSession.createReceiver(JMSSession.java:2596) 在 weblogic.jms.client.WLSessionImpl.createReceiver(WLSessionImpl.java:991) 在 com.stc.jmsjca.core.RAJMSObjectFactory.createMessageConsumer(RAJMSObjectFactory.java:620) 在 com.stc.jmsjca.core.SyncDelivery$SyncWorker.init(SyncDelivery.java:502) 在 com.stc.jmsjca.core.SyncDelivery.start(SyncDelivery.java:202) 在 com.stc.jmsjca.core.Activation.asyncStart(Activation.java:557) 在 com.stc.jmsjca.core.Activation.access$000(Activation.java:82) 在 com.stc.jmsjca.core.Activation$1.run(Activation.java:351) 在 java.lang.Thread.run(Thread.java:745) 原因:weblogic.jms.common.JMSSecurityException:拒绝访问资源:type=,application=TestJMSModule,destinationType=queue,resource=TestJMSQueueIn,action=receive 在 weblogic.jms.dispatcher.DispatcherAdapter.convertToJMSExceptionAndThrow(DispatcherAdapter.java:110) 在 weblogic.jms.dispatcher.DispatcherAdapter.dispatchSync(DispatcherAdapter.java:45) 在 weblogic.jms.frontend.FEConsumer.(FEConsumer.java:296) 在 weblogic.jms.frontend.FESession$2.run(FESession.java:1076) 在 weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363) 在 weblogic.security.service.SecurityManager.runAs(SecurityManager.java:146) 在 weblogic.jms.frontend.FESession.consumerCreate(FESession.java:1072) 在 weblogic.jms.frontend.FESession.invoke(FESession.java:3027) 在 weblogic.messaging.dispatcher.Request.wrappedFiniteStateMachine(Request.java:961) 在 weblogic.messaging.dispatcher.DispatcherServerRef.invoke(DispatcherServerRef.java:276) 在 weblogic.messaging.dispatcher.DispatcherServerRef.handleRequest(DispatcherServerRef.java:141) 在 weblogic.messaging.dispatcher.DispatcherServerRef.access$000(DispatcherServerRef.java:34) 在 weblogic.messaging.dispatcher.DispatcherServerRef$2.run(DispatcherServerRef.java:111) 在 weblogic.work.ExecuteThread.execute(ExecuteThread.java:256) 在 weblogic.work.ExecuteThread.run(ExecuteThread.java:221) 原因:weblogic.jms.common.JMSSecurityException:拒绝访问资源:type=,application=TestJMSModule,destinationType=queue,resource=TestJMSQueueIn,action=receive 在 weblogic.jms.dispatcher.Request.handleThrowable(Request.java:87) 在 weblogic.jms.dispatcher.Request.getResult(Request.java:52) 在 weblogic.messaging.dispatcher.Request.wrappedFiniteStateMachine(Request.java:1124) 在 weblogic.messaging.dispatcher.DispatcherImpl.syncRequest(DispatcherImpl.java:185) 在 weblogic.messaging.dispatcher.DispatcherImpl.dispatchSync(DispatcherImpl.java:220) 在 weblogic.jms.dispatcher.DispatcherAdapter.dispatchSync(DispatcherAdapter.java:43) ... 13 更多 原因:weblogic.jms.common.JMSSecurityException:拒绝访问资源:type=,application=TestJMSModule,destinationType=queue,resource=TestJMSQueueIn,action=receive 在 weblogic.jms.common.JMSSecurityHelper.checkPermission(JMSSecurityHelper.java:162) 在 weblogic.jms.backend.BEDestinationSecurityImpl.checkReceivePermission(BEDestinationSecurityImpl.java:87) 在 weblogic.jms.backend.BEConsumerImpl.init(BEConsumerImpl.java:312) 在 weblogic.jms.backend.BEConsumerImpl.(BEConsumerImpl.java:268) 在 weblogic.jms.backend.BEQueueImpl.createConsumer(BEQueueImpl.java:188) 在 weblogic.jms.backend.BESessionImpl.createBEConsumer(BESessionImpl.java:469) 在 weblogic.jms.backend.BESessionImpl.createConsumer(BESessionImpl.java:479) 在 weblogic.jms.backend.BESessionImpl.invoke(BESessionImpl.java:297) 在 weblogic.messaging.dispatcher.Request.wrappedFiniteStateMachine(Request.java:961) ... 16 更多
欢迎提出任何建议...
【问题讨论】:
标签: jms weblogic ejb-3.0 jboss5.x jboss-mdb