JR - 精品文章 - 利用weblogic的数据源作为hibernate的数据源的例子

J2EE

利用weblogic的数据源作为hibernate的数据源的例子
Jagie 原创  (参与分:90219,专家分:2595)   发表:2003-11-03 16:42   更新:2003-11-04 08:03   版本:1.0   阅读:7617
在网上,我们可以看到许多关于hibernate入门的例子,但是好多是让hibernate自己管理连接池的。我在这里给出一个直接利用weblogic 发布的数据源的例子。步骤如下

1.写一个准备用于持久化的类


  1. package com.jagie.business.organization;
  2. import java.io.Serializable;
  3. /**
  4.  * <p>Title: </p>
  5.  * <p>Description: 权限</p>
  6.  * <p>Copyright: Copyright (c) 2003</p>
  7.  * <p>Company: www.jagie.com</p>
  8.  * @author Jagie
  9.  * @version 1.0
  10.  */
  11. public class Permission implements Serializable {
  12.   private String ID;//pk
  13.   private String name;//名称
  14.   private String description;//描述
  15.   private String module;//模块id
  16.   private String power;//权值,$分隔的操作id例如:browse$add$delete$change
  17.   private int scope;//范围,0:本人,1:本单位,2:所有单位
  18.   public static void main(String[] args) {
  19.   }
  20.   public String getID() {
  21.     return ID;
  22.   }
  23.   public void setID(String ID) {
  24.     this.ID = ID;
  25.   }
  26.   public String getName() {
  27.     return name;
  28.   }
  29.   public void setName(String name) {
  30.     this.name = name;
  31.   }
  32.   public String getDescription() {
  33.     return description;
  34.   }
  35.   public void setDescription(String description) {
  36.     this.description = description;
  37.   }
  38.   public String getModule() {
  39.     return module;
  40.   }
  41.   public void setModule(String module) {
  42.     this.module = module;
  43.   }
  44.   public String getPower() {
  45.     return power;
  46.   }
  47.   public void setPower(String power) {
  48.     this.power = power;
  49.   }
  50.   public int getScope() {
  51.     return scope;
  52.   }
  53.   public void setScope(int scope) {
  54.     this.scope = scope;
  55.   }
  56. }


2.编写一个xml文件,名称为Permission.hbm.xml,一定要确保在运行时该xml文件和Permission.class在一起


[pre]<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
    <class name="com.jagie.business.organization.Permission" table="SYS_Permission">
        <id name="ID">
            <generator class="uuid.hex"/>
        </id>
        <property name="name"/>
        <property name="module"/>
        <property name="description"/>
        <property name="power"/>
        <property name="scope"/>
    </class>
</hibernate-mapping>[/pre]

3.在weblogic 上配置连接池和数据源,我的数据源的jndi名字为OilDS


4.修改classpath下的hibernate.properties文件,并保存

a.添加一行:hibernate.dialect net.sf.hibernate.dialect.OracleDialect
b.找到JNDI Datasource这一段,在下面设置hibernate.connection.datasource OilDS
c.找到Plugin ConnectionProvider部分,去掉hibernate.connection.provider_class 
net.sf.hibernate.connection.DatasourceConnectionProvider一句的注释
d.找到 Transaction API部分,去掉hibernate.transaction.manager_lookup_class 
net.sf.hibernate.transaction.WeblogicTransactionManagerLookup一句的注释
e.保存修改

5.在类路径中编写一个jndi.properties文件,为了考虑灵活性,防止硬编码,该文件非常重要,内容如下

java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
java.naming.provider.url=t3://localhost:7001(我的weblogic服务器就在本机上,也许你的需要适当修改)


6.好啦,万事俱备,让我们写一个Test类来测试一下hibernate的威力好了,原码如下.

  1. package com.jagie.business.organization;
  2. import net.sf.hibernate.Session;
  3. import net.sf.hibernate.Transaction;
  4. import net.sf.hibernate.SessionFactory;
  5. import net.sf.hibernate.cfg.Configuration;
  6. import net.sf.hibernate.tool.hbm2ddl.SchemaExport;
  7. import javax.naming.InitialContext;
  8. import javax.naming.Context;
  9. import javax.sql.*;
  10. import java.sql.*;
  11. import java.util.*;
  12. import com.jagie.utils.j2ee.*;
  13. public class Test {
  14.   private static SessionFactory sessions;
  15.   public static void main(String[] args) throws Exception {
  16.     
  17.     Configuration conf = new Configuration().addClass(Permission.class);
  18.     sessions = conf.buildSessionFactory();
  19.    
  20.     //生成并输出sql到文件(当前目录)和数据库
  21.     SchemaExport dbExport = new SchemaExport(conf);
  22.     dbExport.setOutputFile("sql.txt");
  23.     dbExport.create(truetrue);
  24.     //start......
  25.     Session s = sessions.openSession();
  26.     Transaction t = s.beginTransaction();
  27.     //1.用普通使用方式建立对象,填充数据
  28.     Permission p1 = new Permission();
  29.     p1.setName("1111");
  30.     //2.持久化
  31.     s.save(p1);
  32.     //此时p1已经可以在数据库中找到
  33.     t.commit();
  34.     s.close();
  35.   }
  36. }


7.运行该类,即可看到数据库已经建立了一个sys_permission的表,并且插入了一条数据。很简单吧!