如何从非托管的Java应用程序中读取jms队列?

时间:2011-05-27 13:44:40

标签: jms

我正在尝试从非托管应用程序(控制台应用程序)中读取“Sun App Server”中创建的jms队列中的消息,但是我收到以下错误:

NoInitialContextException
Cannot instantiate class: javax.jms.TopicConnectionFactory

使用此代码:

Properties env = new Properties( );
env.put(Context.INITIAL_CONTEXT_FACTORY, "javax.jms.TopicConnectionFactory");
InitialContext jndi = new InitialContext(env);

我引用了包含该类的j2ee.jar库,当然,该类是一个接口。

我可以从非托管应用程序访问队列吗?

1 个答案:

答案 0 :(得分:1)

的Aitor;

当你说“Sun App Server”时,我不确定这意味着什么,但我认为它是Glassfish。

获取远程JMS资源有两个单独的步骤。

  1. 您需要创建一个需要有效的InitialContextFactory类名的远程JNDI连接。
  2. 一旦建立了连接,就可以查找TopicConnectionFactory。
  3. 对于第1项,this link演示了如何建立远程JNDI连接。 对于项目#2,一旦有了JNDI上下文,您还需要知道TopicConnectionFactory的JNDI名称,它看起来像:

    TopicConnectionFactory tcf = (TopicConnectionFactory) jndi.lookup("jms/TopicConnectionFactory");
    

    您需要记住的一个方面是 j2ee.jar 库包含JMS类的通用Java EE 接口,但您还需要一个库在包含JMS实现具体类的类路径中。这也适用于JNDI连接。这个tutorial提供了一个简明的列表:

    Applicationserver JNDI Lookup

    • /lib/appserv-rt.jar
    • /lib/appserv-admin.jar
    • /lib/javaee.jar /lib/j2ee.jar

    Client Lib

    • /imq/lib/jms.jar
    • /imq/lib/imq.jar
    • /imq/lib/imqutil.jar
    • /lib/install/applications/jmsra/jmsra.jar