EntityBean配置(连接Oracle)

 ------------------EntityBean配置(连接Oracle)-------------
1.One Table
1.1 添加数据源
在: /jboss-4.2.2.GA/docs/examples/jca/oracle-ds.xml,拷贝oracle-ds.xml
到: /jboss-4.2.2.GA/server/all/deploy

配置内容:
<jndi-name>OracleDS</jndi-name>
<connection-url>jdbc:oracle:thin:@localhost:1521:orcl</connection-url>
...
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>scott</user-name>
<password>ffffff</password>
...
<metadata>
   <type-mapping>Oracle10g</type-mapping>
</metadata>

1.2 添加驱动程序
向:/jboss-4.2.2.GA/server/all/lib下添加ojdbc14.jar(一定是Oracle10g驱动,如果是9i添加9i驱动)

1.3 建立一个EJB3.0工程
配置如下:
1.3.1 在src下添加一个文件夹META-INF,在本文件夹下添加两个文件:persistence.xml和persistence_1_0.xsd
persistence.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" 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 persistence_1_0.xsd ">
 <persistence-unit name="oneTable">
  <jta-data-source>java:/OracleDS</jta-data-source>
  <properties>
   <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
                        <!--
   <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9iDialect"/>
    -->
   <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
  </properties>
 </persistence-unit>
</persistence>
--注意:必须添加hibernate.dialect方言,在10g中不添加数据库方言不会出现错误,9i就会出现错误;
--其中
<persistence-unit name="personTable">的name值必须和dao中的实现类中:@PersistenceContext(unitName="personTable")
内容一致;

java:/OracleDS:OracleDS与oracle-ds.xml中的<jndi-name>OracleDS</jndi-name>一致;

1.3.2 建立持久化类

1.3.3 添加Dao实现

注意:
        操作                                    技术
insertUser(User user)                        em.persist(user);
deleteUser(User user)                        em.remove(em.merge(user));
getAllUser()                                 Query query = em.createQuery(eql);
                                      List<User> list = query.getResultList();
getUserByUserId(int userId)                  em.find(User.class, Integer.valueOf(userId));
updateUser(User user)                        em.merge(user);

关键注意删除操作,原因如下:
/**
     *
     * delete user:关键语法em.remove(em.merge(user));
     * 注意:要删除一个对象的时候不能够直接调用em.remove()进行,必须首先进行更新在删除,这样新的session产生
     * 才可以删除,因为原来的session已经关闭,无法执行remove方法,执行更新session被激活,可以进行删除;
     *
     * 原理解释如下:
     * 原文:
     * Hibernate object states有三种状态:Transient、Persistent、Detached。关于Detached,是这么说的:
     * Detached - a detached instance is an object that has been persistent,
     * but its Session has been closed.
     * The reference to the object is still valid, of course, and the detached instance might even be modified in this state.
     * A detached instance can be reattached to a new Session at a later point in time,
     * making it (and all the modifications) persistent again.
     * 译文:
     * 一个detached instance是一个已经持久化的对象,
     * 但是它的Session已经关闭了,
     * 它的引用依然有效,当然,detached instance可能被修改。
     * detached instance能够在以后可以重新附属到一个新的Session,使之能重新序列化。
     *
     * 解决方法:
     * 找到解决办法了,在删除之前把这个Detached instance绑定到当前的Sesssion
     * ,在用当前Sesssion删除此instance。getEntityManager()提供merge方法实现。
     *
     */
1.3.4 打包发布测试

2.Many Table
2.1 共有操作如上;
2.2 多表关联,进行删除要非常注意:
/**ManyToOne或者OneToMany中删除数据比较麻烦;
 * 注意:不能直接使用em.remove(Object)方法,无法删除数据,必须使用以下方法进行删除
 * 1.清除em中的内容
 *   em.clear();
 * 2.从新检索这个对象:
 *   office = em.find(Office.class, office.getOfficeId());
 * 3.删除对象
 *   em.remove(office);
 *
 * 参考原文:
 * 先通过调用EntityManager.clear();方法来把所有的对象都从context清除了.
 * 然后调用System.gc();来让vm执行垃圾回收动作.
 * 最后再次通过EntityManager.find()或其它方法来对要删除对象进行查询.
 * 重新对查询出来的对象再执行删除动作.
 *
 * detete office
*/
public void deleteOffice(Office office) throws Exception {
 System.out.println("-----deleteOffice");
 em.clear();
 office = em.find(Office.class, office.getOfficeId());
 em.remove(office);
}

 

 

 

 

 

------------=========EntityBean(连接MSSQL200) 配过程
1.配置EJB服务器组件
1.1 添加持久化的配置文件
1.1.1 在src下添加一个文件夹META-INF,在本文件夹下添加两个文件:persistence.xml和persistence_1_0.xsd
persistence.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" 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 persistence_1_0.xsd ">
 <persistence-unit name="personTable">
  <jta-data-source>java:/MSSQLDS</jta-data-source>
  <properties>
   <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
  </properties>
 </persistence-unit>
</persistence>
--其中<persistence-unit name="personTable">的name值必须和dao中的实现类中:@PersistenceContext(unitName="personTable")
内容一致;

1.1.2 添加数据源配置文件,本例使用MSSQL2000,添加数据源,使用sql2005的驱动,从D:/Software/jboss-4.2.2.GA/docs/examples/jca拷贝mssql-ds.xml
到D:/Software/jboss-4.2.2.GA/server/all/deploy下,
具体参数设置:
    <jndi-name>MSSQLDS</jndi-name>
    <connection-url>jdbc:sqlserver://localhost:1433;DatabaseName=kevinb</connection-url>
    <driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
    <user-name>sa</user-name>
    <password>ffffff</password>
...

1.1.3 向JBoss添加数据库驱动
向D:/Software/jboss-4.2.2.GA/server/all/lib,添加驱动sqljdbc.jar(MSSQL2005驱动)

1.2 新建一个EJB3.0工程
1.3 添加com.dao 和com.bean包,同时在bean中添加持久化POJO对象(如:Person);
在com.dao中添加一个无状态的session bean,在接口中添加相应的持久化操作方法:
如PersonDao:
    public boolean insertPerson(String name,String sex,int age,Date birthday);
    public String getPersonNameByPersonId(int personId);
    public Person getPersonByPersonId(int personId);
在PersonDaoBean:
中添加相应方法的操作;
1.4 打包发布.jar
向D:/Software/jboss-4.2.2.GA/server/all/deploy下发布.jar文件,确保启动过程没有任何错误,同时可到数据库版本号和驱动版本号;

2. 配置客户端文件
2.1 添加一个web project;
2.2 向lib下添加entityBean.jar和jbossall-client.jar
2.3 处理页面信息,调用ejb组建中的dao操作,向数据库中持久化数据和查询数据;
<%
        Properties p = new Properties();
        p.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
        p.setProperty("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
        p.setProperty("java.naming.provider.url","localhost:1099");
       
        Context ct = new InitialContext(p);
       
        try{
           PersonDao persondao = (PersonDao) ct.lookup("PersonDaoBean/remote");
           SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
           out.println("<br>---------persondao.insertPerson()--------");
           persondao.insertPerson("kevinb","M",28,formatter.parse("1980-10-09"));
          
...
2.4 发布工程,进行测试;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值