myeclipse+jboss开发EJB3.0之实体Bean
一.
Jboss有一个默认的数据源DefaultDS,他使用Jboss内置的HSQLDB数据库。实际应用中你可能使用不同的数据库,如MySql、MsSqlServer、Oracle等。各种数据库的数据源配置模版你可以在[Jboss安装目录]\docs\examples\jca 目录中找到,默认名称为:数据库名+ -ds.xml 。不管你使用那种数据库都需要把他的驱动类Jar 包放置在[Jboss 安装目录]\server\all\lib 目录下,放置后需要启动Jboss服务器。
本教程使用的数据库是mysql-5.0.22 和Ms Sql Server2000 ,使用驱动Jar 包如下:
Mysql :mysql-connector-java-3.1.13-bin.jar
Ms Sql Server2000 :msbase.jar, mssqlserver.jar, msutil.jar
下面介绍Mysql的数据源配置,数据源配置文件的取名格式必须为 xxx–ds.xml ,如:mysql-ds.xml ,mssqlserver-ds.xml,oracle-ds.xml 。
数据源文件配置好后需要放置在[jboss安装目录]/server/config-name/deploy目录下,本教程采用的配置名为:all,所以路径为[jboss安装目录]/server/all/deploy目录下面定义一个名为DefaultMySqlDS的Mysql数据源,连接数据库为foshanshop,数据库登录用户名为root,密码为123456,数据库驱动类为org.gjt.mm.mysql.Driver。大家只需修改数据库名及登录用户名密码就可以直接使用。
mysql-ds.xml
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>DefaultMySqlDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/foshanshop?
useUnicode=true&characterEncoding=GBK
</connection-url>
<driver-class>org.gjt.mm.mysql.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>
二.
1. 配置数据源并放置在[jboss 安装目录]/server/all/deploy 目录,把数据库驱动Jar 包放置在[Jboss安装目录]\server\all\lib 目录下,放置后需要重启Jboss服务器。如果数据源已经存在就不需要配置。
2. 配置persistence.xml文件,在文件中指定使用的源据源及各项参数。
3. 把实体类和persistence.xml文件打成Jar,persistence.xml 放在jar 文件的META-INF目录
三.
开发前先介绍需要映射的数据库表
person
字段名称 字段类型属性 描述
personid (主键) Int(11) not null 人员ID
PersonName Varchar(32) not null 姓名
sex Tinyint(1) not null 性别
age Smallint(6) not null 年龄
birthday datetime null 出生日期
建立与Person表进行映射的实体Bean
package com.foshanshop.ejb3.bean;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.GenerationType;
@SuppressWarnings("serial")
@Entity
@Table(name = "Person")
public class Person implements Serializable{
private Integer personid;
private String name;
private boolean sex;
private Short age;
private Date birthday;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Integer getPersonid() {
return personid;
}
public void setPersonid(Integer personid) {
this.personid = personid;
}
@Column(nullable=false,length=32)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(nullable=false)
public boolean getSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
@Column(nullable=false)
public Short getAge() {
return age;
}
public void setAge(Short age) {
this.age = age;
}
@Temporal(value=TemporalType.DATE)
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
为了使用上面的实体Bean,我们定义一个Session Bean作为他的使用者。下面是Session Bean 的业务接,他定义了两个业务方法insertPerson和getPersonNameByID,insertPerson用作添加一个Person,getPersonNameByID 根据personid获取人员的姓名。
PersonDAO.java
package com.foshanshop.ejb3;
import java.util.Date;
public interface PersonDAO {
public boolean insertPerson(String name, boolean sex,short age, Date birthday);
public String getPersonNameByID(int personid);
}
下面是Session Bean的实现
PersonDAOBean.java
package com.foshanshop.ejb3.impl;
import java.util.Date;
import java.util.List;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import com.foshanshop.ejb3.PersonDAO;
import com.foshanshop.ejb3.bean.Person;
@Stateless
@Remote (PersonDAO.class)
public class PersonDAOBean implements PersonDAO {
@PersistenceContext
protected EntityManager em;
public String getPersonNameByID(int personid) {
Person person = em.find(Person.class, Integer.valueOf(personid));
return person.getName();
}
public boolean insertPerson(String name, boolean sex,short age, Date birthday) {
try {
Person person = new Person();
person.setName(name);
person.setSex(sex);
person.setAge(Short.valueOf(age));
person.setBirthday(birthday);
em.persist(person);//添加数据用persist
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
public Person getPersonByID(int personid) {
return em.find(Person.class, personid);
}
public boolean updatePerson(Person person) {
try {
em.merge(person);//更新数据用merge
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
public List getPersonList() {
Query query = em.createQuery("from Person order by personid asc");
List list = query.getResultList();
return list;
}
}
上面我们使用到了一个对象:EntityManager em,EntityManager 是由EJB容器自动地管理和配置的,不需要用户自己创建,他用作操作实体Bean。关于他的更多介绍请参考持久化实体管理器EntityManager。
上面em.find()方法用作查询主键ID 为personid的记录。em.persist()方法用作向数据库插入一条记录。
大家可能感觉奇怪,在类中并没有看到对EntityManager em进行赋值,后面却可以直接使用他。这是因为在实体Bean加载时,容器通过@PersistenceContext注释动态注入EntityManager 对象。
如果persistence.xml文件中配置了多个不同的持久化内容。你需要指定持久化名称注入EntityManager 对象,可以通过@PersistenceContext注释的unitName属性进行指定,例:@PersistenceContext(unitName="foshanshop")EntityManager em;
如果只有一个持久化内容配置,不需要明确指定。
下面是persistence.xml文件的配置:
<persistence>
<persistence-unit name="foshanshop">
<jta-data-source>java:/DefaultMySqlDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
</properties>
</persistence-unit>
</persistence>
把他打成
Jar 文件并发布到Jboss中。
在发布前请检查persistence.xml 文件中使用的数据源是否配置
出现下面这种异常往往是没在数据库中建立foshanshop表或没在数据源中加入
<property name="dialect">
org.hibernate.dialect.SQLServerDialect
</property>
这样的话
ObjectName: persistence.units:jar=EntityBean.jar,unitName=foshanshop
State: FAILED
Reason: javax.persistence.PersistenceException: org.hibernate.HibernateException:
Hibernate Dialect must be explicitly set
I Depend On:
jboss.jca:service=DataSourceBinding,name=DefaultMySqlDS
Depends On Me:
jboss.j2ee:jar=EntityBean.jar,name=PersonDAOBean,service=EJB3
当实体bean 发布成功后,我们可以查看数据库中是否生成了Person 表,下面是JSP 客户端代码:EntityBeanTest.jsp
<%@ page contentType="text/html; charset=GBK"%>
<%@ page import="com.foshanshop.ejb3.PersonDAO,
javax.naming.*,
java.util.Properties,
java.util.Date,
java.text.SimpleDateFormat"%>
<%
Properties props = new Properties();
props.setProperty("java.naming.factory.initial",
"org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
InitialContext ctx = new InitialContext(props);
try {
PersonDAO persondao = (PersonDAO) ctx.lookup("PersonDAOBean/remote");
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
persondao.insertPerson("小数", true, (short)22,formatter.parse("1985-10-17"));//添加一个人
out.println(persondao.getPersonNameByID(1)); //取personid为1的人
} catch (Exception e) {
out.println(e.getMessage());
}
%>
上面代码往数据库添加一个人,然后取personid 为1 的人员姓名。
分享到:
相关推荐
MyEclipse+JBoss开发EJB.doc
课堂实验做过的EJB3.0一对多的程序,希望有帮助
自己课堂实验做过的EJB3.0的多对多程序,希望有帮助
Myeclipse7.0+JBoss5.0测试EJB3.0环境搭建过程源代码
myEclipse+Jboss+mysql+EJB
课堂实验,有需求分析和代码,做得很简单的,不过应该还是有点小用处的吧,希望对大家有帮助
在Myeclipse,基于JBOSS EJB3.0实现了EJB3.0的初次体验,确实比EJB2.0方便了许多。文中有完整的过程和代码。
MyEclipse+JBoss开发部署jsp和servlet入门的源码
jboss+myeclipse+ejb案例一个入门例子,jboss5.0下运行
myeclipse+jboss5+shh 搭建框架
Java+MyEclipse+MySQL+JBOSS环境配置
jboss7.1.1+ejb3.0+MySQL数据源配置,包含项目源码,可直接导入MyEclipse
MyEclipse+JBoss配置说明:1. 请从获取VSS插件 路径为:CPF-1_new/cpf-maintain/中油境外/doc/工程配置说明/ org.vssplugin_1.6.1.zip
源码说明: <br> 1)本项目开发环境 操作系统: Windows xp sp2 JDK环境: JDK1.6.0 IDE工具: MyEclipse6.0GA 数据库: Mysql 5.0.41 字符集设置:utf-8 EJB容器: JBoss4.2.1GA Web...
MyEclipse EJB 3.0 Tutorial 22 Table of Contents 22 1. Introduction 22 2. Suggested Audience 22 3. System Requirements 23 4. Getting Started 23 5. Creating a Stateless Session Bean 26 6. Testing our ...
在MyEclipse中使用jboss服务器搭建Strutys2.0架构下的步骤,本文中引入工程请在:一个简单的Struts2框架(可直接导入)中下载,下载后可以直接导入
EJB3.0规范和EJB3.0经典入门(含源码) 本材料适合Java程序员、项目经理和系统架构师。学习本材料,您不需要EJB2.x知识,如果具备一些Web和jdbc知识,学习效率会更快些。学习本材料,初级Java程序员应在1个月左右,...
J2EE Eclipse+MyEclipse+tomcat开发环境
主要是讲解myeclipse 下,利用weblogic服务器,开发EJB 应用程序。每一步骤都有截图参考。很好的入门资料
1,下载安装JDK1.6; 2,下载安装MyEclispse8.5; 3,下载安装JBoss4; 4,在MyEclispse8.5环境下配置JBoss4;...5,新建一个EJB3项目;...6,新建一个远程的无状态的SessionBean; 远程接口代码如下: