OpenJMS: создание контекста завершается ошибкой с InvalideClassException - PullRequest
2 голосов
/ 18 мая 2011

Я использую OpenJMS с NetBeans 6.9.1.Я создал простое приложение на платформе NetBeans и модуль внутри него.Я запустил openjms-0.7.7-beta, используя его файл startup.bat.Теперь в модуле выполняется следующий код, чтобы начать прослушивание сообщений по теме.

      factoryName = "ConnectionFactory";
      String topicName = "topic1";
      String initialContext = "org.exolab.jms.jndi.InitialContextFactory";
      String providerURL = "tcp://localhost:3035/";

        Hashtable properties = new Hashtable();
        properties.put(Context.INITIAL_CONTEXT_FACTORY, initialContext);
        properties.put(Context.PROVIDER_URL, providerURL);
        context = new InitialContext(properties);
        factory = (ConnectionFactory) context.lookup(factoryName);
        dest = (Destination) context.lookup(topicName);
        connection = factory.createConnection();
        session = connection.createSession(false,  Session.AUTO_ACKNOWLEDGE);
        receiver = session.createConsumer(dest);
        receiver.setMessageListener(this);
        connection.start();

Код отлично работал в простом Java-приложении, но в этой конфигурации он не работает на линии;

                    context = new InitialContext(properties);

Вот исключение

    javax.naming.CommunicationException: Failed to lookup JNDI provider for URL: tcp://localhost:3035/ [Root exception is java.rmi.UnmarshalException: Failed to unmarshal response; nested exception is: 
    java.io.InvalidClassException: org.exolab.jms.server.net.RemoteNamingProvider__Proxy; local class incompatible: stream classdesc serialVersionUID = 8042785765194780386, local class serialVersionUID = 3384686210958076383]
    at org.exolab.jms.jndi.InitialContextFactory.getInitialContext(InitialContextFactory.java:160)
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
    at javax.naming.InitialContext.init(InitialContext.java:223)
    at javax.naming.InitialContext.<init>(InitialContext.java:197)

Мне кажется, что этот клиентский код отправляет объект класса "org.exolab.jms.server.net.RemoteNamingProvider__Proxy" на сервер openJMS.Класс находится в одном и том же JAR-файле, используемом как кодом, так и сервером openJMS.Однако по какой-то странной причине компилятор класса имеет другой серийный идентификатор на стороне сервера.

Я искал в интернете подсказки.Серийные идентификаторы класса могут отличаться, если мы используем разные компиляторы.Я не знаю, использует ли сервер openJMS компилятор, отличный от моего компилятора Java SE, установленного на моем компьютере.Однако я уверен, что NetBeans использует его (компилятор Java SE) для этой клиентской компиляции кода.

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

Любая помощь будет оценена.

-Хадайтулла

...