Ejb3.0--4

1,创建jboss数据源,mysql-ds.xml
<?xml version="1.0" encoding="utf-8"?>

<!-- $Id: mysql-ds.xml,v 1.3.2.3 2006/02/07 14:23:00 acoliver Exp $ -->
<!-- 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>chenzhq_mysql</jndi-name>
<connection-url>jdbc:mysql://192.168.40.10:3306/school</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>root</password>
<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>

2.编写persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistences>
<persistence-unit name="student">
<!--
<jta-data-source>java:chenzhq_oracle_datasource</jta-data-source>
<class>com.chenzhq.ejb.entity.Student</class>
-->
<jta-data-source>java:/chenzhq_mysql</jta-data-source>
<class>com.chenzhq.ejb.entity.Student</class>
</persistence-unit>
</persistences>

3.写个Entity-bean
package com.chenzhq.ejb.entity;

import java.io.Serializable;

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


@Entity//Entity标记声明student是个实体bean
@Table (name="student")//for mysql 注册映射表为student
//@Table (name="test.student")//for oracle
public class Student implements Serializable {//注意必须实现可序列化,否则在你调用Remote接口的时候就会报错。

/**
*
*/
private static final long serialVersionUID = 1L;
private int id;
private String name;
private String sex;
private String classes;
private int points;

@Column (name="classes")//映射到classes列
public String getClasses() {
return classes;
}
public void setClasses(String classes) {
this.classes = classes;
}
@Id//声明student的主键
//@GeneratedValue
@Column (name="id")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column (name="name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column (name="points")
public int getPoints() {
return points;
}
public void setPoints(int points) {
this.points = points;
}
@Column (name="sex")
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}

}

4,在写个sessionbean调用处理实体bean,ejb3.0中entitybean就像个pojo
package com.chenzhq.ejb.session;

import javax.ejb.Init;
import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateful;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.FlushModeType;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;

import com.chenzhq.ejb.entity.Student;

@Stateful
@Remote ({ProcessStudentRemote.class})
@Local ({ProcessStudentLocal.class})


public class ProcessStudent implements ProcessStudentLocal,ProcessStudentRemote {



//@PersistenceUnit (unitName="student") private static EntityManagerFactory emf;
/* 这里面的大多数方法是我简化写的,只是提及一下,深入了解的化买本书吧!
* //获得对实体bean的上下文引用,unitName对应这Persistence.xml中的uintName
* type可以是EXTEND,或是TRANSACTION,EXTEND的相对与TRANSACTION的生存的时间长
*
*
*/
@PersistenceContext (unitName="student",type=PersistenceContextType.EXTENDED)
private static EntityManagerFactory emf;
private static EntityManager em;

@Init
public void init(){
System.out.println(emf);
}



public boolean createStudent(Student s){
System.out.println(s);
em = emf.createEntityManager();
/*
* 如果你的EntityManager是使用EntityManagerFactoty生成的,那么joinTransaction是必须的
*
*/
em.joinTransaction();
em.setFlushMode(FlushModeType.COMMIT);
System.out.println(em.toString().toUpperCase());
if(em.isOpen()){
//em.merge(s);
em.persist(s);//持久化一个student
em.flush();

}else{
throw new RuntimeException("the entity manager is closed");
}

return true;
}

public boolean queryStudent(Object o){
em = emf.createEntityManager();
em.joinTransaction();
em.setFlushMode(FlushModeType.COMMIT);
System.out.println(em.toString().toUpperCase());
System.out.println(em.find(Student.class, o).getId());
try{
/*
* find和reference的区别再用,如果没有发现find返回null,而reference出现异常。
*/
Student s = em.getReference(Student.class, o);
System.out.print(s.getName());
}catch(Exception e){
e.printStackTrace();
}
return true;
}

public boolean removeStudent(Object o){
em = emf.createEntityManager();
em.joinTransaction();
em.setFlushMode(FlushModeType.COMMIT);
System.out.println(em.toString().toUpperCase());
Student s = em.find(Student.class, o);
em.remove(s);
em.flush();
em.clear();
return true;
}

public boolean updateStudent(String name,Object o){
em = emf.createEntityManager();
em.joinTransaction();
em.setFlushMode(FlushModeType.COMMIT);
System.out.println(em.toString().toUpperCase());
Student s = em.find(Student.class, o);
/*
* 因为是managed的Bean所以容器会将改变的bean同步到database的。
*/
s.setName(name);
return true;

}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值