wm2395的空间

我们一直在努力....

初学EJB的程序员你懂这些了吗

标签: 持久化 EJB组件 部署

 从刚接触EJB到现在已经一个月了,也总该给自己一个交待。一边工作,一边总结,一边学习EJB,这三个环节持续了这么长时间,到此把所学到的,所理解的EJB认真的总结一下。

首先,我先说一下这段时间对EJB的感觉。不管是从书店还是从网上查EJB,它的资料相对其他火热的轻量级的技术来说,不能夸张地说是屈指可数也可以说是寥若晨星吧,在这种老虎吃天无从下口的情况下,就开始了EJB的学习。在学习的过程中发现不少人云亦云的程序员,一说到EJB就列出一系列EJB的缺点,说EJB代码复杂在实现session bean entity bean是需要用的很多类来实现,说EJB设计的困难,如果没有完全理解EJB的概念,就不会很好的驾驭它,好为你所用,反之为你所累。还有维护困难等等很多。。。。。。但是我相信肯定有很多程序员跟本没有去尝试就这么随波逐流的贬低EJB。当然在不排除EJB这些缺点的前提下,也要着眼放大EJB的优点,现在的这些技术当中EJB可以堪称是最好的业务对象分布式框架之一,它和J2EE的紧密结合,使得多层结构的J2EE的中间插件EJB技术发挥到了淋漓尽致的作用。总之,积极的构建分布式体系是大势所迫,是未来发展的方向,个人认为这是明智的技术选择。

接下来就表述一下我学到的EJB知识,这里仅是代表个人的想法和描述,若读者有更好的意见请留言,在次先谢过。。。
.开发EJB组件

1.先要考虑怎么新建这个组件?新建这个组件要用的那些EJB技术?怎么运用这些技术?

  在实际操作当中我首先根据实体对象来创建的实体Bean,起初实体Bean就是POJO即普通的java的对象。然后对这个POJO进行持久化让它转变成一个与数据库表相关联的一个持久化类,这个持久化类通常称为实体Bean。对POJO进行持久化的方法有两种,一种是应用注释,这是java5.0中的新特性,这种方式多用于开发人员,因为开发人员更加关注的是业务逻辑的实现。注释能够使开发人员对这些实体的配置一目了然,更迅速的理解实体的配置,节省时间。即使想修改映射就直接从代码的注释中就可以修改,修改也方便。另外一种是采用XML配置的方式,这种方式比较适合不懂java语言的专门负责软件运行的维护人员。这些人员只需要了解XML文件,只需要修改XML中的映射配置就达到了同样的效果,这样就不用再去麻烦开发人员进行修改映射配置。总之,采用某种方法对POJO进行ORM映射,对应到数据库中的一个数据表。以上是进行实体化Bean时用到的技术。接下来就是定义一个远程接口和一个Session Bean,这个接口就是涉及到某一业务的服务。一般是用标注是SessionBean的这个类来实现这个远程接口。在实践中我采用的是@Stateless(无状态会话Bean,这是sessionBean中的一种)和@Remote来注释说明的。当这些代码编写完成后,下面就要考虑用实体管理器EntityManager来负责管理Entity对象。就是在实现接口的这个类中使用依赖注入创建EntityManager实例,对Entity的增删改查的这些操作都是通过这个实例来实现的。就是会用到实体管理器的find(),merge(),remove()和createQuery()等方法。这个问题解决之后那么第1个问题就告一段落。

  2.创建完实体BeanSessionBean后,接下来就是配置DataSource数据源,怎么配置数据源?
   
在实践时我用的是SQLserver数据库,所以在配置数据源的时候将mssql-ds.xml复制到jboss/server/default/deploy目录下,就是和EJB-JAR包相同的文件目录下。需要注意的问题是:用于配置持久化单元的一个配置文件(persistence.xml),在此可以配置多个持久化单元。但是在persistence.xml文件中的<jta-dats-source><java:/***</jta-data-source>这个名字要和mssql-ds.xml中的<jndi-name>的名字保持一致。而persistence.xml文件的<persistence-unit name=””>名字又用于在实现远程接口类(就是声明是SessionBean的那个类)中实例实体管理器时的@PersistenceContext(unitName=””) 这个unitName.而这个unitName就是要指明其中的一个持久化单元,也就是要和其中的一个<persistence-unit  name=””>相一致,这样表示初始化那个持久化单元。在mssql-ds.xml文件中对数据源进行了配置,当这三个地方处理结束后,有关数据源的配置也就完成了。

3.怎么打包EJB-JAR?怎么部署EJB-JAR?怎么启动jboss应用服务器?

   当上面两个问题都解决之后接下来就是把已经建立好的ejb工程进行打包和部署。打包顾名思义就是在开发环境下(Eclipse)导出本工程的一个jar文件。把这个jar文件放到jboss/server/default/deploy的目录下。这样就完成了打包和部署。在开发环境下配置添加上一个jboss的应用服务器前提下,这时就可以启动这个jboss应用服务器,当jboss服务器启动时首先加载EJB-JAR包中的标记注释为@Entity的类和对应的persistence.xml 中的配置,部署完EJB-JAR包后,开发环境的控制台中会输出服务器的日志信息,在此可以查看这个工程的jar文件和服务器的启动是否正常。如果正常之后就可以考虑下一步根据客户的需求来建立客户端的工程。在实践中个人实验了多种实体映射关系的例子,都已实验成功,有机会把源代码发到网上,供大家参考。

二.编写调用EJB组件的Client的工程,怎么来建立这个Client工程呢?

   1.下面简单的说明一下Client这端,因为在客户端这边实现非常灵活,可以用多种技术来实现客户要求的业务模块。但是有一个核心就是不管用什么方式实现客户的需求,都要做到可以在客户端远程访问到EJB组件。要想访问远程的EJB组件在客户端可以通过容器托管的EntityManger对象的JNDI方式获得,如果在实例EntityManager时指定了@PersistenceContext 注释中的name值,则设置持久化上下文的JNDI名称。就可以在客户端可以通过设置Jboss服务器的JNDI驱动的类名和设置Jboss服务器提供的命名服务的URL来查找到远程EJB组件的sessionbean,当这步完成后也就是可以远程访问EJB组件了即通过容器托管的EntityManger对象来实现各种操作。接下来就可以通过多种方式来实现客户的需求,完成业务模块。

2.当编写完客户端的代码后,下面应该是怎么打包客户端的代码,怎么部署客户端的代码?

客户端的代码通常打包成以.war扩展名结尾的文件,它由部署符文件web.xml文件和一些JSPServletjsf、图片等资源文件组成。其中web.xml文件放在WAR文件的WEB-INF文件夹下。在实践中我个人是把客户端的导出的war包放到了和EJB组件jar包同一个路径jboss/server/default/deploy下了,因为JbossEJB容器和Web容器(Web容器是集成了Tomcat)结合,而没有把war放到专门的web容器的Tomcat下。这时部署在EJB容器下的JAR包都可以认为是运行在EJB容器中。但JBoss中的Web应用,比如war包中的类就不是运行在EJB容器中,而是运行在Web容器中。

当上面一切准备就绪后,jboss应用服务器也正常启动,这时就可以通过http://localhost:8080/web工程名来访问了。


    分享: 收藏到CSDN 收藏到javaeye 收藏到博客园 收藏&分享
  • 浏览 (551)
  • 评论 (0)
  • 发表于 2009-04-01 11:04
  • EJB系列
    评分: 请先登录再投票,同一篇博客一月只能投票一次!
    无人投票

相关博客:


评论


发表评论

最近访客
关注此文的人们还关注