【问题标题】:JMS - Lookup problemJMS - 查找问题
【发布时间】:2011-08-31 02:49:51
【问题描述】:

我正在使用 Glassfish v3 编写 Java 中的 JMS 程序。现在问题是我添加了一个 QueueConnectionFactory 类型的 ConnectionFactory,它的名字是:“jms/KwetterFactory”。还有一个 Queue 类型的 Destination Resource,它被命名为“jms/KwetterQueue”。

现在当我运行以下代码时:

public Sender() throws JMSException, NamingException
    {
        // get the initial context
       InitialContext ctx = new InitialContext();

       // lookup the queue connection factory
       QueueConnectionFactory connFactory = (QueueConnectionFactory) ctx.lookup("jms/KwetterFactory");

       // lookup the queue object
       Queue queue = (Queue) ctx.lookup("jms/KwetterQueue");

       // create a queue connection
       QueueConnection queueConn = connFactory.createQueueConnection();

       // create a queue session
       QueueSession queueSession = queueConn.createQueueSession(false,
           Session.DUPS_OK_ACKNOWLEDGE);

       // create a queue sender
       QueueSender queueSender = queueSession.createSender(queue);
       queueSender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

       // create a simple message to say "Hello"
       TextMessage message = queueSession.createTextMessage("Hello");

       // send the message
       queueSender.send(message);

       // print what we did
       System.out.println("sent: " + message.getText());

       // close the queue connection
       queueConn.close();
    }

我收到此错误:

java.lang.RuntimeException:Orb 初始化错误 在 org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:148) 在 com.sun.enterprise.naming.impl.SerialContext.getORB(SerialContext.java:365) 在 com.sun.enterprise.naming.impl.SerialContext.getProviderCacheKey(SerialContext.java:372) 在 com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:402) 在 com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:347) 在 com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:504) 在 com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455) 在 javax.naming.InitialContext.lookup(InitialContext.java:392) 在 Sender.Sender.(Sender.java:32) 在 GUI.GUI.jButton1ActionPerformed(GUI.java:73) 在 GUI.GUI.access$000(GUI.java:24) 在 GUI.GUI$1.actionPerformed(GUI.java:47) 在 javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 在 javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) 在 javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 在 javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 在 javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) 在 java.awt.Component.processMouseEvent(Component.java:6263) 在 javax.swing.JComponent.processMouseEvent(JComponent.java:3267) 在 java.awt.Component.processEvent(Component.java:6028) 在 java.awt.Container.processEvent(Container.java:2041) 在 java.awt.Component.dispatchEventImpl(Component.java:4630) 在 java.awt.Container.dispatchEventImpl(Container.java:2099) 在 java.awt.Component.dispatchEvent(Component.java:4460) 在 java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574) 在 java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) 在 java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) 在 java.awt.Container.dispatchEventImpl(Container.java:2085) 在 java.awt.Window.dispatchEventImpl(Window.java:2478) 在 java.awt.Component.dispatchEvent(Component.java:4460) 在 java.awt.EventQueue.dispatchEvent(EventQueue.java:599) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy (EventDispatchThread.java:174) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 引起:java.lang.NullPointerException 在 org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:120) ... 36 更多 2011 年 5 月 23 日下午 2:09:10 GUI.GUI jButton1ActionPerformed 严重:null javax.naming.NamingException:在 SerialContext[myEnv={java.naming.factory.initial= 中查找“jms/KwetterFactory”失败com.sun.enterprise.naming.impl.SerialInitContextFactory,java.naming.factory.url.pkgs=com.sun.enterprise.naming,java.naming.factory.state=com.sun.corba.ee.impl.presentation。 rmi.JNDIStateFactoryImpl} [根异常是 javax.naming.NamingException:无法获取 SerialContextProvider 的 SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory。 url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [根异常是 java.lang.RuntimeException: Orb 初始化错误] ] 在 com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518) 在 com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455) 在 javax.naming.InitialContext.lookup(InitialContext.java:392) 在 Sender.Sender.(Sender.java:32) 在 GUI.GUI.jButton1ActionPerformed(GUI.java:73) 在 GUI.GUI.access$000(GUI.java:24) 在 GUI.GUI$1.actionPerformed(GUI.java:47) 在 javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 在 javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) 在 javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 在 javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 在 javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) 在 java.awt.Component.processMouseEvent(Component.java:6263) 在 javax.swing.JComponent.processMouseEvent(JComponent.java:3267) 在 java.awt.Component.processEvent(Component.java:6028) 在 java.awt.Container.processEvent(Container.java:2041) 在 java.awt.Component.dispatchEventImpl(Component.java:4630) 在 java.awt.Container.dispatchEventImpl(Container.java:2099) 在 java.awt.Component.dispatchEvent(Component.java:4460) 在 java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574) 在 java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) 在 java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) 在 java.awt.Container.dispatchEventImpl(Container.java:2085) 在 java.awt.Window.dispatchEventImpl(Window.java:2478) 在 java.awt.Component.dispatchEvent(Component.java:4460) 在 java.awt.EventQueue.dispatchEvent(EventQueue.java:599) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy (EventDispatchThread.java:174) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 引起:javax.naming.NamingException:无法获取 SerialContextProvider 的 SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming. impl.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [根例外是java.lang.RuntimeException:Orb 初始化错误] 在 com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:352) 在 com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:504) ... 31 更多原因:java.lang.RuntimeException:Orb 初始化错误 在 org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:148) 在 com.sun.enterprise.naming.impl.SerialContext.getORB(SerialContext.java:365) 在 com.sun.enterprise.naming.impl.SerialContext.getProviderCacheKey(SerialContext.java:372) 在 com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:402) 在 com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:347) ... 32 更多原因:java.lang.NullPointerException 在 org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:120) ... 36 更多 BUILD SUCCESSFUL(总时间:9 秒)

