`
1028826685
  • 浏览: 939088 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类

使用会话Bean+实体bean+数据源

 
阅读更多

下面接着总结Ejb使用会话Bean+实体bean+数据源开发流程:

先新建一个Java项目导入\jboss-4.2.3.GA\client

第一步:配置数据源
在\jboss-4.2.3.GA\docs\examples\jca目录下mssql-ds.xml(数据源配置文件)
 
配置内容如下:
<?xml version="1.0" encoding="UTF-8"?>

<!-- $Id: mysql-ds.xml 71535 2008-04-01 07:05:03Z adrian@jboss.org $ -->
<!--  Datasource config for MySQL using 3.0.9 available from:
http://www.mysql.com/downloads/api-jdbc-stable.html
-->

<datasources>
  <local-tx-datasource>
    <jndi-name>liyongMySql</jndi-name><!--JNDI名称在persistence.xml文件中配置--->
    <connection-url>jdbc:mysql://localhost:3306/entitydatabse?useUnicode=true&amp;characterEncoding=UTF-8</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>root</user-name>
    <password>liyong</password>
<min-pool-size>3</min-pool-size>
    <max-pool-size>100</max-pool-size>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
    <!-- should only be used on drivers after 3.22.1 with "ping" support
    <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker</valid-connection-checker-class-name>
    -->
    <!-- sql to call when connection is created
    <new-connection-sql>some arbitrary sql</new-connection-sql>
      -->
    <!-- sql to call on an existing pooled connection when it is obtained from pool - MySQLValidConnectionChecker is preferred for newer drivers
    <check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
      -->

    <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
    <metadata>
       <type-mapping>mySQL</type-mapping>
    </metadata>
  </local-tx-datasource>
</datasources>
然后将这个数据源配置文件copy到jboss-4.2.3.GA\server\default\deploy进行发布

第二步:
在src目录下新建META-INF再新建一个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">
<!-- 以transaction-type下是 事务提交类型有两种事务:第一、本地事务(在同一个数据库中完成事务)  第二、全局事务(在不同数据库中需要在同一事务中完成不同数据库的操作)-->
<persistence-unit name="person" transaction-type="JTA"><!-- EJB使用全局事务 -->
             <!---在数据源中配在的数据源JNDI名称-->
<jta-data-source>java:liyongMySql</jta-data-source>
<properties>
<!-- 显示最终执行的SQL -->
<property name="hibernate.show_sql" value="true"/>
<!-- 格式化显示的SQL -->
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>

第三步:编写实体bean  Persion.java
package com.liyong.bean;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Persion implements Serializable{

/**
*
*/
private static final long serialVersionUID = 1L;
private Integer id;
private String name;

public Persion(){}
public Persion(String name) {
this.name=name;
}
@Id @GeneratedValue//默认为auto
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(length=20)
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;
Persion other = (Persion) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}

}

第四步:编写一个会话bean PersionService.java和接口IPersionService.java

接口:
public interface IPersionService {
public void save(Persion persion);
public Persion getPersion(Integer persionid);
public List<Persion> getAllPersions();
public void update(Persion persion);
public void delete(Persion persion);

}
实现类:

package com.liyong.service;

import java.util.List;

import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import com.liyong.bean.Persion;

@Stateless
@Remote(IPersionService.class)

public class PersionService implements IPersionService{

@PersistenceContext(unitName="person") EntityManager manager;

public void delete(Persion persion) {
manager.remove(persion);
}

@SuppressWarnings("unchecked")
public List<Persion> getAllPersions() {

return manager.createQuery("select o from Persion o").getResultList();
}

public Persion getPersion(Integer persionid) {

return manager.find(Persion.class, persionid);
}

public void save(Persion persion) {
manager.persist(persion);

}

public void update(Persion persion) {

manager.merge(persion);

}

}


第五步:编写一个单元测试PersionTest.java

package junit.test;


import java.util.List;

import javax.naming.InitialContext;
import org.junit.BeforeClass;
import org.junit.Test;

import com.liyong.bean.Persion;
import com.liyong.service.IPersionService;

public class PersionTest {

private static IPersionService persionService;

@BeforeClass
public static void setUpBeforeClass() throws Exception {
try {
InitialContext ctx = new InitialContext();
persionService = (IPersionService) ctx.lookup("PersionService/remote");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

@Test
public void testSave(){
try {
Persion persion=new Persion("ly");
persionService.save(persion);

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void testGetPersoin(){

System.out.println(persionService.getPersion(1).getName());
}
@Test
public void testUpdate(){
Persion persion=persionService.getPersion(1);
persion.setName("xxxx");
persionService.update(persion);
}
@Test
public void testGetAllPersions(){
List<Persion> persions=persionService.getAllPersions();
for(Persion persion:persions){
System.out.println(persion.getName());
}
}
}

对了还需要一个jndi.properties(这个可以参考前面HelloWord)

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost\:1099

我们使用build.xml来打包编译

<?xml version="1.0"?>

<!-- ======================================================================= -->
<!-- EJB3 HelloWorld build file                                                       -->
<!-- ======================================================================= -->

<project name="EjbEntityBean" default="ejbjar" basedir="..">

<property environment="env" />
<property name="app.dir" value="${basedir}\EjbEntityBean" /><!--EjbEntityBean是项目名称-->
<property name="src.dir" value="${app.dir}\src" />
<property name="jboss.home" value="${env.JBOSS_HOME}" />
<property name="jboss.server.config" value="default" />
<property name="build.dir" value="${app.dir}\build" />
<property name="build.classes.dir" value="${build.dir}\classes" />

<!-- Build classpath -->
<path id="build.classpath">
<fileset dir="${jboss.home}\client">
<include name="*.jar" />
</fileset>
<pathelement location="${build.classes.dir}" />
</path>

<!-- =================================================================== -->
<!-- Prepares the build directory                                        -->
<!-- =================================================================== -->
<target name="prepare" depends="clean">
<mkdir dir="${build.dir}" />
<mkdir dir="${build.classes.dir}" />
</target>

<!-- =================================================================== -->
<!-- Compiles the source code                                            -->
<!-- =================================================================== -->
<target name="compile" depends="prepare" description="编绎">
<!--includes筛选哪些包下的类被编译-->
<javac srcdir="${src.dir}" destdir="${build.classes.dir}" debug="on" deprecation="on" optimize="off" includes="com/**">
<classpath refid="build.classpath" />
</javac>
</target>

<target name="ejbjar" depends="compile" description="创建EJB发布包">
<jar jarfile="${app.dir}\EjbEntityBean.jar">
<fileset dir="${build.classes.dir}">
<include name="com/**/*.class" />
</fileset>
<!--包含这个persistence.xml文件-->
<metainf dir="${src.dir}\META-INF"></metainf>
</jar>
</target>

<target name="deploy" depends="ejbjar">
<copy file="${app.dir}\EjbEntityBean.jar" todir="${jboss.home}\server\${jboss.server.config}\deploy" />
</target>

<!-- =================================================================== -->
<!-- Cleans up generated stuff                                           -->
<!-- =================================================================== -->
<target name="clean">
<delete dir="${build.dir}" />
<delete file="${jboss.home}\server\${jboss.server.config}\deploy\HelloWorld.jar" />
</target>

</project>

分享到:
评论

相关推荐

    Eclipse+Jboss EJB技术 会话Bean

    本实验以"广东工业大学Java EE Web编程技术课程"为背景,通过集成开发环境Eclipse和应用服务器JBoss,来实践会话Bean的创建和使用。 首先,Eclipse是一款广泛使用的Java IDE,它提供了丰富的工具和插件,支持Java ...

    采用的是servlet+JSP+JPA的学生信息管理系统

    在本系统中,JPA被用来处理学生信息的增删改查操作,通过实体类和注解定义数据模型,JPA会自动完成与数据库的交互。 具体来说,JPA通过实体类来表示数据库中的表,实体类的属性对应表的字段。通过@Entity注解标记...

    servlet+jsp+bean+dao

    在Java Web应用中,Bean通常用来存储用户会话中的数据或者作为模型层的实体类,便于在Servlet、JSP之间传递数据。 **DAO(Data Access Object)**: DAO模式是一种设计模式,用于在业务逻辑和数据访问层之间创建一...

    BBS论坛课程设计结合HTML+JAVA bean+java servlet开发模式,包括SQL数据库设计,数据库备份,源代码

    在这个BBS系统中,JAVA bean被用来处理用户的请求,比如验证用户输入、管理会话状态以及执行业务逻辑。例如,一个用户登录的JAVA bean可能会包含检查用户名和密码的函数,确保数据的正确性。 Java Servlet则是在...

    详解Spring中Bean的生命周期和作用域及实现方式

    8. 使用Bean:在这个阶段,Bean已经实例化,并且已经可以使用。 9. 销毁:在这个阶段,Bean已经实例化,并且已经销毁。 在整个生命周期中,Spring提供了多种方式来实现Bean的初始化,例如使用init-method参数、...

    EJB三种bean的开发模式

    EJB(Enterprise JavaBeans)是Java企业级应用开发的核心组件之一,主要...实体Bean处理数据存储,会话Bean封装业务逻辑,消息驱动Bean则用于异步处理。理解并熟练掌握这些概念对于开发高效的企业级Java应用至关重要。

    EJB实体Bean学习

    BMP实体Bean通常使用`@Stateless`或`@Stateful`注解,以定义其会话行为。 **CMP(Container Managed Persistence)**: 相比之下,CMP是由容器(应用服务器)管理的,开发者无需关心底层的数据库交互细节。容器负责...

    spring+hibernate解决多数据源问题3.pdf

    最后,为了能够使Spring容器管理和注入这些配置好的数据源,需要在Spring的配置文件中使用相应的Bean标签注册每个数据源和SessionFactory的Bean,并通过依赖注入的方式将数据源注入到相应的SessionFactory中。...

    ejb3实例(包括sessionbean和entitybean)

    无状态会话Bean适用于那些不需持久化用户会话数据的场景,而有状态会话Bean则允许维护与特定客户端关联的数据。在EJB 3中,开发者可以使用注解(@Stateless或@Stateful)轻松地创建和管理这两种类型的Bean。 Entity...

    通过Spring Boot配置动态数据源访问多个数据库的实现代码

    在DataSourceConfig类中,getDataSource方法用于创建数据源,该方法使用了DataSourceBuilder来创建数据源。DataSourceBuilder是一个工厂类,用于创建数据源,type方法用于指定数据源的类型。 会话工厂的创建 会话...

    Servlet+EJB3源代码

    其中,实体Bean代表持久化的业务数据,会话Bean负责业务逻辑,而消息驱动Bean则用于处理JMS消息。 1. 实体Bean(Entity Beans):在EJB3中,实体Bean通常使用JPA(Java Persistence API)进行持久化,通过注解如`@...

    87180624 邱俊伟.zip

    EJB可以分为几种类型,包括无状态会话Bean、有状态会话Bean和实体Bean。在这个项目中,使用了有状态会话Bean。 【有状态会话Bean】有状态会话Bean(Stateful Session Bean,SFSB)在JavaEE中扮演着维持会话状态的...

    jbuilder8+weblgoic7开发EJB的经典教程(英文).pdf

    #### 使用实体 Bean 的工作流程 ##### 创建实体 Bean - **导入数据库模式**:从现有数据库导入模式,以简化实体 Bean 的创建过程。 - **生成实体 Bean**:根据数据库表结构自动生成实体 Bean 类。 - **创建会话 ...

    自己编写的EJB源代码

    会话bean的主要职责是封装应用的业务逻辑,它们可以被多个客户并发访问,但每个客户拥有自己的会话bean实例,确保数据的一致性和安全性。会话bean分为无状态会话bean(Stateless Session Bean)和有状态会话bean...

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

    开发者只需在实体Bean上添加相应的注解,如`@Stateless`或`@Stateful`,就可以定义无状态或有状态会话Bean。同时,通过`@Remote`或`@Local`注解可以声明远程或本地接口,实现业务逻辑的调用。 接下来,我们关注如何...

    EJB 3.0实例教程(pdf)

    - **PERSISTENCE.XML配置**:了解如何使用PERSISTENCE.XML文件来配置实体Bean,包括指定数据源和其他相关设置。 - **数据源配置**: - **MySQL数据源**:提供MySQL数据源的具体配置步骤。 - **SQL Server 2000数据...

    java EJB3实现三种Bean设计文档.doc

    在这个例子中,配置了一个名为`EricDs`的数据源,连接到本地MySQL数据库`j2ee`,并设置了相应的数据库连接信息。 - **JMS连接工厂**:JBoss默认提供了一个名为`QueueConnectionFactory`的JMS连接工厂,无需手动配置...

    EJB使用范例

    对于JPA实体bean,还需要persistence.xml来定义数据源和实体类。 2. **bean类**:EJB组件的实现类需要使用特定的注解,如`@Stateless`、`@Stateful`、`@Entity`或`@MessageDriven`,以表明它们的角色。同时,接口...

    EJB3.0详解

    一个基于Struts+EJB3.0的应用通常具有三层架构:表现层(Presentation Layer)、业务逻辑层(Business Logic Layer,由EJB3.0的会话Bean构成)和数据访问层(Data Access Layer,由实体Bean组成)。这种结构确保了...

    JAVA Bean 课程.rar_Java bean

    - **会话Bean**、**实体Bean**和**消息驱动Bean**:EJB定义了三种类型的Bean,分别处理不同的业务需求,如短暂交互、持久化数据和异步通信。 6. **Java Bean 的局限性** - **过于简单**:Java Bean的设计相对基础...

Global site tag (gtag.js) - Google Analytics