`

myeclipse+jboss开发EJB3.0之实体Bean

    博客分类:
  • EJB
阅读更多
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&amp;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开发的EJB3.0 大型电子商务网站网上书店

    《Myeclipse+JBoss开发的EJB3.0 大型电子商务网站网上书店》 在信息技术领域,Java EE(企业版Java)是用于构建分布式、多层的企业级应用程序的标准框架。EJB(Enterprise JavaBeans)是Java EE的核心组件之一,它...

    MyEclipse+JBoss开发EJB.doc

    总的来说,MyEclipse结合JBoss提供了一个高效、便捷的EJB开发环境,使开发者能够轻松地利用EJB技术来构建企业级应用。无论是新手还是经验丰富的开发者,都可以从中受益,实现更高质量的Java EE项目开发。

    Myeclipse+JBoss开发的EJB3.0 多对多程序

    在本项目中,"Myeclipse+JBoss开发的EJB3.0 多对多程序" 是一个基于Java EE平台的课程实验,利用EJB3.0(Enterprise JavaBeans 3.0)规范和Myeclipse集成开发环境,以及JBoss应用服务器,实现了数据模型中的多对多...

    Myeclipse+JBoss开发的EJB3.0 一对多程序

    在MyEclipse中,开发者可以创建EJB3.0项目,编写实体Bean和会话Bean,然后利用MyEclipse的部署工具将其打包成JAR或EAR文件,最后通过JBoss的管理控制台或者命令行工具部署到JBoss服务器上。 **第三次上机作业解析**...

    EJB3.0+JBOSS+MyEclipse初体验(完整代码和过程)

    你将找到一个完整的示例,涵盖了上述所有步骤,包括具体的代码片段和执行过程,这对于初学者来说是一个很好的起点,可以快速理解并实践EJB 3.0在JBOSS和MyEclipse环境下的开发流程。通过这个初体验,你可以了解到...

    Myeclipse7.0+JBoss5.0测试EJB3.0环境搭建过程源代码

    本教程将详细讲解如何利用MyEclipse7.0集成开发环境和JBoss5.0应用程序服务器来搭建EJB3.0的测试环境,以及相关的源代码分析。 首先,EJB3.0是EJB规范的一个重要版本,引入了许多改进,使得开发更加简单和灵活。EJB...

    yeclipse7.0+JBoss5.0测试EJB3.0环境搭建过程详解

    ### yeclipse7.0+JBoss5.0测试EJB3.0环境搭建过程详解 在深入探讨如何在yeclipse7.0与JBoss5.0环境下构建和测试EJB3.0应用之前,让我们先了解一些背景知识。EJB(Enterprise JavaBeans)是Java平台的一部分,用于...

    myEclipse+Jboss+mysql+EJB

    【标题】"myEclipse+Jboss+mysql+EJB"是一个综合性的开发环境配置,它涵盖了四个关键组件:myEclipse、Jboss、mysql和EJB。这些组件在IT行业中都扮演着重要的角色,尤其在企业级Java应用的开发与部署上。 ...

    jboss ejb3.0开发介绍

    本文将详细介绍如何使用 jBoss AS 4.2 和 MyEclipse 6.5 进行 EJB 3.0 的实体 Bean 开发。 #### 二、环境搭建 1. **安装开发工具** - **MyEclipse 6.5**: 一个基于 Eclipse 的集成开发环境,支持 Java 应用程序...

    myeclpise+jboss开发EJB

    在IT领域,尤其是对于Java开发者而言,掌握如何使用MyEclipse和JBoss开发企业级Java Bean(EJB)是至关重要的技能。MyEclipse作为一款功能丰富的集成开发环境(IDE),不仅支持Java开发,还提供了对EJB、Web服务、...

    jboss+myeclipse+ejb案例

    9. **ejb3.0改进**:在JBoss 5.0及更高版本中,EJB 3.0引入了许多改进,如注解驱动的编程模型,使得开发更加简洁。 10. **测试**:MyEclipse提供了EJB测试工具,可以方便地进行单元测试和集成测试,确保EJB功能正确...

    jboss7.1.1+ejb3.0+MySQL数据源配置

    《JBoss 7.1.1 + EJB 3.0 + MySQL 数据源配置详解》 在企业级Java应用开发中,JBoss Application Server(简称JBoss AS)是广泛使用的开源应用服务器,版本7.1.1是其稳定且功能强大的一个版本。EJB(Enterprise ...

    MyEclipse_JBoss4.0开发EJB组件环境配置(入门调试级)

    **MyEclipse与JBoss 4.0集成开发EJB组件环境配置详解** 在Java企业级应用开发中,Enterprise JavaBeans (EJB) 是一种核心技术,它为开发者提供了构建可伸缩、安全且可移植的分布式应用程序的能力。MyEclipse作为一...

    EJB3.0详解

    在开发EJB3.0应用时,通常需要一个支持EJB的服务器,如Jboss、WebLogic或Glassfish等。Tomcat服务器由于定位轻量级,不支持EJB。开发者可以使用集成开发环境(IDE),如Eclipse或MyEclipse,它们提供了对EJB3.0的...

    MyEclipse+EJB3+JBoss4部署EBJ+web项目HelloWorld详解

    ### MyEclipse+EJB3+JBoss4部署EJB+Web项目HelloWorld详解 #### 一、环境搭建 ##### 1. 安装 JDK 1.6 在开始之前,请确保您的开发环境中已经安装了 Java 开发工具包 (JDK) 1.6 版本。如果尚未安装,请访问 Oracle ...

    JSF1.2+EJB3.0实现的一个项目实例

    源码说明: &lt;br&gt; 1)本项目开发环境 操作系统: Windows xp sp2 JDK环境: JDK1.6.0 IDE工具: MyEclipse6.0GA 数据库: Mysql 5.0.41 字符集设置:utf-8 EJB容器: JBoss4.2.1GA Web...

    EJB3.0学习心得

    - **实体 Bean**: 在 EJB 3.0 中,实体 Bean 被替换成了 JPA (Java Persistence API),这是一个更为灵活的对象关系映射 (ORM) 解决方案。 - **查询语言**: EJB 3.0 引入了 EJB-QL 和 JPA 的 JPQL,支持更为丰富的...

    利用Myeclipse6和jboss开发EJB3入门实例

    ### 利用Myeclipse 6与JBoss开发EJB3入门实例详解 #### 一、概述 本文将详细介绍如何使用Myeclipse 6和JBoss来开发一个EJB3入门级的应用程序。通过本教程,您将学习到EJB3的基本概念、所需开发工具的配置、以及...

    ejb3.rar_EJB3 struts2_MyEclipse EJ_ejb strut jboss_jboss_struts2

    EJB3 struts2_MyEclipse EJ_ejb strut jboss_jboss_struts2"表明这是一个关于企业级Java开发的项目,主要涉及到EJB(Enterprise JavaBeans)3.0、Struts2框架、MyEclipse集成开发环境以及JBoss应用服务器。...

Global site tag (gtag.js) - Google Analytics