【EJB学习笔记】——实体Bean
2016-03-29 22:13
288 查看
实体Bean跟普通的Java实体并无多大差异,在EJB中的实体Bean用@Entity注解定义。
实体Bean开发步骤如下:
JBoss配置
配置JBoss数据源
这里用的数据库为mysql
拷贝数据库驱动(mysql驱动)到JBoss的server\default\lib目录下
添加数据源配置文件
在JBoss的docs\examples\jca目录下有各种数据库的配置文件,这里把mysql-ds.xml拷贝到server\default\deploy目录下(JBoss启动时会自动扫描该目录下的配置文件),并配置如下:
上述配置很容易理解,
如果JBoss需要再添加数据库,则在
创建含有实体Bean的EJB项目
建立支持JPA的EJB项目
EJB中的实体Bean是用JPA实现的,所以在new—EJB Project时,一定要在Configuration下点击Modify,在Project Facet下面选中JPA:
后面的默认即可,创建完成后,会在META-INF文件夹下生成一个persistence.xml配置文件,类似于Hibernate中的hibernate.cfg.xml
配置如下内容:
上面的MySqlDS就是mysql-ds.xml中配置的jndi-name。
编写实体类User.java,注解映射规则:
@Entity表名该类时一个实体Bean,@ID标记的是生成表后的主键。在Hibernate中,如果某些字段不做说明则默认不会映射到数据库,EJB的JPA刚好相反,一个实体的某些字段不需要定义,默认会映射到数据库中,如果某个字段标明了@Transient注解,则不会映射到数据库中。@GeneratedValue表示自增长ID生成策略,相当于Hibernate中的native主键生成策略。
部署该EJB项目后,可以在数据库中发现生成了user表,详情为:
操作实体Bean
创建一个无状态会话Bean
在会话Bean中,需要用@PersistenceContext来注入javax.persistence.EntityManager,EntityManager
客户端测试:
执行结果,数据被成功插入到user表中:
【 转载请注明出处——胡玉洋《【EJB学习笔记】——实体Bean》】
实体Bean开发步骤如下:
JBoss配置
配置JBoss数据源
这里用的数据库为mysql
拷贝数据库驱动(mysql驱动)到JBoss的server\default\lib目录下
添加数据源配置文件
在JBoss的docs\examples\jca目录下有各种数据库的配置文件,这里把mysql-ds.xml拷贝到server\default\deploy目录下(JBoss启动时会自动扫描该目录下的配置文件),并配置如下:
<?xml version="1.0" encoding="UTF-8"?> <datasources> <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>123456</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> </datasources>
上述配置很容易理解,
<jndi-name>JNDI名称 ,
<connection-url>数据库名称,
<user-name>用户名,
<password>密码……
如果JBoss需要再添加数据库,则在
<datasources></datasources>中再添加一个
<local-tx-datasource></local-tx-datasource>配置即可。
创建含有实体Bean的EJB项目
建立支持JPA的EJB项目
EJB中的实体Bean是用JPA实现的,所以在new—EJB Project时,一定要在Configuration下点击Modify,在Project Facet下面选中JPA:
后面的默认即可,创建完成后,会在META-INF文件夹下生成一个persistence.xml配置文件,类似于Hibernate中的hibernate.cfg.xml
配置如下内容:
<persistence-unit name="ejb_entitybean"> <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>
上面的MySqlDS就是mysql-ds.xml中配置的jndi-name。
编写实体类User.java,注解映射规则:
import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class User implements Serializable{ @Id @GeneratedValue private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
@Entity表名该类时一个实体Bean,@ID标记的是生成表后的主键。在Hibernate中,如果某些字段不做说明则默认不会映射到数据库,EJB的JPA刚好相反,一个实体的某些字段不需要定义,默认会映射到数据库中,如果某个字段标明了@Transient注解,则不会映射到数据库中。@GeneratedValue表示自增长ID生成策略,相当于Hibernate中的native主键生成策略。
部署该EJB项目后,可以在数据库中发现生成了user表,详情为:
操作实体Bean
创建一个无状态会话Bean
import javax.ejb.Remote; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; @Stateless @Remote public class UserManagerBean implements UserManager{ @PersistenceContext private EntityManager entityManager; @Override public void addUser(String name){ User user=new User(); user.setName(name); entityManager.persist(user); } }
在会话Bean中,需要用@PersistenceContext来注入javax.persistence.EntityManager,EntityManager
客户端测试:
public class JPAClient { public static void main(String[] args){ InitialContext cxt; UserManager userManager; try { cxt = new InitialContext(); userManager=(UserManager)cxt.lookup("UserManagerBean/remote"); for(int i=0;i<5;i++){ userManager.addUser("Danny"+i); } } catch (NamingException e) { e.printStackTrace(); } } }
执行结果,数据被成功插入到user表中:
【 转载请注明出处——胡玉洋《【EJB学习笔记】——实体Bean》】
相关文章推荐
- Android IPC进程间通讯机制
- jenkins------部署项目到jboss eap下
- Jboss 5启动后只能从本机访问,不能从远程访问的解决办法
- C# Entity Framework中的IQueryable和IQueryProvider详解
- 使用Entity Framework(4.3.1版本)遇到的问题整理
- java EJB 加密与解密原理的一个例子
- php中html_entity_decode实现HTML实体转义
- 部署Java在服务器端的EJB组件的方法
- Java中BEAN与EJB的区别浅析
- Nginx HTTP:413 Request Entity Too Large解决方法
- Python multiprocessing.Manager介绍和实例(进程间共享数据)
- 一个奇怪的异常,SSH使用注解方式
- Jboss 5.1.0 GA配置
- jboss6,7中调整spring的日志输出
- jboss eap standlone安装及配置
- 各种概念POJO、JAVABEAN、DAO、DTO、PO、VO、BO、SSH、EJB
- EJB技术,够重!够杂!
- jboss7-的类依赖管理
- 透过防火墙使用jboss服务
- 使用微软Traffic Manage---实验