websphere jms从远程客户端访问队列 [英] websphere jms queue access from remote client
问题描述
背景
我是php&前端Web开发人员使用Netbeans在Java中开发应用程序,从websphere(我认为是V8.5)读取JMS队列,然后向适当的脚本/服务器发出命令。这是我第一次使用Java大约10年,所以请耐心等待。我的初始测试应用程序在托管jms队列的服务器上运行正常,但是当我尝试从远程位置(目前恰好是windows但最终将是linux)进行连接时,我一直遇到一个错误。我一直在努力克服我缺乏Java经验,诊断jar问题的过程,以及从websphere和其他地方找到显然需要的罐子,但最终达到了一堵砖墙。我已经看到很多答案,包括诸如你需要正确的jar文件之类的陈述,但没有说明哪些或者你需要thisone.jar以及所引用的所有罐子。我不知道如何找出应该是什么罐子。我看过帖子说这个过程应该只适用于我库中的一些罐子。我完全陷入困境......
Background I am php & frontend web developer developing an application in Java using Netbeans to read from a websphere (V8.5 I think) JMS queue and then issue commands to appropriate scripts/servers. This is my first major run in with Java for about 10 years so please bear with me. My initial test application runs fine on the server that hosts the jms queue but I have been running into one error after another when trying to connect from a remote location (which at the moment happens to be windows but will be linux in the end). I have been battling through both my lack of experience with Java the process of diagnosing jar issues and locating apparently needed jars from websphere and elsewhere but have finally reached a brick wall. I have seen lots of answers that consist of statements such as "you need the right jar files", but not saying which ones or you need thisone.jar and all the jars that one refers to. I don't know how to find out what jars that should be. I have read posts that say that the process should work with only some of the jars in my library. Am completely stuck...
错误
我没有运气的错误
Error The error which I am having no luck in getting through
javax.naming.NamingException: Failed to initialize the ORB [Root
exception is org.omg.CORBA.INITIALIZE: can't instantiate default ORB
implementation com.ibm.CORBA.iiop.ORB
完整的消息是这个
javax.naming.NamingException: Failed to initialize the ORB [Root exception is
org.omg.CORBA.INITIALIZE: can't instantiate default ORB implementation
com.ibm.CORBA.iiop.ORB vmcid: 0x0 minor code: 0 completed: No]
at com.ibm.ws.naming.util.Helpers.getOrb(Helpers.java:314)
javax.naming.NamingException: Failed to initialize the ORB [Root exception is org.omg.CORBA.INITIALIZE: can't instantiate default ORB implementation
com.ibm.CORBA.iiop.ORB vmcid: 0x0 minor code: 0 completed: No]
at com.ibm.ws.naming.util.WsnInitCtxFactory.getInitialContextInternal(WsnInitCtxFactory.java:384)
at com.ibm.ws.naming.util.WsnInitCtx.getContext(WsnInitCtx.java:113)
at com.ibm.ws.naming.util.WsnInitCtx.getContextIfNull(WsnInitCtx.java:428)
at com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:144)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
at jmstool2.JmsConn.CreateFactCon(JmsConn.java:101)
at jmstool2.JmsConn.connect(JmsConn.java:56)
at jmstool2.Jmstool2.main(Jmstool2.java:20)
Caused by: org.omg.CORBA.INITIALIZE: can't instantiate default ORB implementation com.ibm.CORBA.iiop.ORB vmcid: 0x0 minor code: 0 completed: No
at org.omg.CORBA.ORB.create_impl(ORB.java:327)
at org.omg.CORBA.ORB.init(ORB.java:367)
at com.ibm.ws.orb.GlobalORBFactory.init(GlobalORBFactory.java:85)
at com.ibm.ejs.oa.EJSORBImpl.initializeORB(EJSORBImpl.java:174)
at com.ibm.ejs.oa.EJSClientORBImpl.<init>(EJSClientORBImpl.java:97)
at com.ibm.ejs.oa.EJSClientORBImpl.<init>(EJSClientORBImpl.java:73)
at com.ibm.ejs.oa.EJSORB.init(EJSORB.java:386)
at com.ibm.ws.naming.util.Helpers.getOrb(Helpers.java:305) ... 8 more
Caused by: java.lang.NoSuchFieldError: UNKNOWN
at com.ibm.rmi.util.RepositoryId.createHashString(RepositoryId.java:738)
at com.ibm.rmi.util.RepositoryId.<clinit>(RepositoryId.java:254)
at com.ibm.rmi.iiop.CDROutputStream.<clinit>(CDROutputStream.java:1107)
at com.ibm.rmi.corba.ORB.<init>(ORB.java:281) at com.ibm.rmi.iiop.ORB.<init>(ORB.java:187) at com.ibm.CORBA.iiop.ORB.<init>(ORB.java:576)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at java.lang.Class.newInstance(Class.java:374)
at org.omg.CORBA.ORB.create_impl(ORB.java:325) ... 15 more
我正在做什么
我已将以下罐子添加到库中
What I am doing I have added the following jars to the library
javax.jms-1.1.jar
com.ibm.ws.orb_8.5.0.jar
com.ibm.ws.ejb.thinclient_8.5.0.jar
com.ibm.was.sib.client.thin.jms_8.5.0.jar
com.ibm.was.admin.client_8.5.0.jar
com.ibm.ws.messagingClient.ja
我还读到需要以下罐子
sibc.jms.jar
sibc.jndi.jar
sibc.orb.jar
我已经找到了这些并添加了它们,虽然我也读过如果你有我已经拥有的瘦客户机就不需要这些。
I have located these and added them also, although I have also read that these are not needed if you have the thin client I already have.
我正在使用JDK1.7
and am using JDK1.7
context factory: com.ibm.websphere.naming.WsnInitialContextFactory
Provider URL: corbaloc:iiop:192.168.254.202:2809
正在创建上下文。但我无法建立队列工厂连接。我可以创建一个到ip地址的套接字并使用快速测试应用程序发布。
The context is being created. But am unable to make the queue factory connection. I can create a socket to the ip address and post using a quick test application.
代码
这是类文件和所有连接位。这是完整的工作正在进行中。
The Code Here is the class file and all the connectiony bits. It is complete work in progress.
import java.util.Hashtable;
import javax.naming.*;
import javax.jms.*;
import com.ibm.CORBA.*;
import com.ibm.ws.*; /*
/**
* Connection Factory Notes on IBM Websphere
*
* jndi/INConnectionFactory
* jndi/OUTConnectionFactory
*
* jndi/INQueue
* jndi/OUTQueue
*
* jndi/INActivation
* jndi/OUTActivation
*
* websphere server: 192.168.254.202
*
* JMS queued port: 5558 unsecured (MQ) and 5578 secure
* JMS Security Port 5557
* JMS Direct Port: 5559
* SOAP: 9976
* //other ports mentioned: 7276 (unsecured) and 7286 (secured)
* NOTE: A bootstrap address with no port specification defaults to port 2809
*/
public class JmsConn {
/*int jmsQueuedPort = 5558;
int jmsSecrityPort = 5557;
int jmsDirectPort = 5559;
int soapPort = 9976;*/
int bootstrap = 2809; //default port
int bootstrap10 = 2810;
int unSecPort = 7276;
String serverIP = "192.168.254.202";
String scheme = "corbaloc:iiop:"; //e.g. ws, ldap,iiop, corbaloc:iiop
String contextFactory = "com.ibm.websphere.naming.WsnInitialContextFactory";
String queueInName = "jndi/INQueue";
String queueOutName = "jndi/OUTQueue";
String outFactory = "jndi/OUTConnectionFactory";
String inFactory = "jndi/INConnectionFactory";
InitialContext jndiContext;
ConnectionFactory connectionFactory;
Connection qConn;
String providerUrl = scheme+serverIP+":"+bootstrap;
Session qSession;
Queue q;
public void connect() {
this.CreateContext();
this.CreateFactCon(this.outFactory);
this.getQueue(this.queueOutName);
}
public void Lookup(String thingToLookup){
try{
System.out.println("Attempting to lookup "+thingToLookup);
}catch(Exception ex){
System.out.println("ERROR: Could not perform lookup of " + thingToLookup +
System.lineSeparator() + ex.toString());
// System.out.println("Lookup Result: " + this.jndiContext.lookup);
System.exit(3);
}
}
public void CreateContext(){
try{
System.out.println("Attempting to create connection context");
Hashtable env = new Hashtable(); // [jh] in theory this has been superceeded
// and should use HashMap
env.put(Context.INITIAL_CONTEXT_FACTORY,this.contextFactory);
System.out.println("context factory: "+this.contextFactory);
System.out.println("Provider URL: "+this.providerUrl);
env.put(Context.PROVIDER_URL, providerUrl); //+":"+this.jmsDirectPort
try{
this.jndiContext = new InitialContext(env);
//this.jndiContext = new InitialContext();
}catch(NamingException e){
System.out.println("ERROR: Could not create JNDI context: " +
System.lineSeparator() + e.toString());
System.exit(1);
}
System.out.println("End of CreateContext.");
}catch(Exception exc){
System.out.println("ERROR in CreateContext: "+exc.toString());
System.exit(1);
}
}
public void CreateFactCon(String factory){
try{
System.out.println("Attmepting to create factory lookup:");
this.connectionFactory = (ConnectionFactory)this.jndiContext.lookup(factory);
}catch(NamingException e){
System.out.println("ERROR: Could not create factory connection:");
e.printStackTrace(System.err);
System.out.println(e.toString());
System.exit(2);
}
System.out.println("Lookup successfull:");
try{
System.out.println("Attmepting to create connection:");
this.qConn = this.connectionFactory.createConnection();
this.qSession = qConn.createSession(false,Session.AUTO_ACKNOWLEDGE);
}catch(Exception e){
e.printStackTrace(System.err);
System.out.println(e.toString());
System.exit(4);
}
System.out.println("Connection successful.");
System.out.println("End of CreateFactoryConnection.");
}
public void getQueue(String queueName){
try{
this.q = (Queue)this.jndiContext.lookup(queueName);
}catch(Exception e){
System.out.println("ERROR: Could not get Queue:");
e.printStackTrace(System.err);
System.out.println(e.toString());
System.exit(2);
}
}
}
更新
之后减少jar文件到
UPDATE After cutting back the jar files to
com.ibm.ws.orb_8.5.0.jar
com.ibm.ws.wjb .thingclient_8.5.0.jar
com.ibm.ws.sib.client.thin.jms_8.5.0.jar
com.ibm.ws.orb_8.5.0.jar com.ibm.ws.wjb.thingclient_8.5.0.jar com.ibm.ws.sib.client.thin.jms_8.5.0.jar
抛出以下错误
javax.naming.NamingException: Error getting WsnNameService properties [Root exception is org.omg.CORBA.TRANSIENT: initial and forwarded IOR inaccessible vmcid: 0x4942f000 minor code: 3591 completed: No]
at com.ibm.ws.naming.util.WsnInitCtxFactory.mergeWsnNSProperties(WsnInitCtxFactory.java:1552)
at com.ibm.ws.naming.util.WsnInitCtxFactory.getRootContextFromServer(WsnInitCtxFactory.java:1042)
at com.ibm.ws.naming.util.WsnInitCtxFactory.getRootJndiContext(WsnInitCtxFactory.java:962)
at com.ibm.ws.naming.util.WsnInitCtxFactory.getInitialContextInternal(WsnInitCtxFactory.java:614)
at com.ibm.ws.naming.util.WsnInitCtx.getContext(WsnInitCtx.java:128)
at com.ibm.ws.naming.util.WsnInitCtx.getContextIfNull(WsnInitCtx.java:765)
at com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:164)
at com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:179)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
at jmstool2.JmsConn.CreateFactCon(JmsConn.java:104)
at jmstool2.JmsConn.connect(JmsConn.java:59)
at jmstool2.Jmstool2.main(Jmstool2.java:20)
Caused by: org.omg.CORBA.TRANSIENT: initial and forwarded IOR inaccessible vmcid: 0x4942f000 minor code: 3591 completed: No
at com.ibm.rmi.corba.ClientDelegate.createRequest(ClientDelegate.java:1250)
at com.ibm.CORBA.iiop.ClientDelegate.createRequest(ClientDelegate.java:1321)
at com.ibm.rmi.corba.ClientDelegate.createRequest(ClientDelegate.java:1146)
at com.ibm.CORBA.iiop.ClientDelegate.createRequest(ClientDelegate.java:1287)
at com.ibm.rmi.corba.ClientDelegate.request(ClientDelegate.java:1853)
at com.ibm.CORBA.iiop.ClientDelegate.request(ClientDelegate.java:1243)
at org.omg.CORBA.portable.ObjectImpl._request(ObjectImpl.java:449)
at com.ibm.WsnBootstrap._WsnNameServiceStub.getProperties(_WsnNameServiceStub.java:38)
at com.ibm.ws.naming.util.WsnInitCtxFactory.mergeWsnNSProperties(WsnInitCtxFactory.java:1549)
... 11 more
Java Result: 2
推荐答案
检查一下 - 使用WebSphere Application Server安装和配置JMS瘦客户端。
您现在唯一需要的罐子是:
The only jars you should need for now are:
com.ibm.ws.orb_8.5.0.jar
com.ibm.was.sib.client.thin.jms_8.5.0.jar
com.ibm.ws.ejb.thinclient_8.5.0.jar
所以请从类路径中删除所有其他内容。
并确保这些罐子也在你的运行类路径中,而不仅仅是在构建期间。
so please remove all other from your classpath. And make sure these jars are also in your run classpath, not only during build.
对于初始上下文,请尝试以下方法:
For initial context try the following:
Hastable env = new Hastable();
env.put(Context.PROVIDER_URL,"iiop://localhost:2809"); // if using default ports
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory");
InitialContext ctx = new InitialContext(env);
这篇关于websphere jms从远程客户端访问队列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!