Не удалось найти ресурс JNDI для приложения чата JMS - PullRequest
3 голосов
/ 04 марта 2012

Я пытаюсь разработать приложение JMS, которое работает на Glassfish 3. Eclipse Indigo - моя IDE.Я попытался запустить этот пример .Если вы сочтете это необходимым, я скопирую код здесь.Я не совсем понимаю, что мне делать с JNDI.Я создал через консоль администратора два необходимых ресурса с точно указанными именами, но получаю следующее исключение:

java.lang.RuntimeException: Orb initialization erorr
at org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:180)
at com.sun.enterprise.naming.impl.SerialContext.getORB(SerialContext.java:365)
at com.sun.enterprise.naming.impl.SerialContext.getProviderCacheKey(SerialContext.java:372)
at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:402)
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:347)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:504)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
at Chat.<init>(Chat.java:38)
at Chat.main(Chat.java:113)
Caused by: java.lang.NullPointerException
at org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:152)
... 9 more
javax.naming.NamingException: Lookup failed for 'TopicConnectionFactory' in 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} [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for 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} [Root exception is java.lang.RuntimeException: Orb initialization erorr]]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
at Chat.<init>(Chat.java:38)
at Chat.main(Chat.java:113)
Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for 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} [Root exception is java.lang.RuntimeException: Orb initialization erorr]
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:352)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:504)
... 4 more
Caused by: java.lang.RuntimeException: Orb initialization erorr
at org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:180)
at com.sun.enterprise.naming.impl.SerialContext.getORB(SerialContext.java:365)
at com.sun.enterprise.naming.impl.SerialContext.getProviderCacheKey(SerialContext.java:372)
at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:402)
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:347)
... 5 more
Caused by: java.lang.NullPointerException
at org.glassfish.enterprise.iiop.api.GlassFishORBHelper.getORB(GlassFishORBHelper.java:152)
... 9 more

Из того, что я прочитал, на сервере InitialContext должен работать автоматически.*

Что я делаю не так?

Ответы [ 3 ]

1 голос
/ 04 марта 2012

После создания InitialContext вам необходимо предоставить некоторые свойства, которые описывают, как получить доступ и получить объекты с сервера JNDI.

В основном вам нужно предоставить свойство, которое помечает реализацию поставщика, и другое, которое указывает на местоположение хранилища данных, и вам может потребоваться указать другие свойства безопасности или специфичные для поставщика свойства.

В вашем случае (стеклянная рыба), я думаю, нужно установить следующие свойства:

// the initial context factory, choosing the glassfish implementation
env.setProperty("java.naming.factory.initial","com.sun.enterprise.naming.SerialInitContextFactory");
// glassfish's server location
env.setProperty("org.omg.CORBA.ORBInitialHost", "<host name or IP>");
env.setProperty("org.omg.CORBA.ORBInitialPort", "<port number>"); // default is 3700  
0 голосов
/ 06 марта 2014

Надеюсь, этот код поможет вам, моей среде: JEE6 + glassfish3V

 private static ConnectionFactory connectionFactory;
 private static Queue queue;
 public static void main(String[] args) throws NamingException {
      Connection connection = null;
      Session session = null;
      MessageConsumer consumer = null;
      TextMessage message = null;

      Properties env = new Properties();

      //glassfish3V
      env.put(Context.PROVIDER_URL, "iiop://localhost:8080");
      InitialContext jndi = new InitialContext(env);
      connectionFactory = (ConnectionFactory) jndi.lookup("jms/ConnectionFactory");
      queue = (Queue) jndi.lookup("jms/Queue"); // put your Queue here


      try {
           connection = connectionFactory.createConnection();
           session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
           consumer = session.createConsumer(queue);
           connection.start();

           while (true) {
                Message m = consumer.receive(1);

                if (m != null) {
                     if (m instanceof TextMessage) {
                          message = (TextMessage) m;
                          System.out.println(
                                  "Reading message: " + message.getText());
                     } else {
                          break;
                     }
                }
           }
      } catch (JMSException e) {
           System.err.println("Exception occurred: " + e.toString());
      } finally {
           if (connection != null) {
                try {
                     connection.close();
                } catch (JMSException e) {
                }
           }
      }
 }
0 голосов
/ 05 марта 2012

Оказалось, что проблема с JAR для моего classpath.Необходимые файлы JAR указаны в вопросе, а два других в принятом ответе здесь , а именно: gf-client-module.jar, imqjmsra.jar и imqbroker.jar.

...