EJB客戶端如何不用任何client jar去動態呼叫遠端伺服器的EJB?
我現在的專案遇到一個這樣的問題,希望高手能給與解答。萬分感謝!
客戶端呼叫stateless EJB,客戶端Classpath沒有ejb client jar以及ejb的任何類。試圖透過反射來解決,
但是一直沒有成功。使用如下程式碼,發現依然需要匯入home介面才能執行。無法滿足不匯入任何介面的要求。
//REFLECT EJB..REFLECT..
import javax.ejb.*;
//no-need to import anything..!!
public Class client_ejb_reflection {
public static void main(String args[]){
//1. create initial context
Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory" );
env.put(Context.PROVIDER_URL, "jnp://192.168.66.66:1099" );
env.put("Java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");Context c = new InitialContext(env);
//2. look-up home
Object home = ctx.lookup(JNDI_NAME);
EJBHome theHome =(EJBHome) PortableRemoteObject.narrow(home, EJBHome.class)
//3. create the remote
EJBMetaData md =
this.theHome.getEJBMetaData();
Class homeClass =
md.getHomeInterfaceClass();
EJBObject theRemote = (EJBObject)
this.invoke(homeClass,theHome,"create");
//4. use the remote
Class remoteClass =
md.getRemoteInterfaceClass();
String message =
this.invoke(remoteClass,theRemote,"getMessage");
}
static Object invoke(Class c,Object obj,String mname){
Method[] methods = c.getMethods();
String name=null;
Object r= null;
try {
for(int i = 0; i <methods.length ;i++) {
name = methods.getName();
if(name.startsWith(mname)) {
r = methods.invoke(obj,null);
}
}
} catch(Exception e){
e.printStackTrace();
}
return r;
}
}
如果不匯入home介面,就會報如下錯誤:
javax.naming.CommunicationException [Root exception is java.lang.ClassNotFoundException: com.rchema.GET_CUSTOMERHome (no security manager: RMI class loader disabled)]
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:728)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:587)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at com.rchema.EJBClientDynamic.dynamic_invoke(EJBClientDynamic.java:73)
at com.rchema.EJBClientDynamic.main(EJBClientDynamic.java:52)
客戶端呼叫stateless EJB,客戶端Classpath沒有ejb client jar以及ejb的任何類。試圖透過反射來解決,
但是一直沒有成功。使用如下程式碼,發現依然需要匯入home介面才能執行。無法滿足不匯入任何介面的要求。
//REFLECT EJB..REFLECT..
import javax.ejb.*;
//no-need to import anything..!!
public Class client_ejb_reflection {
public static void main(String args[]){
//1. create initial context
Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory" );
env.put(Context.PROVIDER_URL, "jnp://192.168.66.66:1099" );
env.put("Java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");Context c = new InitialContext(env);
//2. look-up home
Object home = ctx.lookup(JNDI_NAME);
EJBHome theHome =(EJBHome) PortableRemoteObject.narrow(home, EJBHome.class)
//3. create the remote
EJBMetaData md =
this.theHome.getEJBMetaData();
Class homeClass =
md.getHomeInterfaceClass();
EJBObject theRemote = (EJBObject)
this.invoke(homeClass,theHome,"create");
//4. use the remote
Class remoteClass =
md.getRemoteInterfaceClass();
String message =
this.invoke(remoteClass,theRemote,"getMessage");
}
static Object invoke(Class c,Object obj,String mname){
Method[] methods = c.getMethods();
String name=null;
Object r= null;
try {
for(int i = 0; i <methods.length ;i++) {
name = methods.getName();
if(name.startsWith(mname)) {
r = methods.invoke(obj,null);
}
}
} catch(Exception e){
e.printStackTrace();
}
return r;
}
}
如果不匯入home介面,就會報如下錯誤:
javax.naming.CommunicationException [Root exception is java.lang.ClassNotFoundException: com.rchema.GET_CUSTOMERHome (no security manager: RMI class loader disabled)]
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:728)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:587)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at com.rchema.EJBClientDynamic.dynamic_invoke(EJBClientDynamic.java:73)
at com.rchema.EJBClientDynamic.main(EJBClientDynamic.java:52)
相關文章
- 在客戶端儲存對EJB的遠端呼叫是否可行?客戶端
- 怎麼跨App 遠端呼叫EJBAPP
- 遠端application client 怎樣訪問EJBAPPclient
- 怎樣在websphere環境外的客戶端呼叫webshphere的ejb?Web客戶端
- 幫忙看看我得ejb客戶端客戶端
- 來幫我看看這個簡單的遠端客戶端呼叫EJB出錯的例子,謝謝了客戶端
- struts工程呼叫遠端EJB元件時怎麼部署元件
- EJB3.0跨 JVM遠端呼叫能用依賴注入嗎JVM依賴注入
- 如果呼叫遠端遠端url介面為https,且存在客戶端證書驗證,如何在客戶端處理HTTP客戶端
- 如何理解區別伺服器端的Javabean與EJB伺服器JavaBean
- 《java實用系統開發指南》 關於胖客戶端呼叫EJB一章Java客戶端
- 解析RocketMQ的client客戶端MQclient客戶端
- 使用EJB遠端介面帶來的效能問題
- 訪問jboss上EJB遠端介面問題
- ejb client 請教client
- Web端與Client客戶端資料互動方案選擇Webclient客戶端
- Cisco Secure Client 5.1.6.103 (macOS, Linux, Windows & iOS, Andrord) - 遠端訪問客戶端clientMacLinuxWindowsiOS客戶端
- 不用安裝oracle客戶端,PL/SQL也能遠端訪問資料庫Oracle客戶端SQL資料庫
- CXF 呼叫方式——動態建立客戶端(呼叫穩定版本號為2.7.18)客戶端
- 【知識積累】伺服器端獲取客戶端的IP地址(當客戶端呼叫由Axis開發的WebService)伺服器客戶端Web
- 在得到ejb遠端物件時,能否傳引數給無狀態session bean?物件SessionBean
- 客戶端動態化系列之——URLRoute客戶端
- Java EE 7: EJB 釋出 CDI事件透過WebSocket到瀏覽器客戶端Java事件Web瀏覽器客戶端
- Oracle client 客戶端與sqlplusOracleclient客戶端SQL
- 遠端客戶端 訪問 ASM 例項客戶端ASM
- 以 Laravel 的方式呼叫 ai 客戶端LaravelAI客戶端
- xfire 客戶端呼叫webservice的問題客戶端Web
- Help:swing thin client呼叫EJB,怎麼過防火牆?client防火牆
- MySQL client客戶端的四種連線方式MySqlclient客戶端
- webService 客戶端呼叫 axis2Web客戶端
- .net客戶端呼叫activeMQ程式碼客戶端MQ
- rdp遠端桌面介紹,如何利用rdp遠端桌面去連線伺服器?伺服器
- Windows客戶端的JProfiler遠端監控Linux上的Tomcat伺服器Windows客戶端LinuxTomcat伺服器
- 遠端呼叫EJB。報錯如下。請問是什麼原因?請教banq等dx。謝謝!
- oracle 客戶端與伺服器端的關係Oracle客戶端伺服器
- js 客戶端與伺服器端的通訊JS客戶端伺服器
- .Net Remoting服務端與客戶端呼叫示例REM服務端客戶端
- 如何配置WSUS客戶端客戶端