Java 从独立代码访问队列

Java 从独立代码访问队列,java,queue,websphere,jndi,rad,Java,Queue,Websphere,Jndi,Rad,我在RationalApplicationDeveloperforWebSphere中配置了一个队列,使用“V5默认消息传递提供程序”和Websphere6.1 我现在尝试使用一个独立的应用程序(JUnit测试)访问它,以便在其中放置一些消息。我目前使用以下代码: Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.we

我在RationalApplicationDeveloperforWebSphere中配置了一个队列,使用“V5默认消息传递提供程序”和Websphere6.1

我现在尝试使用一个独立的应用程序(JUnit测试)访问它,以便在其中放置一些消息。我目前使用以下代码:

        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY,
                "com.ibm.websphere.naming.WsnInitialContextFactory");
        env.put(Context.PROVIDER_URL, "corbaloc::localhost:2809"); 
        InitialContext ctx = new InitialContext(env);

        javax.jms.Queue queue = (javax.jms.Queue) ctx.lookup("Topic");
在最后一行,我得到以下异常:

javax.naming.NamingException: The JNDI operation "lookupExt"on the context "vwagwolot0awNode01Cell/nodes/vwagwolot0awNode01/servers/server1" with the name "Topic" failed.  Please get the root cause Throwable contained in this NamingException for more information.  Root exception is java.lang.NoSuchMethodError: com.ibm.ejs.ras.TraceComponent: method isAnyTracingEnabled()Z not found
    at com.ibm.websphere.pmi.reqmetrics.PmiReqMetrics.register(PmiReqMetrics.java:949)
    at com.ibm.websphere.pmi.reqmetrics.PmiReqMetrics.<clinit>(PmiReqMetrics.java:273)
    at com.ibm.ws.naming.jndicos.CNContextImpl.lookupExt(CNContextImpl.java:1505)
    at com.ibm.ws.naming.jndicos.CNContextImpl.lookup(CNContextImpl.java:1358)
    at com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:172)
    at javax.naming.InitialContext.lookup(InitialContext.java:361)
    at de.volkswagen.oracle.provisioning.util.test.QueueTest.testQueue(QueueTest.java:33)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:85)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:58)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:60)
    at java.lang.reflect.Method.invoke(Method.java:391)
    at junit.framework.TestCase.runTest(TestCase.java:164)
    at junit.framework.TestCase.runBare(TestCase.java:130)
    at junit.framework.TestResult$1.protect(TestResult.java:106)
    at junit.framework.TestResult.runProtected(TestResult.java:124)
    at junit.framework.TestResult.run(TestResult.java:109)
    at junit.framework.TestCase.run(TestCase.java:120)
    at junit.framework.TestSuite.runTest(TestSuite.java:230)
    at junit.framework.TestSuite.run(TestSuite.java:225)
    at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
root cause:
java.lang.NoSuchMethodError: com.ibm.ejs.ras.TraceComponent: method isAnyTracingEnabled()Z not found
    at com.ibm.websphere.pmi.reqmetrics.PmiReqMetrics.register(PmiReqMetrics.java:949)
    at com.ibm.websphere.pmi.reqmetrics.PmiReqMetrics.<clinit>(PmiReqMetrics.java:273)
    at com.ibm.ws.naming.jndicos.CNContextImpl.lookupExt(CNContextImpl.java:1505)
    at com.ibm.ws.naming.jndicos.CNContextImpl.lookup(CNContextImpl.java:1358)
    at com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:172)
    at javax.naming.InitialContext.lookup(InitialContext.java:361)
    at <package name here>.QueueTest.testQueue(QueueTest.java:33)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:85)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:58)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:60)
    at java.lang.reflect.Method.invoke(Method.java:391)
    at junit.framework.TestCase.runTest(TestCase.java:164)
    at junit.framework.TestCase.runBare(TestCase.java:130)
    at junit.framework.TestResult$1.protect(TestResult.java:106)
    at junit.framework.TestResult.runProtected(TestResult.java:124)
    at junit.framework.TestResult.run(TestResult.java:109)
    at junit.framework.TestCase.run(TestCase.java:120)
    at junit.framework.TestSuite.runTest(TestSuite.java:230)
    at junit.framework.TestSuite.run(TestSuite.java:225)
    at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
