Java 在可运行JAR中连接JMS队列

Java 在可运行JAR中连接JMS队列,java,jakarta-ee,jboss,jms,executable-jar,Java,Jakarta Ee,Jboss,Jms,Executable Jar,我在本地和远程服务器上都有JMS队列,当我试图通过运行在Eclipse中的程序连接它们时,它工作正常。如果我在runnable Jar文件中打包相同的程序,我会得到以下异常,我很难弄清楚为什么会抛出它。 我假设在Jar中请求JMS队列连接时应该采用不同的方式,请帮助 我正在使用JBOSS作为中间件 public void setupPTP() { try { Properties props = new Properties(); props.setPro

我在本地和远程服务器上都有JMS队列,当我试图通过运行在Eclipse中的程序连接它们时,它工作正常。如果我在runnable Jar文件中打包相同的程序,我会得到以下异常,我很难弄清楚为什么会抛出它。 我假设在Jar中请求JMS队列连接时应该采用不同的方式,请帮助

我正在使用JBOSS作为中间件

public void setupPTP() {
    try {
        Properties props = new Properties();
        props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
        props.setProperty("java.naming.provider.url","jnp://localhost:1099");
        props.setProperty("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");

        /*
         * This is where the Exception is getting thrown
         */
        InitialContext iniCtx = new InitialContext(props);

        Object tmp = iniCtx.lookup("java:/ConnectionFactory");
        QueueConnectionFactory qcf = (QueueConnectionFactory) tmp;

        conn = qcf.createQueueConnection();
        que = (Queue) iniCtx.lookup(QueueSetup.getMessageQueue());
        session = conn.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);
        conn.start();
        log.info("### Queue Connection UP and STARTED");
    } catch (JMSException jmsException) {
        log.error("!!! JMSException while setting up the Queue");
        jmsException.printStackTrace();
    } catch (NamingException namingException) {
        log.error("!!! NamingException while setting up the Queue");
        namingException.printStackTrace();
    }

javax.naming.CommunicationException [Root exception is java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
    java.net.MalformedURLException: unknown protocol: rsrc]
    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:707)
    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:572)
    at javax.naming.InitialContext.lookup(Unknown Source)
    at org.jivesoftware.sparkimpl.plugin.heat.ProducerHeatClient.setupPTP(ProducerHeatClient.java:47)
    at org.jivesoftware.sparkimpl.plugin.heat.ProducerHeatClient.<init>(ProducerHeatClient.java:31)
    at org.jivesoftware.sparkimpl.plugin.heat.HeatPlugin.initialize(HeatPlugin.java:41)
    at org.jivesoftware.spark.PluginManager$2.run(PluginManager.java:616)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

    Caused by: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:

    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
    java.net.MalformedURLException: unknown protocol: rsrc
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:336)
    at sun.rmi.transport.Transport$1.run(Transport.java:159)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
    at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
    at sun.rmi.server.UnicastRef.invoke(Unknown Source)
    at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:610)
    ... 20 more

Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:

java.net.MalformedURLException: unknown protocol: rsrc
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:293)
    at sun.rmi.transport.Transport$1.run(Transport.java:159)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

Caused by: java.net.MalformedURLException: unknown protocol: rsrc

at java.net.URL.<init>(URL.java:574)
    at java.net.URL.<init>(URL.java:464)
    at java.net.URL.<init>(URL.java:413)
    at sun.rmi.server.LoaderHandler.pathToURLs(LoaderHandler.java:751)
    at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:147)
    at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:620)
    at org.jboss.system.JBossRMIClassLoader.loadClass(JBossRMIClassLoader.java:91)
    at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:247)
    at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:197)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1574)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
    at javax.naming.CompoundName.readObject(CompoundName.java:554)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
    at sun.rmi.server.UnicastRef.unmarshalValue(UnicastRef.java:306)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:290)
    ... 9 more 
