- 浏览: 809270 次
- 性别:
- 来自: 西安
文章分类
- 全部博客 (307)
- struts (8)
- hibernate (3)
- spring (32)
- opensourceproject (12)
- javaScript (9)
- primeton EOS (2)
- journey of heart (10)
- Design pattern (6)
- ejb (17)
- point (37)
- Linux&Unix (22)
- ibatis (10)
- AJAX (6)
- DB (26)
- Protocol (6)
- chart (4)
- web server (11)
- webservice (7)
- integration (3)
- tuxedo (5)
- ext (4)
- android (1)
- c/c++ (12)
- JVM (1)
- paginationFrame (2)
- code (2)
- report (1)
- High-performance web (1)
- svn (1)
- JQuery (1)
- workDaily (2)
- cloud (16)
- Python (8)
- English (2)
- shell (5)
- googleCode (1)
- nio (1)
- hyper-v (1)
- debug (3)
- vbs (2)
- openstack (3)
- K8S (1)
- Mesos (0)
- Spark (0)
- Marathon (0)
最新评论
-
钱图大展:
chao2751021 写道lib包哪里去下载,找不到
大型网站用户行为记录的一个实现--基于clickStream(第一部分) -
钱图大展:
无法下载
大型网站用户行为记录的一个实现--基于clickStream(第一部分) -
fm395728572:
shell脚本中用到了环境变量,但是获取不到,例如脚本中有一句 ...
ganymed-ssh2 for Java -
liuhanjiang:
我qq147229234
大型网站用户行为记录的一个实现--基于clickStream(第一部分) -
liuhanjiang:
博主 我利用您提供的方法实现博文中介绍的clickstream ...
大型网站用户行为记录的一个实现--基于clickStream(第一部分)
目的:使用ejb3 的实体bean,来完成数据库的增删改查
步骤:
1.建立一个空的java 项目,把JBoss client目录下的jar文件加入到环境变量里面
2.建立MATE-INF 目录(在src下),在其中建立 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"> <!--JTA 全局事务(默认) 定义持久化单元 persistence-unit,可以有多个持久化单元,持久化单元通俗的讲就是一 堆实体类的集合 --> <persistence-unit name="xinli" transaction-type="JTA"> <jta-data-source>jdbc/MySqlDS</jta-data-source> <!-- Jboss JPA规范的实现产品时 Hibernate,因此可以再这里配置hibernate的一些属性信息 --> <properties> <!-- validate 加载hibernate时,验证创建数据库表结构 create 每次加载hibernate,重新创建数据库表结构 create-drop 加载hibernate时创建,退出是删除表结构 update 加载hibernate自动更新数据库结构 none 不做操作 --> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> </properties> </persistence-unit> </persistence>
3.建立和数据库映射的javabean,完成元数据和数据库字段的映射关系,有两两种方式 XML方式好 注解方式,注解方式开发效率高
package cn.com.xinli.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 { /*必须有@ID 标识 * GenerationType.AUTO 在mysql 中是主键的AUTO_INCREMENT * 在oracle中是使用触发器和序列完成主键的自增,也就是它会根据 * 不同的数据库选择不同的策略 * * */ @Id @Column(name="id",length=11,nullable=false) @GeneratedValue(strategy=GenerationType.AUTO) private Integer id; @Column(name="name",length=20,nullable=false) private String name; /*必须有无参数的构造函数*/ public Person() { } public Person(String name) { this.name=name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } /** * 重写hashCode equals 方法,只比较Id */ @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; final Person other = (Person) obj; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; return true; } }
4.建立增删改查的业务接口
package cn.com.xinli.service; import java.util.List; import cn.com.xinli.bean.Person; public interface PersonService { public void add(Person person); public void delete(int id); public void update(Person person); public Person getPerson(int id); public List<Person> getPersons(); }
5.定义接口的实现类 无状态的会话bean
package cn.com.xinli.service.impl; import java.util.List; import javax.ejb.Remote; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import cn.com.xinli.bean.Person; import cn.com.xinli.service.PersonService; /*无状态的会话bean,远程接口*/ @Stateless @Remote(PersonService.class) public class PersonServiceBean implements PersonService { /*如果只有一个持久化单元可以不写unitName,超过一个必须写 * 需要使用的实体管理器(EntityManager)完成增删改查 * * */ @PersistenceContext(unitName="xinli") EntityManager em; public void add(Person person) { em.persist(person); } public void delete(int id) { /*getReference 方法如果你不调用get方法的时候他是不会 *完成数据的装载的,返回代理对象,性能高,我们仅仅要删除 *删除数据没必要加载数据 */ em.remove(em.getReference(Person.class, id)); } public Person getPerson(int id) { return em.find(Person.class, id); } public List<Person> getPersons() { /*面向对象的语句,不是Sql语句*/ return em.createQuery("select p from Person p").getResultList(); } public void update(Person person) { /*merge方法调用的前提是bean处于游离状态 * 如果对象处于托管状态 直接吊set方法 * */ em.merge(person); } }
6. 建立ant 的builder.xml 文件,方便打包,和部署
<?xml version="1.0" encoding="UTF-8"?> <project name="EntityBean" basedir="."> <property name="src.dir" value="${basedir}"/> <property environment="env"/> <property name="jboss.home" value="${env.JBOSS_HOME}"/> <property name="jboss.server.config" value="default"/> <property name="build.dir" value="${basedir}\build"/> <path id="master-classpath" description="设置编译路径"> <fileset file="${jboss.home}\client\*.jar"/> </path> <target name="prepare" description="创建class文件目录"> <delete dir="${build.dir}"/> <mkdir dir="${build.dir}"/> </target> <target name="compile" depends="prepare" description="编译"> <!--只编译以cn开头的--> <javac srcdir="${src.dir}" destdir="${build.dir}" includes="cn/**"> <classpath refid="master-classpath"/> </javac> </target> <target name="ejbjar" description="创建ejb发布包" depends="compile"> <jar jarfile="${basedir}\${ant.project.name}.jar"> <fileset dir="${build.dir}"/> <include name="**/*.class"/> <metainf dir="${src.dir}\META-INF"></metainf> </jar> </target> <target name="deploy" description="发布"> <copy file="${basedir}\${ant.project.name}.jar" todir="${jboss.home}\server\${jboss.server.config}\deploy"/> </target> <target name="undeploy" description="卸载ejb"> <delete file="${basedir}\${ant.project.name}.jar" todir="${jboss.home}\server\${jboss.server.config}\deploy"/> </target> </project>
7. 完成单元测试用例,在业务接口上右键-->新建--> 单元测试用例(是junit4)
package junit.test; import static org.junit.Assert.*; import java.util.List; import javax.naming.InitialContext; import org.junit.BeforeClass; import org.junit.Test; import cn.com.xinli.bean.Person; import cn.com.xinli.service.PersonService; public class PersonServiceTest { private static PersonService personService; @BeforeClass public static void setUpBeforeClass() throws Exception { try { InitialContext ctx=new InitialContext(); /*remote必须是小写,大写会报错*/ personService=(PersonService) ctx.lookup("PersonServiceBean/remote"); } catch(Exception e) { e.printStackTrace(); } } @Test public void testAdd() { personService.add(new Person("我的老婆")); personService.add(new Person("我的老婆")); } @Test public void testDelete() { /* 设置表的自增字段重新从1开始 alter table person AUTO_INCREMENT=1;*/ personService.delete(1); } @Test public void testUpdate() { Person person=new Person(); person.setId(1); person.setName("小亮亮"); personService.update(person); } @Test public void testGetPerson() { Person person=personService.getPerson(2); System.out.println(person.getId()); System.out.println(person.getName()); } @Test public void testGetPersons() { List<Person> persons=personService.getPersons(); for(Person person:persons) { System.out.println(person.getId()); System.out.println(person.getName()); } } }
8. 使用ant 打包部署后,运行单元测试用例,打开mysql数据库,观察结果,一切ok,如果数据库有乱码现象,请修改sql连接字符串 加上useUnicode\=true&characterEncoding\=UTF-8
- EntityBean.rar (14.4 KB)
- 下载次数: 14
发表评论
-
本地客户端调用 websphere6.1 ejb资源 解决方案
2011-01-21 12:25 1805开发环境: 中我们都是在jboss4.0上部署ejb2. ... -
ejb2.0用本地引用提高EJB访问效率
2009-12-24 15:21 3023用本地引用提高EJB访问效率 EJB 1 ... -
ejb3.0 跨平台,跨JVM调用出现的问题及解决方案
2009-11-09 21:58 2344首先 ... -
ejb3 定时器开发
2009-10-28 08:35 3765定时服务用作在一段特定的时间后执行某段程序 ... -
ejb2.0消息驱动bean的开发(JBOSS4.0.4.GA 环境)
2009-10-23 11:12 2332消息驱动bean主要使用在异步的业务 ... -
ejb3 第12讲 --开发EJB容器模型的WEB服务
2009-08-05 08:04 3901JAX-WS JAX-WS规范是一组XML web ... -
ejb3 第9讲 --配置jboss数据源
2009-08-02 20:19 1117这个比较简单: 去$JBOSS_HOME\ ... -
ejb3 第8讲 --通过注解方式注入并使用其他EJB或者服务
2009-07-08 08:02 3275情景:有两个bean,一个是HelloWorldBean ... -
ejb3 第7讲 --开发有状态bean
2009-07-05 21:21 1422用 @Stateful 注解的方式表明 bean是有状态 ... -
ejb3 第6讲--开发具有本地接口的无状态bean
2009-07-03 07:01 2843理解: 1.当ejb的服务器端和客户端 ... -
ejb3 第5讲--通过ANT提高EJB应用的开发效率
2009-07-02 22:10 1451<?xml version="1.0" ... -
ejb3 第4讲--把jboss集成进eclipse
2009-06-29 22:45 1279这个比较简单,就不多说了 -
ejb3.0 第2,3讲-开发第一个无状态会话bean和客户端
2009-06-29 22:11 1690ejb中的3种bean: 什么是会话bea ... -
ejb3.0第11讲 --开发消息驱动bean
2009-06-24 08:23 2620概念: 1.java ... -
ejb3.0 --第1讲下载安装运行JBOSS
2009-06-24 07:08 16051.下载地址:jboss4.2.3http://www. ... -
ejb2.0 HelloWord
2008-09-27 07:38 7987中国电信网上营业厅项目是使用ejb2.0开发的,在项目中 ...
相关推荐
6.4 单表映射的实体BEAN..38 6.5 持久化实体管理器ENTITYMANAGER..43 6.5.1 Entity获取find()....43 6.5.2 添加 persist().........43 6.5.3 更新 Merge() .........44 6.5.4 删除 Remove() .......44 6.5.5 执行 ...
6.4 单表映射的实体BEAN..38 6.5 持久化实体管理器ENTITYMANAGER..43 6.5.1 Entity获取find()....43 6.5.2 添加 persist().........43 6.5.3 更新 Merge() .........44 6.5.4 删除 Remove() .......44 6.5.5 执行 ...
### 企业级应用开发:《Apress.Begining EJB3 Java EE 7 Edition.2013》核心知识点解析 #### 一、书籍概述 **标题与描述:**《Apress.Begining EJB3 Java EE 7 Edition.2013》是一本面向初学者介绍如何使用EJB3...
**6.4 单表映射的实体 Bean**: - 定义实体类,使用 `@Entity` 注解标记。 - 使用 `@Table` 指定表名。 **6.5 属性映射**: - 映射实体类属性到数据库表字段。 - 使用 `@Column` 注解指定字段名称。 **6.6 持久化...
#### 第十六章:EJB 3与Spring框架的整合 - **Spring框架集成**:讨论了如何将EJB 3与流行的Spring框架结合起来使用,以实现更灵活的应用程序架构设计。 通过以上章节内容的概述,可以看出《EJB 3 In Action》是一...
2. **实体Bean(Entity Beans)**:EJB3中的实体Bean不再需要编写大量的接口和Home接口,而是通过注解@Entity来定义,使用JPA(Java Persistence API)进行数据持久化,大大简化了对象关系映射。 3. **会话Bean...
- **实体Bean(Entity Bean)**:代表持久化的业务对象,EJB3引入了注解驱动的实体管理,如`@Entity`和`@Id`,使得ORM(对象关系映射)变得更加直观。 - **会话Bean(Session Bean)**:处理业务逻辑,分为状态ful...
第八章“对象-关系映射”深入探讨了如何将Java对象映射到关系数据库表。这种映射过程是实现持久化的基础。 **9. 使用EntityManager操纵实体** 第九章“使用EntityManager操纵实体”讲解了如何利用EntityManager ...
- 通过具体示例,读者可以学会如何使用注解或 XML 文件来定义实体与数据库表之间的映射关系,从而更灵活地操作数据库数据。 - **第 9 章:使用 EntityManager 操作实体** - 本章着重介绍了 EntityManager 接口...
**3.2 单表映射的实体BEAN** 实体Bean可以映射到数据库中的单个表,其中每个属性对应表中的一个字段。 **3.3 成员属性映射** 具体说明如何将实体Bean的属性映射到数据库表中的字段。 **3.4 建议重载实体BEAN的...
10. **第10章:使用Query API和Java Persistence Query Language** 本章进一步探讨了如何使用JPQL(Java Persistence Query Language)编写复杂的查询语句,并介绍了如何使用Query API执行这些查询。 11. **第11...
**企业级JavaBeans(EJB)3.0规范详解** 企业级JavaBeans(EJB)是Java平台上用于构建可扩展、安全且事务...《ejb-3_0最新规范.pdf》这份文档应该包含了所有这些改进的详细信息,对于理解和应用EJB 3.0规范至关重要。
#### 第10章:使用Query API和Java Persistence Query Language - **章节内容**:讲解如何使用EJB 3.0中的Query API和JPQL来进行复杂的查询操作。 - **核心知识点**: - Query API的使用方法。 - JPQL的语法和...