我正试图将Weblogic (10.3) MDB连接到Tibco EMS JMS队列。我使用简单的Java/Spring JNDI连接从队列中读取数据,因此我知道外部JNDI查找名称是有效的。我的WL外部服务器详细信息:
JNDI Initial Context Factory: com.tibco.tibjms.naming.TibjmsInitialContextFactory
JNDI Connection URL: tcp://ems-dit-am-uat-1.app.xxx.net:30055
JNDI Properties:
java.naming.factory.initial=com.tibco.tibjms.naming.TibjmsInitialContextFactory
java.naming.provider.url=tcp://ems-dit-am-uat-1.app.xxx.net:30055
java.naming.security.principal=rdsuat
java.naming.factory.url.pkgs=com.tibco.tibjms.naming
(password entered in Properties Credential box).
目标:Name, Local JNDI Name and Remote JNDI name all set to Q.NY.DERIV.DRD.RFI
连接工厂:
Name, Local JNDI Name and Remote JNDI name all set to DRDRFIQueueConnectionFactory
(which simply changes the default connection factory port).
User/password also set here (same as before).
weblogic-ejb-jar.xml
<weblogic-enterprise-bean>
<ejb-name>MessageReceiver</ejb-name>
<message-driven-descriptor>
<pool>
<max-beans-in-free-pool>2</max-beans-in-free-pool>
</pool>
<destination-jndi-name>Q.NY.DERIV.DRD.RFI</destination-jndi-name>
<connection-factory-jndi-name>DRDRFIQueueConnectionFactory</connection-factory-jndi-name>
</message-driven-descriptor>
</weblogic-enterprise-bean>
得到的错误是:消息驱动的EJB: messagerreceiver无法连接到JMS目的地:q.ny.派生. drd.rfi。错误是:无法获取分布式目的地信息。目标JNDI名称是q.nys . derived . drd。RFI,提供者URL为空
我已经尝试将配置移动到weblogic-ejb-jar.xml(即:
) <weblogic-enterprise-bean>
<ejb-name>MessageReceiver</ejb-name>
<message-driven-descriptor>
<pool>
<max-beans-in-free-pool>2</max-beans-in-free-pool>
</pool>
<destination-jndi-name>Q.NY.DERIV.DRD.RFI</destination-jndi-name>
<initial-context-factory>com.tibco.tibjms.naming.TibjmsInitialContextFactory</initial-context-factory>
<provider-url>tcp://ems-dit-am-uat-1.app.xxx.net:30055</provider-url>
<connection-factory-jndi-name>DRDRFIQueueConnectionFactory</connection-factory-jndi-name>
</message-driven-descriptor>
</weblogic-enterprise-bean>
,但我得到一个不同的错误:异常激活模块:EJBModule(rfiloader.jar)无法部署EJB: messagerreceiver from rfiloader.jar:无法找到EndPointFinder for tcp://ems-dit-am-uat-1.app.xxx.net:30055
…什么好主意吗?
谢谢克里斯。
终于实现了这一点-由于Weblogic 10.3中的一个错误,这并不像它应该的那么简单。
-
创建具有所有正常详细信息(目的地和连接工厂的本地/远程JNDI查找名称)的外部服务器。
-
创建与远端EMS用户同名的本地WL用户,包括密码
-
创建ejb凭据映射(不是安全凭据映射)
- 通过单击相关部署,单击列表中的相关ejb名称,然后单击Security选项卡,然后单击Credentials Mapping选项卡来完成此操作。
- 为WLS和远程用户添加相同的名称(这里似乎不需要密码)。
在配置文件中添加以下部分:
weblogic-ejb-jar.xml
在这个文件的底部,在结束的'weblogic-enterprise-bean'标签之后和结束的'weblogic-ejb-jar'标签之前添加以下内容:
<security-role-assignment>
<role-name>rficonsumer</role-name>
<principal-name>rdsuat</principal-name>
</security-role-assignment>
'rficonsumer'角色只存在于这两个配置文件中,只要在这里描述的所有三个部分中保持一致,它可以是任何东西。主体名称'rdsuat'必须与在WL管理控制台部分中创建的用户匹配,因此必须与EMS队列用户匹配。
于
在相关MDB的"消息驱动"标签部分中,在结束的"消息驱动"标签之前添加以下部分:
rficonsumer
在文件的最后,在结束的'enterprise-beans'标签之后,在结束的'ejb-jar'结束标签之前添加以下内容:
rficonsumer