jboss + hibernate jndi的配置

来源:互联网 发布:js 图片跨域 编辑:程序博客网 时间:2024/05/16 19:55

在hibernate官方网站有相关配置方法,搜索关键字jboss 

1.    首先创建一个java工程

2.    添加hibernate功能(本工程已添加)

3.    采用jndi数据源,将hibernate.cfg.xml配置如下:(采用了oracle数据库)

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE hibernate-configuration PUBLIC

          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

 

<!-- Generated by MyEclipse Hibernate Tools.                   -->

<hibernate-configuration>

<session-factory>

    <property name="myeclipse.connection.profile">infotest</property>

    <property name="connection.url">

       jdbc:oracle:thin:@203.134.243.46:1521:infotest

    </property>

    <property name="connection.username">vote</property>

    <property name="connection.password">hc360</property>

    <property name="connection.driver_class">

       oracle.jdbc.driver.OracleDriver

    </property>

    <property name="dialect">

       org.hibernate.dialect.Oracle9Dialect

    </property>

    <property name="transaction.factory_class"><!—采用了jdbc而非jta-->

       net.sf.hibernate.transaction.JDBCTransactionFactory

    </property>

    <property name="transaction.manager_lookup_class">

       org.hibernate.transaction.JBossTransactionManagerLookup

    </property>

    <property name="session_factory_name">

       java:/hibernate/SessionFactory

    </property>

    <property name="transaction.flush_before_completion">true</property>

    <property name="transaction.auto_close_session">true</property>

    <property name="jta.UserTransaction">java:comp/UserTransaction</property>

    <mapping resource="com/tryJndi/pojo/Message.hbm.xml" />

</session-factory>

</hibernate-configuration>

 

或者

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE hibernate-configuration PUBLIC

          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

 

<!-- Generated by MyEclipse Hibernate Tools.                   -->

<hibernate-configuration>

 

<session-factory>

    <property name="connection.username">vote</property>

    <property name="dialect">

       org.hibernate.dialect.Oracle9Dialect

    </property>

    <property name="connection.datasource">java:OracleDS</property>

    <property name="connection.password">hc360</property>

    <property name="transaction.factory_class">

       org.hibernate.transaction.JTATransactionFactory

    </property>

    <property name="session_factory_name">

       java:/hibernate/SessionFactory

    </property>

    <property name="transaction.manager_lookup_class">

       org.hibernate.transaction.JBossTransactionManagerLookup

    </property>

    <property name="current_session_context_class">jta</property>

    <property name="transaction.auto_close_session">true</property>

    <mapping resource="com/hj/pojo/Message.hbm.xml" />

 

</session-factory>

 

</hibernate-configuration>

 

4.    配置hibernate-service.xml文件(又有人说是jboss-service.xml),根据使用时具体情况确定吧!比较重要的参数已经加粗。

<?xml version="1.0" encoding="UTF-8"?>

 

<!-- ===================================================================== -->

<!--                                                                       -->

<!--  Sample TreeCache Service Configuration                               -->

<!--  Recommended for use as Hibernate's 2nd Level Cache                   -->

<!--  For use with JBossCache >= 1.3.0 ONLY!!!                             -->

<!--                                                                       -->

<!-- ===================================================================== -->

<server>

<mbean code="org.hibernate.jmx.HibernateService" name="jboss.jca:service=hibernateJndi.har,

name=hibernateJndi">

<depends>jboss.jca:service=RARDeployer</depends>

<depends>jboss.jca:service=LocalTxCM,name=OracleDS</depends>

<!-- Make it deploy ONLY after D.hbm.xml,  XXX SOMETHING IS MISSING HERE, PLEASE FIX !! XXX-->

<attribute name="MapResources">com/hj/pojo/Message.hbm.xml</attribute>

<attribute name="JndiName">java:/hibernate/SessionFactory</attribute>

<attribute name="Datasource">java:OracleDS</attribute>

<attribute name="Dialect">org.hibernate.dialect.Oracle9Dialect</attribute>

<attribute name="CacheProviderClass">org.hibernate.cache.HashtableCacheProvider</attribute>

<attribute name="TransactionStrategy">org.hibernate.transaction.JTATransactionFactory</attribute>

<attribute name="TransactionManagerLookupStrategy">org.hibernate.transaction.JBossTransactionManagerLookup

</attribute>

<property name="hibernate.current_session_context_class">jta</property>

 

<attribute name="UserTransactionName">java:comp/UserTransaction</attribute>

</mbean>

</server>

 

5.    在图形化界面产生JNDI DAO相关的类

6.    jbossdeploy目录(alldefaultminimal应该都可以,这次使用的是all目录) 创建一个hibernateJndi.har目录在该目录下创建META-INF目录并将工程的jar包解压到hibernateJndi.har目录。注意该工程只包括hibernate相关的类和映射文件。另外sessionFactory的名称也必须各工程不一样,以免发生错误。

7.    将相关的包放在all目录的lib下,

 

 

 

