`
maincoolbo
  • 浏览: 527603 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

什么是EJB?

    博客分类:
  • java
阅读更多
                                 Ejb3.0学习笔记(在Jobss下运行Ejb)
什么是EJB?
  全称是Enterprice JavaBeans是一个用于分布式业务应用的标准服务端组件模型。采用Enterprice JavaBeans架构编写的应用是可伸的,事务性的,多用户安全的。采用Ejb编写的这些应用,可以部署在任何支持Enterprice  JavaBeans 规范的服务器平台,如Jboss,WebLojic等。

Ejb是用来干什么的?
  EJB 实际上是用来编写业务层的代码。

EJB的好处
EBJ为我们提供了很多在企业开发中需要使用到的服务,如事务管理/安全/持久化/分布式,它大大减少了我门的开发工作量。

有关EJB的书籍:1.EJB3.0入门经典 2.EJB3.0实例教程 电子版 :http://www.foshanshop.net

5.JavaEE 中的主流服务器
      1.Jboss:是一个成熟的开源的准JavaEE应用服务器,在开源JavaEE应用服务器中所占的市场份额第一。如果你打算选用开源的JavaEE应用服务器,那么JBoss是最值得选择的。(4.2以上的版本)
        2.Glassfish:是一个开源的JavaEE应用服务器,对JavaEE规范支持非常好,其运行性能比较高。因为发展时间相对较短,和JBoss有的一拼。
       3.Weblogic:是市场占有率第一的商业JavaEE应用服务器,他具有出色的稳定性,并提供人性化的管理界面。但在EJB3.0的领域里,它比JBOSS差些,bug比较多。(10以上的版本)
      4.Sun Application Server:商业JavaEE应用服务器,如果打算用商业应用服务器运行EJB3.0的话,这个很好的。
      5.Oracle Application Server:商业JavaEE应用服务器,如果你的数据库是Oracle,要想兼容性更好,这个是不错的选择。
      6.apusic应用服务器:这是国内的商业JavaEE应用服务器,主要在政府中占有份额。但开发文档太少。
     注意:Tomcat目前只是Web容器,它不能运行EJB应用。

6.sping+hibernate同样提供了事务管理/持久化服务,好像没有必要使用EJB,这中说法对吗?
不对的。因为Ejb 设计的初衷是用于分布式场合,而Sping—开始就没有打算提供分布式功能。所以两者看似有竞争的关系,
但两者的实际上偏重点布同,像EJB比较适合用于大型的企业。为了避免业务功能的重复开发,有必要把业务独立处来,让多个信息系统共享一个业务中心,这样应用就需要具备分布式能力。

7.EJB3.0的运行环境(1.EJB3.应用需要运行在JDK1.5以上的版本)
   1.安装JBoss之前要安装JAVA_HOME.
        步骤:1.我的电脑》》属性》》高级》》环境变量,在‘在系统变量’里添加JAVA_HOME变量,值为JDK的安装路径,如   C:\java\jdk1.5.0_16
             2.在“在系统变量”在添加CLASSPATH变量,值为:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
             3.在系统变量栏里找到变量名为Path的选项,点’编辑’在变量值的末尾加:;%JAVA_HOME%\bin;

8.如何下载并安装Jobss
步骤:1.在Http://www.jboss.org/jbossas/downloads/ 官方网站下载最新版本的jboss.
               2. 下载4.2.3最新版的Jobss,5.0还是适用版,打开连
               3.Jdk1.6下载这个版本。Jdk1.5下载这个版   本的
               4.解压后就将Jobss安装好了。 然后启动run.bat 就可以启动Jobss (如果没有错误信息表示启动成功)
               5.在浏览器中敲Http://localhost:8080就可以进入管理后台了
               6.给Jobss添加系统变量  在我的电脑---》属性—》高级—》》设置》》》变量名写:JBOSS_HOME >>>路径写JBOSSde
                 安装路径,
               7.添加Bin  在变量值的末尾中写

9.Ejb3.0中的Bean
会话Bean(Session Bean)
分为:有状态的会话Bean;一个用户只能对一个实例
无状态会话Bean;性能好,bean的实例可以共多个用户使用
    负责与客户端交互,是编写业务逻辑的地方,在会话Bean中可以通过JDBC直接操作数据库,大多数情况下都是通过实体bean来完成对数据库的操作。
实体bean(entity bean)
它实际属于Java持久回规范(简称JPA)里的技术,JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在的Hibernate,TopLink等ORM框架各自为营的局面。
消息驱动Bean(Message-driven bean)
         它是专门用于异处理Java消息的组件,具有处理大量并法消息的能力。

10.如何开发一个无状态的会话Bean
开发工具:Eclipse IDE for Java EE
下载地址:Http://www.eclipse.org/downloads
开发EJB依赖的jar文件
可以在Jboss安装路径的client目录下找到通常会把client目录下所有的jar文件添加到项目的类路径下。
创建一个EJB项目
给项目导入Jar包 
点击在Libraires中 Add External JARS添加Client的所有jar文件
开始开发一个无状态的的会话Bean

    10.1.开始开发无状态的会话Bean
            1.首先New一个接口
                           Public  interface HelloWord{
                                  Public String SayHello(String  name);
                           }
                     import javax.ejb.Stateless;
                     import javax.ejb.Remote;
                 2.再创建一个实现类
                          @Stateless(实现EJB)
                          @Remote(HelloWorld.CLass)代表远程接口
                          Public class HelloWordBean  implements HelloWord{
                                 Public String SayHello(String name){
                                  Return name+”你好,世界!”;
                               }}
                               在实现类中加入以上两句话就可以实现一个无状态的会话Bean
开发完成后对EJB进行打包,
通过集成工具进行打包
导出----》》选择Jar文件----》》下一步-选择文件—》》完成
生成一个jar文件

发布EJB
启动JBoss
在EJB的Default/Depoly目录下发布,将EJB的jar文件拷贝到Jboss的Depoly目录下完成EJB的部署,发布成功

11.开发EJB的客户端
        public class EjbClient {
        public static void main(String[] args) {
   Properties props=new Properties();
   props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
   props.setProperty("java.naming,provider,url", "localhost:1099");
   try{
   InitialContext ctx=new InitialContext(props);
   HelloWorld helloworld=(HelloWorld)ctx.lookup("HelloWorldBean/remote");
   System.out.println(helloworld.SayHello("老头?"));
   }catch(NamingException e){
   System.out.println(e.getMessage());
   }
     }
}
Jboss 默认生成的JNDI名称
当EJB 发布到Jboss上时,如果我们没有为它指定全局JNDI名称或修改过其默认EJB名称,Jboss就会按照规则默认的命名规侧为EJB生成全局的JNDI名称,默认为
本地接口:EAR-File-BASE—NAME/EJB-CLASS-NAME/LOCAL
远程接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote
EAR-FILE-BASE为ear文件名,EJB—CLASS-NAME为EJB的非限定类名。
把HelloWorld 应用作为EJB模块打包进名为HelloWorld.ear的企业应用文件,它的远程接口的JNDI名称是:HelloWorldBean/remote

如果把EJB应用打包成后缀为.jar的模块文件,默认的全局JNDI名称是
 本地接口:EJB-CLASS-NAME/local
  远程接口:EJB-CLASS-NAME/remote
例:把HelloWorld  应用打包成HelloWrld.jar 文件,它的远程接口的JDNI名称是:
HelloWorldBean/remote
12.把Jboss集成进Eclipse
  1.操作步骤:
    在控制台中:1.右键 New->Server
                2.选中你说需要的服务器版本
                    3.在JRE 中选中JDK的版本,Application ServerDirectory  中选中你jboss 的安装路径 
                    4.下一步,然后完成。(Ctrl+C)可以关闭Jboss。
13.通过ANT提高EJB应用的开发效率
        源码:<project name="HelloWorld" basedir=".">
          <property  name="src.dir" value="${basedir}\src" />
          <property environment="env"/>
         <property name="jboss.home" value="${env.JBOSS_HOME}"></property>
        <property name="jboss.server.config" value="default"></property>
       <property name="build.dir" value="{basedir}\build"/>
    
       <path id="build.classpath">
              <fileset dir="${jboss.home}\client">
                   <include name="*.jar"/>
              </fileset>
     </path>
   
    <target name="prepare">
              <delete dir="${build.dir}"/>
              <mkdir dir="${build.dir}"/>
    </target>
    
     <target name="compile" depends="prepare" description="编译">
            <javac srcdir="${src.dir}" destdir="${build.dir}">
                    <classpath refid="build.classpath"/>
            </javac>  
     </target>
    
    <target name="ejbjar" depends="compile" description="创建EJB发布包">
           <jar jarfile="${basedir}\{ant.project.name}.jar">
                  <fileset dir="${build.dir}">
                       <include name="**/*.class"/>
                  </fileset>
           </jar>
    </target>
    
     <target name="deploy" depends="ejbjar" description="发布EJB包">
           <copy file="${basedir}\${ant.project.name}.jar"     todir="${jboss.home}\server\${jboss.server.config}\deploy"/>
     </target>
    
     <target name="undeploy" description="卸载ejb">
           <delete file="${jboss.home}\server\${jboss.server.config}\deploy\${ant.project.name}.jar"/>
     </target>
</project>
14.开发具有本地接口的无状态BEAN
      1.开发具有Local接口的 Session Bean 
通过远程接口调用EJB的过程,首先客户端需要与EJB建立起Socket通讯,在通信管道上他们之间需要来回发送IIOP协议消息,因为数据要在网络进行传输,存数据的Java对象必须要进行序列化。
Socket通讯
IIOP消息
              在这个过程中,有网络通信的开销,协议解析的开销,对象序列化的开销。因为EJB是分布式技术,它允许客户端与ejb应用在
不同的机器上,所以这些性能开销也是必然的。但是在实际生产中,我门不可能避免这种情况:客户端与EJB应用运行在同一台机器上的同一个JBoss中。那么,这个时候客户端和EJB是否还进行网络通讯呢?不需要。这个时候客户端和EJB在同一个Jvm中,他们完全可以通过内存进行交互,可以避免上面的性能开销。于是,可以通过引入本地接口。通过本地接口调用EJB 直接在内存中交互。这样就可以避免因网络通信所造成的各种性能的开销。但是,只有客户端和EJB应用都在同一个Jvm内运行的时候,我们才能调用本地的接口,否则只能调用远程接口。只要客户端与ejb发布在同一个jboss中,我们就认为他们在同一个Jvm中。
2开发一个Local接口
   步骤:1.建立一个动态的Java Web 项目,并创建一个Jsp也页面.
         2.在页面中调用EJB应用
         3.再在Web项目中右键 属性》》Java Build Path>>Project >>添加包含EJB接口的项目》》然后在再页面中导入包即可
                   4.再在Web项目中右键 Export>>War file>>保存在一个盘中
                   5.然后将刚才的war包粘贴到Jboss的发布目录下
            6.然后启动Jboss,就可以运行了
15.开发有状态BEAN
     1.在类的前面用 @Stateful (内--->磁盘较钝化,磁盘---->内存叫激活)
        2.无状态Bean使用实例池技术管理Bean。
        3.有状态Bean使用激活(activation)管理bean。(是要为每个用户创建一个BEAN实例,这个实例只能为这个用户服务,他是不能被其他的用户访问的)
        开发完后部署到EJB容器中
16.通过注解方式并使用其他EJB或者服务
   1在一个EJB中调用另外一个EJB
     方法1;通过JNDI查找的方法
         Eg:  InitialContext ctx=new InitialContext();
              Other other=(Other)ctx.lookup(“OtherBean/local”);
               Other.XXX();
               Other 是被调的EJB接口,OtherBean是被调EJB的实现类,
     方法2:通过注解的方法调用另外一个EJB
         在要调另外一个EJB的EJB中写上
           @EJB  Other other;
               Other.XXXX();
注意:注解的工作原理:EJB容器解析到类的字段发现@后就去找是否有实现这个接口的EJB,然后将其注入进来。如果被两个EJB实现,将会抱个错,但是我们注入时可以这样注入
  Eg; @EJB(beanName=”OtherBean”)  Other   other;   Statefull(name=””)可以修改EJB名称
                          EJB的名称,即类名
2.如何注入定时服务
     1>>.注入数据源:@Resource  TImerService  timerervice;
     2>>.@Resource(mappedName=”java:XXX”) DataSource  dataSource;
                  “ ”中用于指定数据源的JDNI名称;
17.配置JBOSS数据源
       1.首先找到JBOSS的数据源配置模板,在JBOSS的安装目录下的Docs/examples/jca
        2.修改JNDI名称 <jndi-name>itcastDS</jndi-name>          写自己创建的数据源的名称
                      <connection-url>jdbc:mysql://localhost:3306/数据库名称 </connection-url>
                      <driver-class>com.mysql.jdbc.Driver</driver-class>
                     <user-name>x</user-name>   数据库的用户名和密码
                     <password>y</password>    
2数据源的文件必须为XXX—ds.xml为结尾
3.将MySql的驱动文件拷贝到JBOSS目录下的Server/Default/lib目录下 
4.重启JBoss,然后发布配置文件,将数据文件拷贝到JBOSS安装目录的Server/default/deploy下就可以了。
注意: 在Java:XXX后面的JDNI所绑定的资源,只能被JBoss的内部服务访问,不能被外部访问。
http://localhost:8080/jmx-console可以进行访问,然后找到Jboss.Jca 就可以找到我们刚才发布的数据源信息然后点击ManagedConnectionPool就可以进入数据源的连接属性  
<min-pool-size>3</min-pool-size>
   <max-pool-size>100</max-pool-size> 
设置最大的连接数和最小的连接数,InUse ConnectionCount 正在使用的连接数量,如过和Max相等代表不够用要设大一些。
17.实体Bean 的开发
     它属于Java持久化规范(简称JPA)里的技术,实体bean 通过元数据在javaBean和数据库表之间建立起映射关系,然后Java程序员就可以随心所欲的使用面向对象的编程来操纵数据库。JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术,目前实现的JPA规范的主流产品有Hibernate,TopLink和OpenJPA,在jboss中采用了Hibernate作为其持久化实现产品。
根据JPA规范的要求,在实体bean应用中,我们需要在应用的类路径下的META-INF目录加入持久化配置文件persistence.xml.
  
分享到:
评论

相关推荐

    EJB-PPT MIE456 Tutorial

    **知识点1:什么是EJB?** - **定义**:EJB是一种组件架构和模型,用于开发面向对象的分布式企业级应用程序。 - **特点**: - 面向服务的架构; - 支持多种中间件服务,如事务管理、持久化、并发控制等; - 使得...

    EJB教程.pdf

    #### 什么是EJB? EJB(Enterprise JavaBeans)并非一款具体的产品,而是Java平台在企业级应用开发领域的一套规范。这套规范为开发者提供了构建可扩展、健壮的企业级应用的指导原则。EJB定义了一个服务框架,允许...

    EJB笔记

    #### 什么是EJB? EJB(Enterprise Java Beans)是一种标准规范,由Sun Microsystems制定,用于构建和部署企业级、分布式应用程序的组件模型。EJB框架为企业应用程序提供了一种模块化的组件结构,允许开发者专注于...

    为什么要使用EJB?

    因为EJB是J2EE重要的组成部分,可以说没有EJB的J2EE只是一种Web系统,这样的系统非常容易丧失了多层结构的大部分优点(仔细想想那些混合多种层次功能JavaBeans和传统两层结构有什么区别?)。当然,可以人为地在...

    实战EJB 实战EJB 实战EJB

    **什么是企业JavaBeans技术?** 企业JavaBeans (EJB) 是Java平台上的服务器端组件模型,专为构建可扩展、可靠且跨平台的企业级应用程序而设计。通过将业务逻辑与基础架构关注点(如事务管理、安全性、持久性和并发...

    Java面试题及答案

    3. 什么是 EJB?EJB(Enterprise JavaBean)是 Java 企业版中的一个组件,用于实现业务逻辑。 四、Java EE 1. 什么是 EJB 和 JAVA BEAN 的区别? EJB 和 JAVA BEAN 都是 SUN 的不同组件规范,EJB是在容器中运行的...

    EJB方面 ejb pdf

    ### EJB技术详解 #### EJB 2.0与EJB 1.1的主要区别及其应用场景 EJB(Enterprise JavaBeans)技术自1998年首次推出以来,经历了多个版本的演进,其中EJB 2.0是EJB 1.1的重要升级版,带来了诸多改进和新特性,旨在...

    java的ejb.jar包

    javax.ejb.AccessLocalException.class javax.ejb.CreateException.class javax.ejb.DuplicateKeyException.class javax.ejb.EJBContext.class javax.ejb.EJBException.class javax.ejb.EJBHome.class javax.ejb....

    实战角度比较EJB2和EJB3的架构异同

    【实战角度比较EJB2和EJB3的架构异同】 EJB,即Enterprise JavaBeans,是Java EE(企业版Java)平台的核心组件之一,用于构建可复用、分布式的服务器端应用程序。EJB2和EJB3是EJB技术的两个主要版本,它们在架构上...

    javax.ejb.jar下载

    Files contained in javax.ejb.jar: META-INF/MANIFEST.MF javax.ejb.AccessLocalException.class javax.ejb.AccessTimeout.class javax.ejb.ActivationConfigProperty.class javax.ejb.AfterBegin.class javax....

    什么是 EJB Java

    【EJB】全称是Enterprise JavaBeans,是Java EE(Java Platform, Enterprise Edition)的一部分,旨在为开发企业级分布式应用程序提供一套标准框架。EJB最初由Sun Microsystems提出,它定义了一种组件模型,允许...

    EJB中ejb-jar——xml文件说明.pdf

    EJB中ejb-jar文件配置详解 EJB(Enterprise JavaBean)是一种Java技术,用于开发企业级应用程序。EJB容器提供了许多功能,如事务处理、安全认证、资源管理等,以便开发者更方便地开发企业级应用程序。在EJB中,ejb-...

    ejb2.0与ejb3.0的区别

    ### EJB2.0与EJB3.0的主要区别 #### 一、简介 企业Java Beans(EJB)是Java平台为企业级应用提供的一种组件模型。随着技术的发展,EJB经历了多个版本的迭代,其中EJB 2.0和EJB 3.0是两个重要的里程碑版本。本文将...

    Idea搭建EJB架构Demo项目源代码

    【标题】"Idea搭建EJB架构Demo项目源代码"涉及的是使用IntelliJ IDEA(简称Idea)这个强大的Java集成开发环境来构建一个基于EJB(Enterprise JavaBeans)架构的示例项目。EJB是Java EE(企业版)平台的核心部分,...

    javax.ejb.rar

    META-INF / maven / org.glassfish.main.ejb / javax.ejb / pom.properties META-INF / maven / org.glassfish.main.ejb / javax.ejb / pom.xml javax.ejb.AccessLocalException.class javax.ejb.AccessTimeout....

    EJB集群EJB集群资料

    EJB集群是EJB技术的一个重要特性,它允许EJB容器(如JBOSS)在多台服务器上分布和复制EJB实例,以实现高可用性和负载均衡。 在给定的示例中,我们看到一个简单的无状态会话Bean(Stateless Session Bean)`...

    EJB原理图:EJB工作原理

    ### EJB原理图详解 #### 一、EJB工作原理概览 EJB(Enterprise JavaBeans)是Java EE平台中的一个重要组成部分,它主要用于构建企业级应用。EJB提供了一种面向服务的方式,允许开发者专注于业务逻辑,而将复杂的...

    J2EE技术面试题 EJB面试题 JDBC面试题 JSP面试题 Servlet面试题

    有哪些类型的EJB? - Session Beans(会话bean):表示业务逻辑,分为Stateful(有状态)和Stateless(无状态)。 - Entity Beans(实体bean):持久化对象,代表数据库中的记录。 - Message-driven Beans(消息...

    EJB3 PPT教程

    **EJB3(Enterprise JavaBeans 3)是Java EE(Enterprise Edition)平台中用于构建企业级应用程序的重要组件模型。这个PPT教程详细介绍了EJB3的各种核心概念和技术,旨在帮助学习者掌握EJB3的核心特性并能实际应用到...

Global site tag (gtag.js) - Google Analytics