我试图创造只是连接与今后使用JNDI。


  1. 排队名为'的例子。A'。

  2. 根据 今后的文件触及JNDI, 如果我想要使用ConectionFactories和队列(主题)通过JNDI,我必须把jndi。性文件,在我的类路径。因为我已经理解,今后类路径是%说%/conf目录的默认。我并没有改变。所以我有这个酒店对我的队列:

    的队列中。MyQueue=的例子。一个

  3. 我已经创建了java客户类来说,它使用JNDI如下:

        Properties jndiParameters = new Properties() ;
        jndiParameters.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
        jndiParameters.put(Context.PROVIDER_URL, "tcp://localhost:61616");
        Context context = new InitialContext(jndiParameters);
        ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory");
        Queue queue = (Queue) context.lookup("MyQueue");
    

但它无法找到我的队列,它将例外:内命名。NameNotFoundException:MyQueue

哪里是我的misstakes?

有帮助吗?

解决方案

问题是,你是明确的创造性以及通过他们进入InitialContext构造。这意味着jndi。性能上班的道路不会被读取。

你的码应该是这样的:

Context context = new InitialContext();
ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory");
Queue queue = (Queue) context.lookup("MyQueue");

其他提示

你可以设定静态的性质以及检索他们从一个文件,因为这样的:

    InputStream is = getClass().getResourceAsStream("/my.jndi.properties");
    Properties jndiParameters = new Properties();
    jndiParameters.load(is);
    jndiParameters.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
    jndiParameters.put(Context.PROVIDER_URL, "tcp://localhost:61616");
    Context ctx =  new InitialContext(jndiParameters);
...

这一工作,只要你设置的静态工具之后你载的资源。有益的,如果你在装载的供应商网址的其他地方的实例。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top