EJB开发单表映射

所谓EJB指的是企业级的javabean,实际上是用于编写业务层代码,最大的优势是可以基于分布式,即逻辑处理可以和客户端在物理上实现分离,亦可以多个应用共享业务逻辑,由于现在EJB只适应于大型企业,所以其占有的市场还不是很大,但是EJB的专家组已经慢慢开始在现有的基础上慢慢分离出一些轻量级的服务,相信在不久的将来,EJB会咸鱼翻身,下面是我写的一个单表映射例子,新建一个java工程,并将JBoss目录client文件夹中的所有jar包添加到工程中
1.首先是实体类

package com.lamp.bean;


import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="person")
public class Person implements Serializable{

private static final long serialVersionUID = 4477505660860563844L;
private Integer id;
private String name;

public Person(){}

public Person(String name) {
this.name = name;
}

@Id @Column(name="id",length=10,nullable=false) @GeneratedValue(strategy=GenerationType.AUTO)
public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

@Column(name="name",length=20,nullable=false)
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}

}

2.实体bean

package com.lamp.service.impl;

import java.util.List;

import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import com.lamp.bean.Person;
import com.lamp.service.PersonService;

@Stateless
@Remote(PersonService.class)
public class PersonServiceBean implements PersonService {

@PersistenceContext
EntityManager em;

public void delete(Integer personId) {
em.remove(em.getReference(Person.class, personId));
}

public Person getPerson(Integer personId) {
return em.find(Person.class, personId);
}

@SuppressWarnings("unchecked")
public List<Person> getPersons() {
return em.createQuery("select o from Person o").getResultList();
}

public void save(Person person) {
em.persist(person);
}

public void update(Person person) {
em.merge(person);
}

}

3.在src目录下新建文件夹META-INF,在其目录下新建JPA配置文件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="MyEJBEntity" transaction-type="JTA">
<jta-data-source>java:你在JBoss中配置的数据源JNDI名称</jta-data-source>

<properties>
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.format_sql" value="false" />
</properties>

</persistence-unit>


</persistence>


在这里我是通过ant进行项目的构建的,build.xml代码如下

<?xml version="1.0" encoding="UTF-8"?>
<project name="EntityBean" basedir=".">

<property environment="env"></property>
<property name="src.dir" value="${basedir}/src"></property>
<property name="jboss.home" value="${env.JBOSS_HOME}"></property>
<property name="jboss.server.config" value="default"></property>
<property name="build.dir" value="${basedir}/build"></property>

<path id="build.classpath">
<fileset dir="${jboss.home}\client">
<include name="*.jar"/>
</fileset>
<pathelement location="${build.dir}"/>
</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}" debug="on" includes="com/**">
<classpath refid="build.classpath"></classpath>
</javac>
</target>

<target name="ejbjar" depends="compile" description="创建jar">
<jar jarfile="${basedir}\${ant.project.name}.jar">
<fileset dir="${build.dir}">
<include name="**/*.class"/>
</fileset>
<metainf dir="${src.dir}\META-INF"></metainf>
</jar>
</target>

<target name="deploy" depends="ejbjar" description="发布EJB">
<copy file="${basedir}\${ant.project.name}.jar" todir="${jboss.home}\server\${jboss.server.config}\deploy"></copy>
</target>

<target name="undeploy" description="卸载EJB">
<delete file="${jboss.home}\server\${jboss.server.config}\deploy\${ant.project.name}.jar"></delete>
</target>

</project>


还有要记得将数据源文件(我用的mysql)mysql-ds.xml文件放在..server\default\deploy目录下,mysql的驱动包放在..server\default\lib目录下,启动JBoss并用ant将项目构建,JBoss会帮你在数据库中自动生成表person

写个测试方法吧,在src目录下新建文件jndi.properties
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost:1099

新建一个测试方法

private static PersonService personService;

@BeforeClass
public static void setUpBeforeClass() throws Exception {
try {
InitialContext ctx = new InitialContext();
personService = (PersonService) ctx
.lookup("PersonServiceBean/remote");
} catch (Exception e) {
e.printStackTrace();
}
}

@Test
public void testSave() {
personService.save(new Person("我的第一个EJB"));
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值