所谓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"));
}
分享到:
相关推荐
本教程聚焦于EJB 3,特别是第10讲,主要讲解如何开发单表映射的实体Bean。在本篇详细解答中,我们将深入探讨EJB 3中的实体Bean及其与数据库单表映射的关系。 首先,实体Bean是EJB的一种类型,代表业务逻辑中的持久...
这个主题“10_开发单表映射的实体bean”聚焦于如何将数据库单表的数据映射到Java对象,以便在应用程序中进行操作。在本篇中,我们将深入探讨实体Bean的概念、实现方式以及其在实际项目中的应用。 首先,我们需要...
在EJB 3.0开发中,多表映射是一个重要的概念,特别是在处理复杂数据模型时。本教程聚焦于如何使用Java和EJB 3.0标准来映射实体Bean到多个数据库表。EJB(Enterprise JavaBeans)是Java EE平台的一部分,用于构建企业...
### EJB对象关系数据库映射知识点详解 #### 一、EJB与对象关系数据库映射(ORM) **EJB(Enterprise JavaBeans)**是Java EE平台的一个重要组成部分,主要用于构建企业级应用的服务端组件。EJB提供了一种将业务...
总之,JPA关联映射是理解和掌握JPA的关键部分,它使得Java开发者能够以面向对象的方式处理数据库关系,极大地提高了开发效率和代码的可读性。通过深入理解并熟练运用这些映射机制,可以更好地构建和维护复杂的业务...
本教程针对新手,是一个很好的EJB开发入门学习资源。 在提供的压缩包文件中,我们有两个SWF文件,它们可能是基于Flash的教学演示,详细解释了EJB的开发过程。文件名分别为: 1. `jbossmyeclipse_entity.swf` - 这...
- **实体Bean(Entity Beans)**:EJB 3.0中的实体Bean基于JPA(Java Persistence API),允许开发者直接操作数据库,提供了ORM(对象关系映射)功能。 - **会话Bean(Session Beans)**:分为无状态会话Bean(@...
开发者可以直接在实体类上使用注解来定义表映射关系,实现对象与数据库记录的映射。 5. **JBuilder2007**:JBuilder是Borland公司(后被Embarcadero收购)推出的一款强大的Java开发工具,支持包括EJB在内的多种Java...
**企业级JavaBeans(EJB)系统开发实战** 在企业级软件开发中,EJB(Enterprise JavaBeans)扮演着...从设计模式到实际编码,从本地测试到生产环境部署,每个环节都将得到详细讲解,帮助开发者掌握EJB开发的核心技巧。
**EJB3.0开发入门 Step by Step** Enterprise JavaBeans(EJB)是Java平台企业版(J2EE,现在称为Java EE)的核心组件之一,它提供了一种规范化的、可扩展的方式来创建分布式的企业级应用。EJB3.0是EJB规范的一个...
### EJB 开发实例:学校管理系统 #### 一、引言 随着企业级应用程序的不断发展,EJB(Enterprise JavaBeans)作为一种重要的Java EE组件模型,为构建可伸缩且易于维护的企业级应用提供了强有力的支持。本文旨在通过...
这些Bean通常使用JPA(Java Persistence API)进行持久化操作,通过ORM(对象关系映射)框架如Hibernate或EclipseLink,将Java对象映射到数据库表。 4. **主键生成策略**:在购物车应用中,`Product`实体可能需要一...
EJB3.0是EJB规范的一个重要版本,它在之前的基础上进行了大量的简化和改进,使得开发更加简便且高效。 1. **EJB3.0开发Entity**: Entity Beans代表数据库中的持久化对象,它们是应用程序中的业务对象,负责与...
**结合JSF与EJB开发实例** 1. **通信机制**:JSF通常通过Managed Beans调用EJB服务,Managed Beans作为两者的桥梁,接收前端请求并转发给EJB处理。 2. **数据展示**:JSF组件可以绑定到Managed Bean的属性,当EJB...
4. **容器管理持久性(Container-Managed Persistence, CMP)**:EJB2.0引入了CMP,使得开发者无需关心数据存储的细节,容器自动处理对象到数据库的映射。开发者只需在ejb-jar.xml中配置CMP规则,容器就会自动进行...
EJB(Enterprise JavaBeans)是Java企业级应用开发的核心组件之一,主要负责处理业务逻辑。EJB3是EJB规范的一个重要版本,它在EJB2的基础上进行了许多简化和改进,使得开发更加高效且易于理解。本文将深入探讨EJB3中...
本文将深入探讨EJB开发的核心知识点,帮助程序员掌握EJB的使用技巧和最佳实践。 ### 1. EJB类型 EJB主要分为三种类型: - **会话Bean(Session Beans)**:代表一次客户端会话或一个业务操作。它们可以是无状态...