当前位置: 首页 > 面试题库 >

Websphere JMS从远程客户端排队访问

养俊驰
2023-03-14
问题内容

背景
我是PHP和前端Web开发人员,使用Netbeans在Java中开发应用程序以从Websphere(我认为是V8.5)JMS队列中进行读取,然后向适当的脚本/服务器发出命令。这是我10年来第一次使用Java进行专业学习,因此请多多包涵。我的初始测试应用程序在托管jms队列的服务器上运行良好,但是当尝试从远程位置进行连接时我遇到了一个接一个的错误(此刻恰好是Windows,但最终将是linux)。我一直在努力解决Java缺乏经验,诊断jar问题以及从Websphere和其他地方查找显然需要的jar的过程,但最终都遇到了麻烦。我已经看到很多答案,这些答案包括诸如“您需要正确的jar文件”之类的语句,而不是说哪个或您需要thisone.jar以及一个人引用的所有jar。我不知道如何找出应该的罐子。我读过一些帖子,说该过程仅适用于我的图书馆中的一些罐子。完全卡住了…

错误 我没有运气的错误

 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

我正在做什么, 我已将以下罐子添加到库中

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

我已经找到了它们并也添加了它们,尽管我也读到如果您已经拥有瘦客户机,则不需要这些。

并正在使用JDK1.7

context factory: com.ibm.websphere.naming.WsnInitialContextFactory 
Provider URL: corbaloc:iiop:192.168.254.202:2809

正在创建上下文。但是无法建立队列工厂连接。我可以创建一个到ip地址的套接字并使用快速测试应用程序发布。

*这里 *的代码 是类文件和所有连接位。它是完成中的工作。

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文件削减到

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瘦客户端

您现在需要的唯一罐子是:

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

因此,请从您的类路径中删除所有其他内容。并确保不仅在构建过程中,这些jar也在您的运行类路径中。

对于初始上下文,请尝试以下操作:

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);


 类似资料:
  • 14.2.实现远程客户端 我们已经有了远程Service,接下来实现它的客户端,然后测试两者是否工作正常。我们这里有意将服务端与客户端分在两个不同的package中,因为它们是两个独立的程序。 好,在Eclipse中新建一个项目,步骤同以前一样,兹不赘述。不过这里有一点不同,那就是它依赖于前一个项目,也就是LogService。这一点很重要,因为LogClient需要知道LogService的接口

  • 通过 Invoke 方法同步调用 Invoke(string, []reflect.Value, *InvokeSettings) ([]reflect.Value, error) Invoke 方法有三个输入参数,两个输出参数。 第一个输入参数是远程方法名。 第二个输入参数是远程方法参数。 第三个输入参数是远程调用设置。 第一个输出参数表示返回的结果。 第二个输出参数表示返回的错误。 因为使用该

  • 问题内容: 根据EJB客户端应用程序上的Netbeans教程,我似乎无法调用该方法: 编译错误: 客户: ejb: 远程接口: 现在,如果接口被修改: Bean现在可以使用以下方法: 但是,有一个NPE: 如何正确调用该方法?EJB未实例化? 问题答案: 我从头开始。我能想到的唯一区别是,我没有创建EJB应用程序,而是为bean创建了EJB模块。否则,我认为是相同的。 结构体: 客户代码: 豆:

  • 从Google云应用程序中,我需要打开位于项目云存储中的文件。我试图使用以下表单的URL访问该文件,但出现以下错误:http://storage.googleapis.com/my-bucket/my-file错误:访问被拒绝。匿名调用方没有存储对象 www.googleapis。com/上传/存储/v1/b/http://my_appl//my-bucket/my-file错误404 www.g

  • 我试图使用JBoss7.1.1中的JNDI从远程客户端调用,但我得到了一个异常: 我使用的是jboss的安全机制,并且我已经通过add-user.bat添加了用户,还有带有用户名和密码的jboss-ejb-client.properties文件,但仍然会得到异常。我遵循了链接的示例集:使用JNDI从远程客户端进行EJB调用,当我不使用安全机制时也是如此,但是当我使用安全机制时,就会出现错误 你错过

  • 问题内容: 我目前正在将代码从Jboss7迁移到Wildfly10。 服务器本身完全可以启动。当尝试将我们的客户端与正在运行的新wildfly10服务器进行ejb-remote调用连接时,它将无法正常工作。 我唯一要使用的是以下错误: org.jboss.ejb.client.remoting.ConfigBasedEJBClientContextSelector setupEJBReceiver