Acessando uma fila do código independente
Pergunta
Eu tenho uma fila configurada no Rational Application Developer for Websphere, usando um "provedor de mensagens padrão V5" e um WebSphere6.1
Agora tento acessá -lo usando um aplicativo independente (teste JUNIT), para colocar algumas mensagens nele. Atualmente, uso o seguinte código:
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");
Na última linha, recebo a seguinte exceção:
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)
Alguma dica, o que posso fazer para corrigi -lo? Para chegar tão longe, adicionei o ws_runtime.jar no caminho de classe, que encontrei em algum lugar na instalação do RAD.
Solução
Você pode verificar quais potes você tem no caminho de classe. Um olhar superficial está indicando uma incompatibilidade em algum lugar. Está linha:
java.lang.NoSuchMethodError: com.ibm.ejs.ras.TraceComponent: method isAnyTracingEnabled()Z not found
Está lhe dizendo que o com.ibm.websphere.pmi.reqmetrics.PmiReqMetrics.register
o método está tentando chamar o isAnyTracingElementEnabled
método em TraceComponent
, mas TraceComponent
não tem esse método. Estou supondo que o pote que tem TraceComponent
In é o errado.