8.    最好使用新版本的jboss,并且尽可能不要改变jboss和工程中的版本,否则有可能产生版本不一致的问题。

9.    all\deploy\jboss-web.deploy目录下创建testJndi.jsp文件对jndi和事务做相关测试。testJndi.jsp内容如下:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

    pageEncoding="ISO-8859-1"%>

    <%@page import="java.sql.*"%>

    <%@page import="javax.sql.DataSource"%>

    <%@page import="javax.naming.*"%>

    <%@page import="org.hibernate.Session"%>

    <%@page import="org.hibernate.SessionFactory"%>

    <%@page import="org.hibernate.cfg.Configuration"%>

    <%@page import="com.hj.pojo.MessageDAO"%>

    <%@page import="com.hj.pojo.Message"%>

    <%@page import="javax.transaction.UserTransaction"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Insert title here</title>

</head>

<body>

<%

//jndi数据源测试

try{ 

Context initCtx=new InitialContext(); 

DataSource db = (DataSource)initCtx.lookup("java:OracleDS"); 

Connection conn = db.getConnection(); 

Statement stmt = conn.createStatement(); 

ResultSet rs = stmt.executeQuery("SELECT * FROM message"); 

out.println("User-list"+"<br>"); 

while(rs.next()){   

out.print(rs.getString("content")+" ");   

out.print(rs.getString("topic")+"<br>");  } 

rs.close(); 

stmt.close(); 

conn.close();

}catch(Exception e){

 out.print(e);

 }

 

//sessionFactory测试

 javax.naming.InitialContext ctx = new javax.naming.InitialContext();

org.hibernate.SessionFactory factory = (org.hibernate.SessionFactory)ctx.lookup("java:/hibernate/SessionFactory"); //之前配置的sessionFactory的名字

org.hibernate.Session se = factory.openSession();

org.hibernate.Query query=se.createQuery("from com.hj.pojo.Message");

java.util.List results=query.list();

java.util.ListIterator iterator=results.listIterator();

if(iterator.hasNext()){

    com.hj.pojo.Message user=(com.hj.pojo.Message)iterator.next();

    out.print("Login success");  

}

se.close();

 

//测试transaction

out.println("Now begin to insert data...");           

com.hj.pojo.Message user = new com.hj.pojo.Message();       

user.setChildNum(new Long(20));

user.setContent("just for test");

user.setCreateTime(java.util.Timer.class.toString());

user.setRootId(new Long(1));

user.setTopic("test by cao");

user.setUserId(new Long(2));

javax.transaction.UserTransaction utx =(javax.transaction.UserTransaction)

ctx.lookup("java:comp/UserTransaction");

utx.begin();

com.hj.pojo.MessageDAO messageDao=new com.hj.pojo.MessageDAO();

messageDao.save(user);

utx.commit();

 

 %>

</body>

</html>

 

10.整个的思路就是分层的思路,将hibernate,spring,web层分离,产生不同的包。

 

一.Jboss5配置jndi数据源

1. docs/examples/jca/oracle-ds.xml文件复制到/server/default/deploy目录下,改一下oracle-ds.xml.

 

2.修改standardjaws.xml jaws.xml配置文件,并把<datasource><type-mapping>元素这只为下面这样:

<jaws>

<datasource>java:/OracleDS</datasource>
   <type-mapping>Oracle 9i</type-mapping>

</jaws>

 

3.修改standardjbosscmp-jdbc.xml  jbosscmp-jdbc.xml配置文件,<datasource> <datasource-mapping>元素使用Oracle :

<datasource-mapping>

     <defaults>

            <datasource>java:/OracleDS</datasource>
            <datasource-mapping>Oracle 9i</datasource-mapping>

     </defaults>

</datasource-mapping>

4.最后我们需要修改login-config.xml文件来使用Oracle,下面是login-config.xml文件的<application-policy>元素:

<application-policy name = "OracleDbRealm">

<authentication> 
      <login-module code = "org.jboss.resource.security.ConfiguredIdentityLoginModule" 
   flag = "required"> 
         <module-option name = "principal">scott</module-option> 
         <module-option name = "userName">scott</module-option> 
         <module-option name = "password">tiger</module-option> 
         <module-option name ="managedConnectionFactoryName">  
                   jboss.jca:service=LocalTxCM,name=OracleDS 
         </module-option> 
      </login-module> 
   </authentication> 
</application-policy>

 

//测试代码:

<%
   Context initialContext = new InitialContext();
   DataSource ds = (DataSource) initialContext.lookup("java:/OracleDS");
   java.sql.Connection conn = null;
   try {
    conn = ds.getConnection();
    Statement stat = conn.createStatement();
    ResultSet rs = stat.executeQuery(" select t.id,t.name from stu t where t.age=21 ");
    while(rs.next()) {
     System.out.println("name is "+rs.getString("name"));
     out.print("name is "+rs.getString("name"));
     out.print("<br>");
    }
   } finally {
    if(conn!=null) {
     conn.close();
    }
   }
   
   //while(rs.)
  %>

0 0
原创粉丝点击