javax.naming.NamingException:在名为“Topic”的上下文“vwagwolot0awNode01Cell/nodes/vwagwolot0awNode01/servers/server1”上的JNDI操作“lookupExt”失败。有关更多信息,请获取此NamingException中包含的根本原因Throwable。根异常为java.lang.NoSuchMethodError:com.ibm.ejs.ras.TraceComponent:找不到方法isAnyTracingEnabled()Z
位于com.ibm.websphere.pmi.reqmetrics.PmiReqMetrics.register(PmiReqMetrics.java:949)
位于com.ibm.websphere.pmi.reqmetrics.PmiReqMetrics.(PmiReqMetrics.java:273)
位于com.ibm.ws.naming.jndicos.CNContextImpl.lookupExt(CNContextImpl.java:1505)
位于com.ibm.ws.naming.jndicos.CNContextImpl.lookup(CNContextImpl.java:1358)
位于com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:172)
在javax.naming.InitialContext.lookup(InitialContext.java:361)中
位于de.volkswagen.oracle.provisioning.util.test.QueueTest.testQueue(QueueTest.java:33)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:85)
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:58)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:60)中
位于java.lang.reflect.Method.invoke(Method.java:391)
位于junit.framework.TestCase.runTest(TestCase.java:164)
位于junit.framework.TestCase.runBare(TestCase.java:130)
位于junit.framework.TestResult$1.protect(TestResult.java:106)
位于junit.framework.TestResult.runProtected(TestResult.java:124)
运行(TestResult.java:109)
运行(TestCase.java:120)
位于junit.framework.TestSuite.runTest(TestSuite.java:230)
运行(TestSuite.java:225)
位于org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
位于org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
根本原因:
java.lang.NoSuchMethodError:com.ibm.ejs.ras.TraceComponent:找不到方法isAnyTracingEnabled()Z
位于com.ibm.websphere.pmi.reqmetrics.PmiReqMetrics.register(PmiReqMetrics.java:949)
位于com.ibm.websphere.pmi.reqmetrics.PmiReqMetrics.(PmiReqMetrics.java:273)
位于com.ibm.ws.naming.jndicos.CNContextImpl.lookupExt(CNContextImpl.java:1505)
位于com.ibm.ws.naming.jndicos.CNContextImpl.lookup(CNContextImpl.java:1358)
位于com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:172)
在javax.naming.InitialContext.lookup(InitialContext.java:361)中
testQueue(QueueTest.java:33)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:85)
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:58)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:60)中
位于java.lang.reflect.Method.invoke(Method.java:391)
位于junit.framework.TestCase.runTest(TestCase.java:164)
位于junit.framework.TestCase.runBare(TestCase.java:130)
位于junit.framework.TestResult$1.protect(TestResult.java:106)
位于junit.framework.TestResult.runProtected(TestResult.java:124)
运行(TestResult.java:109)
运行(TestCase.java:120)
位于junit.framework.TestSuite.runTest(TestSuite.java:230)
运行(TestSuite.java:225)
位于org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
位于org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
有什么提示吗?我能做些什么来修复它?
为了做到这一点,我将ws_runtime.jar添加到类路径中,我在RAD安装中找到了该类路径

您可能需要检查类路径上有哪些jar。粗略的一瞥表明某个地方不匹配。这一行:

java.lang.NoSuchMethodError: com.ibm.ejs.ras.TraceComponent: method isAnyTracingEnabled()Z not found

告诉您,
com.ibm.websphere.pmi.reqmetrics.PmiReqMetrics.register
方法正在尝试调用
TraceComponent
上的
isAnyTracingElementEnabled
方法,但
TraceComponent
没有该方法。我猜在中包含
TraceComponent
的JAR是错误的。

我同意。我认为它是ws_runtime.jar,不过,现在我写这篇文章,我想我应该检查一下。但问题是:我从何处获得正确的版本?在这方面我帮不了你,我没有使用问题中的应用程序。需要解决两个问题:我的测试代码与待测试的EJB在同一个项目中。这导致了所描述的问题,因为EJB带来了许多我不想用于测试的类路径条目。对于正确的库,RAD提供了一个服务器运行时库,我们添加了