Eclipse+JBoss+Mysql开发EJB3.0EntityBean

        开发工具:Eclipse Java EE IDE for WebDevelopers,JBoss 5.1.0.GA,Mysql 5.0.22

        EJB(Enterprise JavaBean)有3种,Session Bean、Message Bean和Entity Bean。其中Session Bean又分为有状态的会话Bean(Stateful Session Bean)和无状态的会话Bean(Stateless Session Bean)。

        这里重点要说的是实体Bean。

        实体Bean,看名字就可以猜到了这是一个ORM,对于已学过Hibernate的童鞋来说,接受起来实体Bean还是很轻松的,而且在事务方面,EJB3发布了JPA规范,也使得只要遵守JTA进行实体的编写,那么这些实体就具备了跨框架的可移植性。这个的实现,也是由于EJB3比EJB2的进步之处,采用了POJO(对EJB2只是知道开发起来很麻烦,没有详细研究过)。

        如果将Hibernate与EJB3.0进行对比,你会发现Session和EntityManager、SessionFactory和PersistenceContext有这异曲同工之妙,由于特殊原因,我先学习了EJB后学的Hibernate,由于EJB中的实体管理对象命名较形象,所以将Session往EntityManager上面靠,理解起来还是没有太大困难的。

        开发EJB和Hibernate还有所不同,Hibernate从某方面来说,它需要你从网上下载Hibernate的包,而EJB不一样的是,它是由应用服务器实现的,我这里的做法是引入JBoss根目录下client里面所有的jar包,这样就有了EJB开发的环境了。那么需要怎样做才能够创建我的第一个EntityBean呢?

        首先,拷贝数据库驱动到JBoss_Home/server/default/lib下,然后拷贝docs/examples/jca/mysql-ds.xml到/servet/default/deploy目录下,并修改数据库用户名及密码。

        点击File->New->Ejb Project,填写Project Name,这里需要配置一下Configuration里面的东西,如果不配置,你会发现你创建的EJB的注解都是无效的。点击Modify进入ProjectFacets面板,Configuration选择为custom,在Project Fecet选择EjbModele,Java,JPA,版本号分别为3.0,1.6,2.0,如果不选JPA,你的EntityBean中的注解都是无效的。EAR membership和Working sets暂时略过,点击Nest,如果此时能Finish直接Finish即可,如果不能,那么继续Next,将Type选择为Disable Library Configuration即可,然后Finish完成设置。

        现在你看源代码根目录的META-INF下,会发现persistence.xml这个文件,这个文件你可以理解为就是Hibernate的核心配置文件,在这里面进行配置:

        mysql的数据库配置和persistence配置如下:

persistence.xml
<persistence-unit name="test" transaction-type="JTA">
		<jta-data-source>java:/MySqlDS</jta-data-source>
		<properties>
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
			<property name="hibernate.hbm2ddl.auto" value="update"/>
		</properties>
	</persistence-unit>

mysql-ds.xml
<local-tx-datasource>
    <jndi-name>MySqlDS</jndi-name>
    <connection-url>jdbc:mysql://localhost:3306/ejb3</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>root</user-name>
    <password>admin</password>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
     <metadata>
       <type-mapping>mySQL</type-mapping>
    </metadata>
  </local-tx-datasource>

        现在,就可以开发实体Bean了,在项目中新建一个类,命名为User,有过Hibernate开发经验的同学如果用过注解,那么就很容易上手实体Bean的注解形式开发,因为他们都是采用了一套规范JPA。而且在开发实体Bean的时候,最好就是用JPA标准注解,尽量不用每个框架扩展的,因为经过这样开发出来的实体Bean,复制到任何支持JPA的框架都是可以的。

        和Hibernate的实体注解方式一样,首先需要一个@Entity来注明此类为实体,然后需要表示Id,并且为Id的选择生成策略:Person.java(未列出get、set方法)

public class Person implements Serializable {
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue
	private int id;
	private String name;
}

        这样,一个实体Bean就开发完成了,那么由于对数据库配置了hibernate.hbm2ddl.auto为update,所以在EntityManager初始化的时候,就会自动映射表结构。

        下面,就再写一个Manager,对Person进行操作:

@Stateless
@Remote
public class PersonManagerBean implements PersonManager {

	@PersistenceContext(unitName="test")
	private EntityManager em;
	
	@Override
	public void addPerson(String name) {
		Person person=new Person();
		person.setName(name);
		em.persist(person);
	}
}

        个人感觉EJB3.0中的命名要比Hibernate命名好一些,PersistenceContext就是SessionFactory,EntityManager就是Session,但Hibernate如果涉及到远程,就歇菜了,而EJB是支持远程调用的,并且EJB3.0发布为WebService也是极其容易。

        对于二者的选择,我想通过大家对它们的描述以及名字就可以知道了。Hibernate,轻量级ORM框架,EJB企业级JavaBean。

        如果项目没有涉及到分布式,远程方法调用,那么Hibernate用的还是不错的

        至此,第一个实体Bean的开发就结束了,个人感觉对于EJB3.0的理解,最好还是建立在Hibernate上,因为EJB3.0开始了广泛的使用注解,使用注解开发简单是毋庸置疑的,也省去了在两个窗口之间来回切换,但是对于理解来说,还是全程使用xml文件开发有助于理解。

        最后再说一下注解和配置文件的选择,注解的出现,绝对不是取代xml,但是由于注解的简单,所以注解的应用广泛化势在必行。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值