`

详解EJB技术及实现原理

阅读更多
  EJB是什么呢?
EJB是一个J2EE体系中的组件.再简单的说它是一个能够远程调用的javaBean.它同普通的javaBean有两点不同.
第一点,就是远程调用.
第二点,就是事务的功能,我们在EJB中声明的事务会通过容器帮助我们来处理.支持EJB的SERVER有以下几个:
Weblogic
Webspere
Appserver
Jboss

我选用的是weblogic+JBuilder9开发.回过来我们继续说这个EJB的原理.它是分布式的.这个的意思其实很简单不需要想太复杂.就是我们把事情不是交给一个人去处理.而是把事情划分一下交给多个人处理,而多个人处理之后我们让这个分配的人来把最后得到的结合处理.

EJB我们首先要明确它是放在服务器端的组件.
一共有三种EJB
1,SessionBean 复杂处理业务逻辑的.
2,EntityBean  处理数据
3,MessageBean 消息Bean异步,耦合的处理.

那么谁能调用EJB呢?也或者说EJB被谁调用呢?我们说它就是放在server的一个能够远程调用的javaBean.所以它可以被Java的语言调用servlet,jsp等都ok的说.而且它还可以被C++语言调用.很强大吧.EJB的最基本的出发点就是推动Java在服务器端的编程能力.所以呢它的功能就我个人来看太强悍了..= =

这个远程调用是通过什么呢.Java是通过RMI-JRMP(java远程方法调用)协议来调用.EJB就是通过这个来实现的.C++是通过Corba-iiop协议来调用的.这个协议支持两端不同语言的调用.Corba是公共对象请求代理服务iiop是网络内部对象协议.

下面我们来简单说一下这个分布式的调用。客户端发送一个请求给服务器首先是传给stub代理类它发送参数给skeleton委托类然后这个类调用我们的实现类取得结果再远路返回。这样一个分布处理就结束了。后面会具体的结合代码分析。先记住这个大致的结构就好。

我们写一个EJB需要做那些工作呢?
1,写一个接口继承EJBObject        这个类作为远程接口
2,写一个接口继承EJBHome          这个类里有一个方法是create()它返回接口类型。
3,写一个Bean继承SessionBean,    这个类里包含一个create()方法和一个业务方法。
4,写一个ejb-jar.xml              这个xml是把上面的三个文件组合起来
5,写一个weblogic-ejb-jar.xml     这个xml是连接查找source的作用

上面的两个xml文件需要放在META-INF目录下。而以上这些类都需要打包在一个jar文件中然后在server部署。这样就完成了EJB的部署。例如:

import javax.ejb.*; 
import java.rmi.*; 

public interface AddCount extends EJBObject 

        public int addCount(int a,int b) throws RemoteException; 
}

AddCountHome.java这个是继承EJBHome的类.它里面包含的这个create()返回的是AddCount类型对象.

import javax.ejb.*; 
import java.rmi.*; 

public interface AddCountHome extends EJBHome 

        public AddCount create() throws RemoteException,CreateException; 
}



下面这个是我们的Bean.这个类继承了SessionBean

import javax.ejb.*; 

public class AddCountBean implements SessionBean 

        public void ejbCreate() 
        { 
        } 
        public void setSessionContext(SessionContext ctx) 
                       throws EJBException, 
                              java.rmi.RemoteException 
        { 
        } 
        public void ejbRemove() 
               throws EJBException, 
                      java.rmi.RemoteException 
        { 
        } 

        public void ejbActivate() 
                 throws EJBException, 
                        java.rmi.RemoteException 
        { 
        } 
        public void ejbPassivate() 
                  throws EJBException, 
                         java.rmi.RemoteException 
        { 
        } 
        public int addCount(double a,double b) 
        { 
                return a+b; 
        } 
}

这个里面我们实现了业务的方法addCount(){a+b;}。同时需要指出一下它的其他方法(这些仅仅简单指出后面的教程有详细说明)。首先是ejbCreate()这个方法实际上是对我们的远程接口的实现类的初始化.setSessionContext(SessionContext ctx)设置context.容器是在这个方法之后产生的实例.

ejbRemove()毫无疑问是一个实例结束移除.ejbActivate()激活方法.它的作用是激活钝化.ejbPassivate()钝化方法.当实例的内容长时间不进行处理的时候就会钝化.也就是闲置的意思.以上这几个是SessionBean的基本方法.希望大家可以自己慢慢理解.之后也会反复说到这些的.

下面我们写xml文件
首先是ejb-jar.xml




xml version="1.0" encoding="UTF-8"?>
Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar>
    <enterprise-beans>
        <session>
            <display-name>firstdisplay-name>
            <ejb-name>addejb-name>
            <home>AddCountHomehome>
            <remote>AddCountremote>
            <ejb-class>AddCountBeanejb-class>
            <session-type>Statelesssession-type>
            <transaction-type>Containertransaction-type>      
        session>
    enterprise-beans>
    <assembly-descriptor>
        <container-transaction>
            <method>
                <ejb-name>addejb-name>
                <method-name>*method-name>
            method>
            <trans-attribute>Requiredtrans-attribute>
        container-transaction>
         
    assembly-descriptor>
ejb-jar>
下面这个是weblogic-ejb-jar.xml

xml version="1.0" encoding="UTF-8"?>
<weblogic-ejb-jar>
    <weblogic-enterprise-bean>
        <ejb-name>
                add   
                ejb-name>
         
        <jndi-name>rainnightjndi-name>
    weblogic-enterprise-bean>
weblogic-ejb-jar>


我们接下来写测试类


import java.util.*; 
import java.naming.*; 
import java.rim.*; 
public class AddTest{ 
        public static void main(String bb[])throws Exception{ 
                Hashtable hash = new Hashtable(); 
                hash.put(Context.INITIAL_COUNTEXT_FACTORY, 
                                "weblogic.jndi.WLInitialContextFactory"); 
                hash.put(Context.PROVIDER_URL, 
                                "t3://localhost:7001"); 
                Object obj = context.lookup("rainnight"); 
                AddCountHome home = (AddCountHome)PortableRemoteObject(obj,AddCountHome.class); 
                AddCount local = home.create(); 
                System.out.println(local.add(1,1)); 
        } 
}


测试类的hash是初始化我们的weblogic的xml信息.这里的t3://localhost:7001是weblogic的特殊协议指向的是ip位置.然后lookup("rainnight")查找jndi,而实际上也就是通过这个jndi找到我们的ejb组件.通过得到的对象我们对比一下是不是Home类型.然后我们执行home.create()产生AddCount的实例.最后调用方法就ok了.


下面是如何执行这个的方法.
第一步,jdk,weblogic.需要快些下载安装啦..
第二步,配置环境变量.基本的java的环境变量如何配置我就不说了.
这里需要特别指出要把java目录下的lib中的tools.jar加载到我们的class_path中.
然后我们再把weblogic的目录下的server目录下的lib中的weblogic.jar找到也加载进来.
这样我们编译需要的东西就ok了.
第三步,编译java类.
第四步,打包.jar cvf AddCount.jar *.class META-INF/*.xml
第五步,java weblogic.appc AddCount.jar
第六步,部署到weblogic中.
第七步,运行Test类.
分享到:
评论

相关推荐

    J2EE应用开发详解

    124 8.5.2 拦截器的实现原理 124 8.5.3 Struts2的内置拦截器 124 8.5.4 拦截器的配置和使用 125 8.5.5 自定义拦截器 126 8.6 一个简单的Struts2应用 130 8.7 小结 140 第9章 JSF 141 9.1 JSF技术简介 141 9.1.1 JSF...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

    第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式...

    网络工程师考试考点分析与真题详解.网络设计与管理篇

    5 1.3 需求分析 8 1.3.1 需求分析的基本任务和基本原则 8 1.3.2 初步需求获取技术 9 1.3.3 收集需求的方法及产生需求歧义性的主要原因 9 1.3.4 需求分析的主要技术指标 10 1.3.5 需求规格说明与...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

    第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

    第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

    第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式...

    网络工程师考试考点分析与真题详解.网络设计与管理篇.part4

    5 1.3 需求分析 8 1.3.1 需求分析的基本任务和基本原则 8 1.3.2 初步需求获取技术 9 1.3.3 收集需求的方法及产生需求歧义性的主要原因 9 1.3.4 需求分析的主要技术指标 10 1.3.5 需求规格说明与...

    网络工程师考试考点分析与真题详解.网络设计与管理篇.part5

    5 1.3 需求分析 8 1.3.1 需求分析的基本任务和基本原则 8 1.3.2 初步需求获取技术 9 1.3.3 收集需求的方法及产生需求歧义性的主要原因 9 1.3.4 需求分析的主要技术指标 10 1.3.5 需求规格说明与...

    网络工程师考试考点分析与真题详解.网络设计与管理篇.part2

    5 1.3 需求分析 8 1.3.1 需求分析的基本任务和基本原则 8 1.3.2 初步需求获取技术 9 1.3.3 收集需求的方法及产生需求歧义性的主要原因 9 1.3.4 需求分析的主要技术指标 10 1.3.5 需求规格说明与...

    网络工程师考试考点分析与真题详解.网络设计与管理篇.part6

    5 1.3 需求分析 8 1.3.1 需求分析的基本任务和基本原则 8 1.3.2 初步需求获取技术 9 1.3.3 收集需求的方法及产生需求歧义性的主要原因 9 1.3.4 需求分析的主要技术指标 10 1.3.5 需求规格说明与...

    网络工程师考试考点分析与真题详解.网络设计与管理篇.part7

    5 1.3 需求分析 8 1.3.1 需求分析的基本任务和基本原则 8 1.3.2 初步需求获取技术 9 1.3.3 收集需求的方法及产生需求歧义性的主要原因 9 1.3.4 需求分析的主要技术指标 10 1.3.5 需求规格说明与...

    网络工程师考试考点分析与真题详解.网络设计与管理篇.part3

    5 1.3 需求分析 8 1.3.1 需求分析的基本任务和基本原则 8 1.3.2 初步需求获取技术 9 1.3.3 收集需求的方法及产生需求歧义性的主要原因 9 1.3.4 需求分析的主要技术指标 10 1.3.5 需求规格说明与...

    深入Java Servlet网络编程

    15. 1 搜索引擎的原理 15. 2 搜索引擎的实现 15. 2. 1 数据库部分的实现 15. 2. 2 解析网页 15. 2. 3 在Internet上爬行 第16章 在Servlet中利用EJB 16. 1 EJB概述 16. 1. 1 EJB的开发过程 16. 1. 2 会话...

    JBPM4工作流应用开始指南.rar

    241 11.2 流程定义转换工具 242 11.2.1 命令行执行 242 11.2.2 Java编码执行 243 11.3 jBPM3到jBPM4的语义变更及翻译 244 11.4 小结 246 第12章 流程虚拟机原理 247 12.1 PVM的架构 247 12.2 PVM的实现 250 12.3 小...

    Spring中文帮助文档

    3.2. 基本原理 - 容器和bean 3.2.1. 容器 3.2.2. 实例化容器 3.2.3. 多种bean 3.2.4. 使用容器 3.3. 依赖 3.3.1. 注入依赖 3.3.2. 依赖配置详解 3.3.3. 使用depends-on 3.3.4. 延迟初始化bean 3.3.5. 自动...

    Spring API

    3.2. 基本原理 - 容器和bean 3.2.1. 容器 3.2.2. 实例化容器 3.2.3. 多种bean 3.2.4. 使用容器 3.3. 依赖 3.3.1. 注入依赖 3.3.2. 依赖配置详解 3.3.3. 使用depends-on 3.3.4. 延迟初始化bean 3.3.5. 自动...

    Spring 2.0 开发参考手册

    3.3.3. bean属性及构造器参数详解 3.3.4. 使用depends-on 3.3.5. 延迟初始化bean 3.3.6. 自动装配(autowire)协作者 3.3.7. 依赖检查 3.3.8. 方法注入 3.4. bean的作用域 3.4.1. Singleton作用域 3.4.2. ...

    spring chm文档

    3.3.3. bean属性及构造器参数详解 3.3.4. 使用depends-on 3.3.5. 延迟初始化bean 3.3.6. 自动装配(autowire)协作者 3.3.7. 依赖检查 3.3.8. 方法注入 3.4. bean的作用域 3.4.1. Singleton作用域 3.4.2. ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    3.3.3. bean属性及构造器参数详解 3.3.3.1. 直接量(基本类型、Strings类型等。) 3.3.3.2. 引用其它的bean(协作者) 3.3.3.3. 内部bean 3.3.3.4. 集合 3.3.3.5. Nulls 3.3.3.6. XML-based configuration metadata ...

Global site tag (gtag.js) - Google Analytics