這裡想請教一個關於EJB的問題,底下的程式碼是client端的程式碼,
配合一個經過j2ee的deploytool deploy出來的jar檔來跑(這個jar檔包含
RemoteHome,RemoteInterface,RemoteObject的class檔),結果在自己
的電腦上跑沒問題,可是我要到其他電腦上跑的話,程式只是告訴
電腦查詢名稱,並沒有說明要到哪裡去查詢,我應該如何修改程式
碼,才能到別的電腦上執行呢?(session是stateless的)
import javax.naming.InitialContext;
public class Client
{
public static void main(String[] args)
{
try{
javax.naming.Context initContext=new javax.naming.InitialContext();
Object obj=initContext.lookup("HelloWorld"); //遠程查詢
RemoteHome home=(RemoteHome)javax.rmi.PortableRemoteObject.narrow(obj,RemoteHome.class);
RemoteInterface remote=home.create();
String receiveFromRemote=remote.message("Hello,Remote Object!"); //遠程方法調用
System.out.println("Client Received From Remote Object: \""+receiveFromRemote+"\"");
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
在取得Context時要指定, 像這樣:
Hashtable props = new Hashtable();
//for JBoss
props.put(
InitialContext.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
props.put(InitialContext.PROVIDER_URL, "jnp://127.0.0.1:1099");
InitialContext initialContext = new InitialContext(props);
不好意思,我不太明白
props.put(InitialContext.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
這一段,還有,如果說這是JBOSS專用的,那麼每當轉換到不同的機器上執行的話不是都得用JBOSS嗎?我用的是j2ee的deploytool,
又該怎麼設定呢???
環境的確應當依據不同的AP Server來做設定.嗯~~~我沒用過deploytool所以我不太清楚該如何設定, 我都是自己寫死在程式中處理, 若你要做活的環境設定, 只要將環境寫在properties檔中, 然後去讀它就可以了, 或者寫一個jndi.properties放在Classpath中也可以(我也沒用過).
目前我們的系統是利用xml檔來做設定, 然後程式中去讀這個xml檔中的環境設定, 所以轉換到不同的機器上時, 仍不需要動到原本的source code.
下面是Oracle與WebLogic的環境, 各個AP Server都不太一樣, 應當要查document:
//for WebLogic
props.put(InitialContext.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
props.put(InitialContext.PROVIDER_URL, "t3://localhost:7001");
//for Oracle
props.put(Context.INITIAL_CONTEXT_FACTORY, "com.evermind.server.rmi.RMIInitialContextFactory");
props.put(Context.SECURITY_PRINCIPAL, "admin");
props.put(Context.SECURITY_CREDENTIALS, "welcome");
props.put(Context.PROVIDER_URL, "ormi://localhost:23891/current-workspace-app");
隨手可得的javadoc上對javax.naming.Context及javax.naming.InitialContext的解釋還算清楚