public void setupPTP(){
试一试{
Properties props=新属性();
setProperty(“java.naming.factory.initial”、“org.jnp.interfaces.NamingContextFactory”);
setProperty(“java.naming.provider.url”jnp://localhost:1099");
setProperty(“java.naming.factory.url.pkgs”,“org.jboss.naming:org.jnp.interfaces”);
/*
*这就是引发异常的地方
*/
InitialContext iniCtx=新的InitialContext(道具);
对象tmp=iniCtx.lookup(“java:/ConnectionFactory”);
QueueConnectionFactory qcf=(QueueConnectionFactory)tmp;
conn=qcf.createQueueConnection();
que=(Queue)iniCtx.lookup(QueueSetup.getMessageQueue());
session=conn.createQueueSession(false,QueueSession.AUTO_-ACKNOWLEDGE);
连接开始();
log.info(“####队列连接已启动”);
}捕获(JMSException JMSException){
log.error(!!!设置队列时发生JMSException”);
jmseception.printStackTrace();
}捕获(NamingException NamingException){
log.error(!!!设置队列时发生NamingException”);
namingException.printStackTrace();
}
javax.naming.CommunicationException[根异常为java.rmi.ServerException:服务器线程中发生RemoteException;嵌套异常为:
java.rmi.UnmarshallException:对参数进行解组时出错;嵌套异常为:
java.net.MalformedURLException:未知协议:rsrc]
位于org.jnp.interfaces.NamingContext.lookup(NamingContext.java:707)
位于org.jnp.interfaces.NamingContext.lookup(NamingContext.java:572)
位于javax.naming.InitialContext.lookup(未知源)
位于org.jivesoftware.sparkimpl.plugin.heat.ProducerHeatClient.setupPTP(ProducerHeatClient.java:47)
位于org.jivesoftware.sparkimpl.plugin.heat.ProducerHeatClient.(ProducerHeatClient.java:31)
位于org.jivesoftware.sparkimpl.plugin.heat.HeatPlugin.initialize(HeatPlugin.java:41)
位于org.jivesoftware.spark.PluginManager$2.run(PluginManager.java:616)
在java.awt.event.InvocationEvent.dispatch(未知源)处
位于java.awt.EventQueue.dispatchEventImpl(未知源)
位于java.awt.EventQueue.access$000(未知源)
在java.awt.EventQueue$1.run处(未知源)
在java.awt.EventQueue$1.run处(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.AccessControlContext$1.doIntersectionPrivilege(未知源)
位于java.awt.EventQueue.dispatchEvent(未知源)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(未知源)
位于java.awt.EventDispatchThread.pumpEventsForFilter(未知源)
位于java.awt.EventDispatchThread.pumpEventsForHierarchy(未知源)
位于java.awt.EventDispatchThread.pumpEvents(未知源)
位于java.awt.EventDispatchThread.pumpEvents(未知源)
位于java.awt.EventDispatchThread.run(未知源)
原因:java.rmi.ServerException:服务器线程中发生RemoteException;嵌套异常为:
java.rmi.UnmarshallException:对参数进行解组时出错;嵌套异常为:
java.net.MalformedURLException:未知协议:rsrc
在sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:336)
在sun.rmi.transport.transport$1.run(transport.java:159)
位于java.security.AccessController.doPrivileged(本机方法)
位于sun.rmi.transport.transport.serviceCall(transport.java:155)
位于sun.rmi.transport.tcp.tcpttransport.handleMessages(tcpttransport.java:535)
位于sun.rmi.transport.tcp.tcpttransport$ConnectionHandler.run0(tcpttransport.java:790)
位于sun.rmi.transport.tcp.tcpttransport$ConnectionHandler.run(tcpttransport.java:649)
位于java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
运行(Thread.java:662)
位于sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(未知源)
位于sun.rmi.transport.StreamRemoteCall.executeCall(未知源)
位于sun.rmi.server.UnicastRef.invoke(未知源)
位于org.jnp.server.NamingServer_Stub.lookup(未知源)
位于org.jnp.interfaces.NamingContext.lookup(NamingContext.java:610)
…还有20个
原因:java.rmi.unmarshallException:对参数进行解组时出错;嵌套异常为:
java.net.MalformedURLException:未知协议:rsrc
位于sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:293)
在sun.rmi.transport.transport$1.run(transport.java:159)
位于java.security.AccessController.doPrivileged(本机方法)
位于sun.rmi.transport.transport.serviceCall(transport.java:155)
位于sun.rmi.transport.tcp.tcpttransport.handleMessages(tcpttransport.java:535)
位于sun.rmi.transport.tcp.tcpttransport$ConnectionHandler.run0(tcpttransport.java:790)
位于sun.rmi.transport.tcp.tcpttransport$ConnectionHandler.run(tcpttransport.java:649)
位于java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
运行(Thread.java:662)
原因:java.net.MalformedURLException:未知协议:rsrc
位于java.net.URL。(URL.java:574)
在java.net.URL.(URL.java:464)
在java.net.URL.(URL.java:413)
位于sun.rmi.server.LoaderHandler.PathTorls(LoaderHandler.java:751)
位于sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.j