Tomcat JSP调用JBoss布署的EJB远程方法

Tomcat JSP调用JBoss布署的EJB远程方法
 
王伟东
 
   EJB技术的基础是另外两种技术:RMI-IIOP和JNDI。要想了解EJB,一定要先了解RMI-IIOP和JNDI。

Java RMI-IIOP

    Java RMI-IIOP(Java Remote Method Invocation over the Internet Inter-ORB Protocol)是J2EE的网络机制。Java RMI-IIOP允许你编写分布式对象,使得对象的通信范围能够在内存中,跨Java虚拟机,跨物理设备。
Java命名和目录接口(Java Naming and Directory Interface,JNDI)

    JNDI是Java Naming and Directory Interface 的简写,中意为:Java命名及目录接口,它是为了对高级网络应用开发中的使用的目录基础结构的访问。实际上这个目录是一个特殊的数据库,提供了对存储数据的快速访问,不象传统的目录服务访问方式-你必须提供不同的API接口去访问不同的目录服务(如:LDAP,NIS,ADS等),而它提供了一种标准的API来访问类型不同的目录。据说,使用完整的SDK可以开发那些JNDI还不支持的目录服务提供者。

    JNDI是J2EE的一个API,提供了一套标准的接口,以定位用户、机器、网络、对象、以及服务。例如,你可以使用JNDI来定位内部网中的一台打印机,你也可以使用它来定位Java对象或连接到一个数据库。JNDI可以用于EJB、RMI-IIOP、JDBC中。它是网络查找定位的标准方法。    JNDI API被用来访问命名和目录服务。它提供一个相容的模式来访问和操作企业范围大的资源,例如一个应用服务器中的DNS、LDAP、本地文件系统或者对象。
 
有了上述两种技术的支持就可以实施分布式布署了。
 
比如你有两个服务器:
A服务器192.168.0.1:JBOSS 4.0其上布署了EJB的业务实现模块
B服务器192.168.0.2:Tomcat 5.0 运行Jsp/JavaBean或Struts等Web页面程序
实验目的:分布式不同应用服务器访问EJB组件
 
 
A服务器上对EJB的开发及布署,请参见其它相关文档:
 
a. HelloWorldBean.java //业务实现了getHelloWorld提供remote的方法
 
package donne.study;
public abstract class HelloWorldBean implements javax.ejb.SessionBean {
    /**
     * @ejb.interface-method view-type="remote"
     */
    public String getHelloWorld(String sMessage) {
        return "Hello World! "+sMessage;
    }
}
 
EJB Classes 由lomboz自动生成的EJB接口文件
b. HelloWorld.java
package donne.study;
/**
 * Remote interface for HelloWorld.
 * @generated
 * @lomboz generated
 */
public interface HelloWorld
   extends javax.ejb.EJBObject
{
   public java.lang.String getHelloWorld( java.lang.String sMessage )
      throws java.rmi.RemoteException;
}
 
c. HelloWorldHome.java
 
package donne.study;
/**
 * Home interface for HelloWorld.
 * @generated
 * @lomboz generated
 */
public interface HelloWorldHome
   extends javax.ejb.EJBHome
{
   public static final String COMP_NAME="java:comp/env/ejb/HelloWorld";
   public static final String JNDI_NAME="HelloWorld";
   public donne.study.HelloWorld create()
      throws javax.ejb.CreateException,java.rmi.RemoteException;
}
其它文件略
 
B服务器上Tocamt上调用JBoss下EJB的remote接口
1. Copy Jboss下的client目录下的jar文件到你的测试工程的lib目录,有些jar是不需要的根据实际情况
 
2. 将上述两个接口b、c文件生成的class文件打包成jar文件,也copy到lib下,可以看到到不管你的EJB里业务内容如何变化这个接口的定义都不会变
 
3. HelloWorldClient.java
 
package donne.study;
import java.util.Hashtable;
import javax.naming.InitialContext;
import javax.naming.NamingException;
 
public class HelloWorldClient {
    private donne.study.HelloWorldHome getHome() throws NamingException {
        return (donne.study.HelloWorldHome) getContext().lookup(
                donne.study.HelloWorldHome.JNDI_NAME);
    }
    private InitialContext getContext() throws NamingException {
        Hashtable props = new Hashtable();
        props.put(InitialContext.INITIAL_CONTEXT_FACTORY,
                "org.jnp.interfaces.NamingContextFactory");
        props.put(InitialContext.PROVIDER_URL, "jnp://192.168.0.1:1099");
        InitialContext initialContext = new InitialContext(props);
        return initialContext;
    }
 
    public String getEJBString() {
        try {
            donne.study.HelloWorld myBean = getHome().create();
            return myBean.getHelloWorld("From Tomcat Jsp");
        } catch (Exception e) {
            return e.getMessage();
           
        }
    }
}
 
4. hello.jsp
 
<%@ page contentType="text/html; charset=GBK"%>
<%@ page import = "donne.study.HelloWorldClient" %>
<HTML>
<BODY>
<%
 HelloWorldClient helloID=new HelloWorldClient();
 out.print(helloID.getEJBString());
%>
</BODY>
</HTML>
 
运行一下hello.jsp将出现Hello World! From Tomcat Jsp就对了

posted on 2007-02-09 16:48 Tom 阅读(2304) 评论(0)  编辑  收藏 所属分类: EJB


只有注册用户登录后才能发表评论。


网站导航:
 
<2007年2月>
28293031123
45678910
11121314151617
18192021222324
25262728123
45678910

导航

统计

常用链接

留言簿(1)

随笔分类(42)

随笔档案(43)

文章分类

相册

搜索

最新评论

阅读排行榜

评论排行榜