websphere jms从远程客户端访问队列 [英] websphere jms queue access from remote client

查看:150
本文介绍了websphere jms从远程客户端访问队列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

背景
我是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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