OpenJMS:上下文创建因InvalideClassException而失败

时间:2011-05-18 09:25:38

标签: communicationexception openjms

我正在使用OpenJMS和NetBeans 6.9.1。我在其中创建了一个简单的NetBeans平台应用程序和模块。我已经使用其startup.bat文件启动了我的openjms-0.7.7-beta。现在,在模块中,执行以下代码以开始侦听主题上的消息。

      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);

这是Exeception

    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服务器。该类位于代码和openJMS服务器使用的相同JAR文件中。但是,由于某些奇怪的原因,编译器类在服务器端具有不同的序列ID。

我搜索了互联网的线索。如果我们使用不同的编译器,则类的序列ID可以不同。我不知道openJMS服务器是否使用了我的计算机上安装的Java SE编译器以外的编译器。但是,我确信NetBeans正在使用它(Java SE编译器)进行此客户端代码编译。

其次,我不能显式地将序列id分配给异常导致类,因为它在openJMS库中,而不是我自己的类。

任何帮助将不胜感激。

-Hadaytullah

0 个答案:

没有答案