我正在尝试从非托管应用程序(控制台应用程序)中读取“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库,当然,该类是一个接口。
我可以从非托管应用程序访问队列吗?
答案 0 :(得分:1)
的Aitor;
当你说“Sun App Server”时,我不确定这意味着什么,但我认为它是Glassfish。
获取远程JMS资源有两个单独的步骤。
对于第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
Client Lib