2016-09-29 172 views
0

初始上下文請參閱下面的代碼:獲取遠程客戶端

Context ctx = null; 
ctx=new InitialContext(); 
TestEJBRemote t = (TestEJBRemote) ctx.lookup("java:global/EJBTest/EJBTest-ejb/TestEJB"); 
System.out.println(t.getName("Ian")); 

輸出是我所期望的,即您好伊恩。

上面的代碼假定客戶端與Glassfish實例安裝在同一臺計算機上。我如何從遠程應用程序客戶端獲得相同的結果。我試過這個:

Context ic = new InitialContext(); 
     TestEJBRemote t = (TestEJBRemote) ic.lookup("corbaname:computer:4848#/a/b/TestEJB"); 
     System.out.println(t.getName("Ian")); 

它會產生錯誤。我假設該端口是Glassfish安裝的端口。

回答

1

用於連接到GlassFish和似鯖水狼牙魚遠程客戶端,我通常使用以下命令:

Properties props = new Properties(); 
props = new Properties(); 
props.setProperty("java.naming.factory.initial", 
    "com.sun.enterprise.naming.SerialInitContextFactory"); 
props.setProperty("java.naming.factory.url.pkgs", 
    "com.sun.enterprise.naming"); 
props.setProperty("java.naming.factory.state", 
    "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl"); 
props.setProperty("org.omg.CORBA.ORBInitialHost", "127.0.0.1"); 
props.setProperty("org.omg.CORBA.ORBInitialPort", "3700"); 
InitialContext ctx = new InitialContext(props); 

MyBeanRemote bean = (MyBeanRemote) ctx.lookup("com.example.MyBean"); 

我會想象,從你的榜樣,您的原始查詢會在這種情況下工作:

TestEJBRemote t = (TestEJBRemote) ctx.lookup("java:global/EJBTest/EJBTest-ejb/TestEJB"); 

如果您有多個遠程端點,您可以使用以下方法在它們之間進行負載平衡:

Hashtable env = new Hashtable(); 
env.put("com.sun.appserv.iiop.endpoints","host1:port1,host2:port2,..."); 
InitialContext ctx = new InitialConext(env); 

Ref:https://docs.oracle.com/cd/E26576_01/doc.312/e24930/java-clients.htm#GSDVG00075

+0

謝謝。這確實有效。爲什麼您的上下文查找路徑包含完整停止,而我的包含正斜槓? +1的答案。 – w0051977

+0

這只是我從Oracle文檔鏈接中挖掘出來的一個例子,並且更加清晰。在這個查詢中,它只是bean本身和它的包,而你有(正確)使用全局查找幷包含'appname/EJB-JAR-name/BeanName'路徑。 – Mike