有人知道是什么原因造成的吗?

【问题讨论】:

  • 嗯...为什么您的 Glassfish 中有 AWT/Swing 代码?
  • 我用一个按钮创建了一个swing应用程序。当我点击它时,它会初始化这个 Sender 类,它将发送消息(至少它应该这样做)。不过感谢您的编辑,您是如何设法打开滚动条的?
  • 我将您的报价文本 (> foo) 改为使用 <pre> (<pre>foo</pre>)。
  • 您的 Swing 类在您的应用程序容器 (Glassfish) 之外运行。因此它无法进行查找,因为环境没有正确初始化。
  • @Joachim,我已经调查过了,但似乎可以只使用查找而不进入 glassfish 的应用程序容器。

标签: java glassfish jms lookup


【解决方案1】:

试试看 http://glassfish.java.net/javaee5/ejb/EJB_FAQ.html#StandaloneRemoteEJB “如何从独立的 Java 客户端访问远程 EJB 组件?”

您需要查看其中的多个项目。祝你好运。

【讨论】:

  • 链接失效了!
【解决方案2】:

要访问远程 ConnectionFactory,您需要指定 Context 属性,包括主机和端口。例如这样的:

    Context context = null;
    String host = "192.168.0.101";
    String port = "3700";
    Properties props = new Properties();

    props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
    props.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
    props.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
    props.setProperty("org.omg.CORBA.ORBInitialHost", host);
    props.setProperty("org.omg.CORBA.ORBInitialPort", port);

    try
    {
        context = new InitialContext(props);
    }
    catch (NamingException e)
    {
        System.out.println("JMSCommon Error: Can't init JNDI Context" + "(" + e + ")");
        System.exit(0);
    }

【讨论】:

    猜你喜欢
    • 2018-02-04
    • 2016-09-11
    • 2011-06-04
    • 2010-12-02
    • 2012-12-15
    • 2016-01-29
    • 2013-06-25
    • 2011-06-15
    • 2011-10-15
    相关资源
    最近更新 更多