细说如何把spring+Hibernate +jsf
项目从tomcat移植到jboss上
作者:黄颢鹏
摘 要:把spring+Hibernate +jsf项目从tomcat移植到jboss上
关键字:spring+Hibernate +jsf、Tomcat、JBOSS
网上参考文献来源:
1.http://www.javaeye.com/topic/68868 (JBoss Hibernate 配置与应用 作者:萧红叶 2007年4月4日)
2.http://tech.ddvip.com/2008-10/122431116379445.html (jboss下配置jndi利用spring的IOC来获得 作者不详)
一、细说如何在在jboss上使用Hibernate
1.把hibernate相关的类包和mysql数据库驱动类包全部放到F:/jboss-4.2.2.GA/server/default/lib下(注意的是:你项目中hibernate3 .jar包不能包含在项目的Classpath中,否则会出现hibernate not bound的异常。)
2.为你的项目配置数据源
在F:/jboss-4.2.2.GA/server/default/deploy下新建文件为mysql-ds.xml的xml文件
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>MysqlDataSoure</jndi-name>
<use-java-context>false</use-java-context>
<connection-url>jdbc:mysql://127.0.0.1:3306/myblog</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>sa</password>
<exception-sorter-class-name>
org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter
</exception-sorter-class-name>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
3.建立存放hibernate代码的目录(既是hibernate的O/R数据库映射代码)
在F:/jboss-4.2.2.GA/server/default/deploy下建立jboss_hibernate.har目录,然后在jboss_hibernate.har目录下新建立META-INF目录,在META-INF目录下新建立jboss-service.xml文件,输入
<?xml version="1.0" encoding="UTF-8"?>
<server>
<mbean code="org.jboss.hibernate.jmx.Hibernate" name="jboss.har:service=Hibernate">
<!-- MysqlDataSoure 就是上面配置数据源的名字-->
<attribute name="DatasourceName"> MysqlDataSoure </attribute>
<attribute name="Dialect">org.hibernate.dialect.MySQLDialect</attribute>
<attribute name="SessionFactoryName">java:/hibernate/SessionFactory</attribute>
<attribute name="ShowSqlEnabled">true</attribute>
<attribute name="ScanForMappingsEnabled">true</attribute>
</mbean>
</server>
如果有多个数据库,你可以建多个数据源,然后在jboss-service.xml文件里写上多个mbean
4.编写代码测试
接着我们来写我们的hibernate 文件
4.1 在F:/jboss-4.2.2.GA/server/default/deploy目录下新建JAVA 类包,目录名为com.myhibernate,我们写一个对应数据库的User.java文件:
package com.myhibernate
import java.io.Serializable;
public class myuser implements Serializable
{
private String uid;
private String uname;
public myuser (){
}
public void setUId(String uid){
this.uid=uid;
}
public String getUId(){
return uid;
}
public void setUname(String uname){
this.uname=uname;
}
public String getUname(){
return uname;
}
}
package org.xredleaf;
import java.io.Serializable;
public class User implements Serializable
{
private String id;
private String name;
private int age;
public User(){
}
public void setId(String id){
this.id=id;
}
public String getId(){
return id;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
}
写完代码写将它编译成 myuser.class文件
接着我们写XML映射文件myuser.hbm.xml 文件:
代码如下
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name=" com.myhibernate.myuser " table="myuser" >
<id name="uid" column="uid" type="java.lang.String" >
<generator class="uuid.hex"/>
</id>
<property name="uname" column="uname" type="java.lang.String" />
</class>
</hibernate-mapping>
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="org.xredleaf.User" table="user" >
<id name="id" column="id" type="java.lang.String" >
<generator class="uuid.hex"/>
</id>
<property name="name" column="name" type="java.lang.String" />
<property name="age" column="age" type="java.lang.Integer" />
</class>
</hibernate-mapping>
二、继续细说如何把spring+Hibernate +jsf项目从tomcat移植到jboss上(上面所说的是下面项目移植的必要步骤)
4.2、编写一个jsp代码测试一下,在F:/jboss-4.2.2.GA/server/default/deploy目录下新建test.war目录,新建一个进入到F:/jboss-4.2.2.GA/server/default/deploy/test.war目录下,新建一个login.jsp,文件如下:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%
javax.naming.InitialContext ctx = new javax.naming.InitialContext();
try{
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.myhibernate. myuser u where u.uid='1231568' ");
java.util.List results=query.list();
java.util.ListIterator iterator=results.listIterator();
if(iterator.hasNext()){
com.myhibernate.myuser u=(com.myhibernate. myuser)iterator.next();
session.setAttribute("myuser",u);
out.println("的确有这个用户");
com.myhibernate.myuser u1=(com.myhibernate. myuser) session.getAttribute("myuser");
out.println(u1. getUname()) ;
}
}catch(Exception ex){
out.println("错误:"+ex.getMessage());
}
%>
4.3把spring+ hibernate+jsf的类包全部放到F:/jboss-4.2.2.GA/server/default/lib下(既是hibernate3.jar,jsf-impl.jar,spring.jar,spring-hibernate3.jar类包全部剪切到F:/jboss-4.2.2.GA/server/default/lib目录下,注意的是:你项目中hibernate3 .jar包不能包含在项目的Classpath中,否则会出现hibernate not bound的异常。)
<%@page contentType="text/html;charset=GB2312" %>
<%
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 org.xredleaf.User user where user.id='111' ");
java.util.List results=query.list();
java.util.ListIterator iterator=results.listIterator();
if(iterator.hasNext()){
org.xredleaf.User user=(org.xredleaf.User)iterator.next();
session.setAttribute("user",user);
out.print("Login success");
}
%>
现在启动jboss,运行run.bat
打开http://localhost:8080/test/login.jsp查看一下,理论上成功了
5.现在我们把spring+ hibernate+jsf的项目从tomcat上移植到jboss上
5.1首先把hibernate的类和类包文件(我hibernate的类和类包,一般都放在一起,都放到com.myhibernate类包里面),全部剪切到jboss_hibernate.har目录里面,而原网站文件夹.war/WEB-INF/classes下不能存放hibernate的类和类包文件,否则会出现的异常。第二把spring+ hibernate+jsf的类包全部放到F:/jboss-4.2.2.GA/server/default/lib下(既是hibernate3.jar,jsf-impl.jar,spring.jar,spring-hibernate3.jar类包全部剪切到F:/jboss-4.2.2.GA/server/default/lib目录下,注意的是:你项目中hibernate3 .jar包不能包含在项目的Classpath中,否则会出现hibernate not bound的异常。)
然后把spring的beans配置文件中的spring和hibernate整合配置代码
<!--把spring和hibernate整合的首要条件,设定sessionFactory,这是tomcat里面的配置-->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate.cfg.xml">
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect
</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
改成
<!--把spring和hibernate整合的首要条件,设定sessionFactory,这是jboss里面的配置-->
<bean id="sessionFactory"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:/hibernate/SessionFactory</value>
</property>
</bean>
启动JBOSS,然后就可以看到整个项目就移植成功了!