您的位置:首页 > 其它

jboss + hibernate jndi的配置

2014-07-31 16:32 204 查看
在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. 在jboss的deploy目录(all,default,minimal应该都可以,这次使用的是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.)

%>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: