【问题标题】:WebLogic NameNotFoundException on JMS ConnectionFactoryJMS ConnectionFactory 上的 WebLogic NameNotFoundException
【发布时间】:2015-07-01 21:08:33
【问题描述】:

我正在使用 WebLogic Server:12.1.1.0、Spring 3.2.11.RELEASE 和 Camel 2.13.4。

我的 WebLogic 上有一个 ConnectionFactory。 JNDI 名称是:jms/ConnectionFactory。我使用 servlet 打印服务器中的所有 JNDI 名称,并在 jms 子上下文中找到它。

Spring的配置是:

<bean id="jndiFactoryBean" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="jms/ConnectionFactory"/>
    <property name="jndiTemplate" ref="jndiTemplate"/>
    <property name="lookupOnStartup" value="false"/>
    <property name="proxyInterface" value="javax.jms.ConnectionFactory"/>
</bean>

我得到错误:

GRAVE:无法刷新目标“CamelTest”的 JMS 连接 - 在 5000 毫秒内重试。原因:JndiObjectTargetSource 获取失败 新的目标对象;嵌套异常是 javax.naming.NameNotFoundException:尝试查找时 jms/ConnectionFactory 在 /app/webapp/camelweblogic.war/1720653836.;剩下的名字 'jms/ConnectionFactory'

完整的跟踪是:

Caused by: javax.naming.NameNotFoundException: While trying to lookup 'jms.ConnectionFactory' didn't find subcontext 'jms'. Resolved '' [Root exception is javax.naming.NameNotFoundException: While trying to lookup 'jms.ConnectionFactory' didn't find subcontext 'jms'. Resolved '']; remaining name 'jms/ConnectionFactory'
        at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:237)
        at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:464)
        at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:272)
        at weblogic.jndi.internal.ServerNamingNode_1211_WLStub.lookup(Unknown Source)
        at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:418)
        at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:406)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)
        at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:154)
        at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:87)
        at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:152)
        at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:178)
        at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95)
        at org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:105)
        at org.springframework.jndi.JndiObjectFactoryBean.lookupWithFallback(JndiObjectFactoryBean.java:231)
        at org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet(JndiObjectFactoryBean.java:217)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1573)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1511)
        ... 86 more

我也已经尝试过使用以下 JNDI 名称:

  • java:jms/ConnectionFactory,
  • java:ConnectionFactory,
  • ConnectionFactory,
  • java:comp/env/jms/ConnectionFactory

【问题讨论】:

  • 你是如何在 weblogic 中创建数据源的?设置和 jndi 名称是什么?
  • @DisplayNameismissing 数据源已使用 Web 控制台创建。 jndi 名称是jms/ConnectionFactory。我应该查看哪些设置?
  • 一个容易检查的事情是,您是否将数据源定位到您希望它运行的服务器上?如果您忘记实际定位数据源,则可能会发生这种情况。如果您正在编辑 weblogic.xml 文件,还请查看此内容:stackoverflow.com/questions/21355945/…
  • 我有同样的错误。你找到解决办法了吗?
  • @dikkini 不幸的是,我知道的唯一解决方案是避免在 WebLogic 上使用 Spring。使用 Tomcat 或 Jetty 之类的 servlet 容器。

标签: java spring jms jndi weblogic12c


【解决方案1】:

当您使用 WLST 创建域时,您将连接工厂的 JNDI 名称设置为什么?通常,您会在域设置脚本 (.py) 中看到类似的内容:

cf = create('ConnectionFactoryName', "ConnectionFactory") cf.setName('ConnectionFactoryName') cf.setJNDIName('ConnectionFactoryJNDIName')

在这种情况下,您只需使用

<bean id="jndiFactoryBean" class="org.springframework.jndi.JndiObjectFactoryBean">
   <property name="jndiName" value="ConnectionFactoryJNDIName"/>
   <property name="jndiTemplate" ref="jndiTemplate"/>
   <property name="lookupOnStartup" value="false"/>
   <property name="proxyInterface" value="javax.jms.ConnectionFactory"/>
</bean>

在你的 Spring bean 中。如果您没有自定义名称,添加一个可能很有价值。

【讨论】:

  • 安装脚本在哪里?文件的通常名称是什么?
  • 这取决于您的部署。我们有一个创建域的 createDomainFromScratch.py​​。如果您从模板开始,我会四处寻找任何遵循 *Domain.py 模式的文件,看看哪些文件正在构建域。
  • 很遗憾,没有这样的文件。我只找到了模板。
猜你喜欢
  • 2015-04-25
  • 2012-02-12
  • 2014-04-23
  • 2015-07-19
  • 1970-01-01
  • 1970-01-01
  • 2020-10-20
  • 1970-01-01
  • 2015-02-24
相关资源
最近更新 更多