您的位置:首页 > 其它

深入学习EJB3.0之一:概述与搭建环境

2011-02-15 13:17 405 查看
现在做的项目正在使用EJB3,虽然用了有一段时间,但是自己总感觉并不是十分理解其中的许多内容,也并不清楚到底用EJB有什么好处,所以找了一本书(EJB3.0入门经典)进行研读,并根据自己和网上大家的理解准备写一系列详细的学习日志,如有错误,请大家不吝赐教。
一、EJB的概述:
1.EJB (Enterprise JavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。在J2EE里,Enterprise Java Beans(EJB)称为Java 企业Bean,是Java的核心代码,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。
① Session Bean用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就会选择一个Session Bean来为客户端服务。Session Bean可以直接访问数据库,但更多时候,它会通过Entity Bean实现数据访问。
② Entity Bean是域模型对象,用于实现O/R映射,负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个Entity Bean对象相当于新建一条记录,删除一个Entity Bean会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。
③ MessageDriven Bean是EJB2.0中引入的新的企业Bean,它基于JMS消息,只能接收客户端发送的JMS消息然后处理。MDB实际上是一个异步的无状态 Session Bean,客户端调用MDB后无需等待,立刻返回,MDB将异步处理客户请求。这适合于需要异步处理请求的场合,比如订单处理,这样就能避免客户端长时间的等待一个方法调用直到返回结果。
2.EJB实际上是SUN的J2EE中的一套规范,并且规定了一系列的API用来实现把EJB概念转换成EJB产品.EJB是 BEANS,BEANS是什么概念,那就是得有一个容纳她,让她可劲造腾的地方,就是得有容器.EJB必须生存在EJB容器中.这个容器可是功能强大之极!她首先要包装你BEAN,EJB的客户程序实际上从来就不和你编写的EJB直接打交道,他们之间是通过HOME/REMOTE接口来发生关系的.它负责你的BEAN的所有的吃喝拉萨睡,比如BEAN的持续化,安全性,事务管理...
EJB是一个技术规范,标准描述了构建应用组件要解决的可扩展 (Scalable)、分布式 (Distributed)、事务处理 (Transactional)、数据存储 (Persistent)、安全性 (Secure);从技术上而言并不是一种"产品"。
3.EJB应用需要运行在EJB容器中(不同于Web容器和Servlet容器):
Web容器好比电视机,Servlet容器好比VCD,没有VCD你可以看电视,但是有了VCD没有电视机,你从哪看起?

没有Servlet容器,你也可以用Web容器直接访问静态页面,比如安装一个apache等,但是如果要显示Jsp/Servlet,你就要安装一个Servlet容器了,但是光有Servlet容器是不够的,因为它要被解析成Html输出,所以你仍需要一个Web容器(大多数Servlet容器同时提供了Web容器的功能,也就是说大多Servelt可以独立运行你的Web应用)。

EJB容器。更具有行业领域特色。他提供给运行在其中的EJB组件各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。EJB 容器提供对企业 Bean 的本地访问和远程访问。容器负责创建企业 Bean、将企业 Bean 绑定到命名服务以使其他应用程序组件可以访问企业 Bean、确保只有授权的客户机才能访问企业 Bean 的方法、将 Bean 的状态保存到持久性存储中、高速缓存 Bean 的状态以及在必要时激活或钝化 Bean。
JBoss是EJB容器,Tomcat是Web容器,一般的JBoss都已经集成了Tomcat,如果没有集成Tomcat,JBoss就不可以运行Jsp和Servlet。
一般把具有完整的J2ee(包括EJB)功能的叫做应用服务器。
发布到EJB容器的组件只能通过JNDI来访问。

4.JNDI(Java Naming and Directory Interface)概述:
命名服务用于将名称和对象联系起来,从而可以用名称访问对象,即容器帮你维护对象实例,你只需使用API即可获得new好的对象实例。
JNDI结构:



二、建立EAP工程及创建数据源:
1.创建数据源
在EJB工程中配置数据源并不像在使用Hibernate时再工程的配置文件中配置,而是将所需要的数据库连接串、驱动、用户名、密码等在JBoss中配置成数据源,并使用jndi-name与EJB工程联系起来,JBoss中数据源的配置:
在%JBOSS_HOME%/server/default/deploy中mssql-ds.xml配置(由于我使用的是SQLServer):
<datasources>
<local-tx-datasource>
<jndi-name>LucubrateEJB</jndi-name>
<connection-url>jdbc:jtds:sqlserver://localhost:1433;DatabaseName=lucubrate_ejb</connection-url>
<driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class>
<user-name>sa</user-name>
<password>sa</password>
<metadata>
<type-mapping>MS SQLSERVER2005</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>


2.建立EAP工程
使用MyEclipse建立EAP(Enterprise Application Project)工程,包含了EJB工程和Web工程以及将两个工程进行关联的一个工程,这样就免去了分别建EJB和Web工程,然后再将EJB打包到Web工程中的繁琐。
EAP工程被打包发布到应用服务器上时,以.ear结尾(enterprise application archive)。
如下:



在第一个工程中的application.xml中描述了打包成ear工程的各项属性,如下:
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd"> <display-name>LucubrateEJB3_1</display-name>
<module id="myeclipse.1297655006055">
<web>
<!-- 打包到JBoss上的名称 -->
<web-uri>LucubrateEJB3_1Web.war</web-uri>
<!-- 定义了在浏览器地址上访问的根目录 -->
<context-root>/LucubrateEJB3_1Web</context-root>
</web>
</module>
<module id="myeclipse.1297655006374">
<!-- 打包到JBoss上的名称 -->
<ejb>LucubrateEJB3_1EJB.jar</ejb>
</module>
</application>


在第二个工程,EJB工程下的persistence.xml中定义了工程所访问的数据源,如下:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<persistence-unit name="LucubrateEJB3_1EJBPU"
transaction-type="JTA">
<!-- JBoss中定义的数据源名称,注意要加上java:/ -->
<jta-data-source>java:/LucubrateEJB[上面在JBoss中创建的数据源名称]</jta-data-source>
</persistence-unit>
</persistence>


最后在浏览器的地址栏上输入http://localhost:8888/LucubrateEJB3_1Web就可以看到此项目的index.jsp页面了(我设置的端口号是8888)。
以上即为此节的内容,简单的介绍EJB和部署。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: