作者Oreilly (Vendetta 我心无所惧)
看板java
标题[J2EE] JBoss JNDI设定与远端呼叫EJB
时间Tue Jan 2 11:50:04 2007
新年罗!! 写各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