[J2EE] JBoss JNDI設定與遠端呼叫EJB
新年囉!! 寫各EJB來玩玩 發現撰寫EJB其實是需要對伺服器很熟悉的
因為EJB很多程式碼是由伺服器來實作的...
這篇從Client端的觀點 說明JBoss環境下EJB遠端呼叫
1. 撰寫jndi.properties文件 內容如下
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=jnp://localhost:1099
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
2. 不同於其他伺服器會產生stub
JBoss呼叫遠端EJB的方式 是產生client端的proxy
你需要將JBoss安裝目錄底下的client裡的jar檔設定成classpath
3. 包裝應用程式並複製到複製到 \server\default\deploy 進行 hot-deploy
4. 進入JBoss Console查詢JNDI
5. 撰寫Clinet端程式 在此提供一各小例子
package examples;
import java.rmi.*;
import java.util.logging.*;
import javax.ejb.CreateException;
import javax.naming.*;
import java.util.*;
import javax.rmi.PortableRemoteObject;
/**
*
* @author Ripley
*/
public class HelloClient {
/** Creates a new instance of HelloClient */
public HelloClient() {
}
public static void main(String[] args){
HelloClient hc = new HelloClient();
//HelloLocal hl = hc.lookupHelloBean();
HelloRemote hl = hc.lookupHelloBeanRemote();
//hl.hello();
try {
hl.hello(); // My EJB method
} catch (RemoteException ex) {
ex.printStackTrace();
}
}
private HelloRemote lookupHelloBeanRemote() {
try {
Context c = new InitialContext();
Object remote = c.lookup("java:comp/env/ejb/HelloBean"); //JNDI Namespace
HelloRemoteHome rv = (HelloRemoteHome) PortableRemoteObject.narrow(remote, HelloRemoteHome.class);
return rv.create();
}
catch(NamingException ne) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught" ,ne);
throw new RuntimeException(ne);
}
catch(CreateException ce) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught" ,ce);
throw new RuntimeException(ce);
}
catch(RemoteException re) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught" ,re);
throw new RuntimeException(re);
}
}
}
--
dd
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.154.192.30