您的位置:首页 > 运维架构 > Tomcat

细说如何把spring+Hibernate +jsf项目从tomcat移植到jboss上

2008-12-18 14:45 465 查看
细说如何把[/b]spring+Hibernate +jsf[/b]
项目从[/b]tomcat[/b]移植到[/b]jboss[/b]上[/b][/b]
[/b]
作者:黄颢鹏[/b][/b]
[/b]
摘[/b] [/b]要:把[/b]spring+Hibernate +jsf[/b]项目从[/b]tomcat[/b]移植到[/b]jboss[/b]上[/b][/b]
关键字:[/b]spring+Hibernate +jsf[/b]、[/b]Tomcat[/b]、[/b]JBOSS[/b]
[/b]
[/b]
网上参考文献来源:[/b][/b]
1.[/b]http://www.javaeye.com/topic/68868 ([/b]JBoss Hibernate 配置与应用 作者:萧红叶 2007年4月4日)[/b][/b]
2.http://tech.ddvip.com/2008-10/122431116379445.html [/b](jboss下配置jndi利用spring的IOC来获得 作者不详)[/b][/b]
[/b]
[/b]
一、细说如何在在[/b]jboss[/b]上使用[/b]Hibernate[/b]
1.[/b]把[/b]hibernate[/b]相关的类包和[/b]mysql[/b]数据库驱动类包全部放到[/b]F:/jboss-4.2.2.GA/server/default/lib[/b]下(注意的是:你项目中[/b]hibernate3 .jar[/b]包不能包含在项目的[/b]Classpath[/b]中,否则会出现[/b]hibernate not bound[/b]的异常。)[/b]
2.[/b]为你的项目配置数据源[/b][/b]

在F:/jboss-4.2.2.GA/server/default/deploy下新建文件为mysql-ds.xml[/b]的xml文件
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>MysqlDataSoure[/b]</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.[/b]建立存放[/b]hibernate[/b]代码的目录(既是[/b]hibernate[/b]的[/b]O/R[/b]数据库映射代码)[/b][/b]

在F:/jboss-4.2.2.GA/server/default/deploy下建立jboss_hibernate.har[/b]目录,然后在jboss_hibernate.har[/b]目录下新建立META-INF[/b]目录,在META-INF[/b]目录下新建立jboss-service.xml[/b]文件,输入

<?xml version="1.0" encoding="UTF-8"?>
<server>
<mbean code="org.jboss.hibernate.jmx.Hibernate" name="jboss.har:service=Hibernate">
<!-- MysqlDataSoure[/b] 就是上面配置数据源的名字-->
<attribute name="DatasourceName"> MysqlDataSoure[/b] </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[/b][/b]

4.[/b]编写代码测试[/b][/b]
接着我们来写我们的hibernate 文件

4.1 [/b]在[/b]F:/jboss-4.2.2.GA/server/default/deploy[/b]目录下新建JAVA 类包,目录名为com.myhibernate,我们写一个对应数据库的User.java文件: [/b]
代码如下 [/b]
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>

二、继续细说如何把[/b]spring+Hibernate +jsf[/b]项目从[/b]tomcat[/b]移植到[/b]jboss[/b]上(上面所说的是下面项目移植的必要步骤)[/b][/b]
[/b]

4.2[/b]、编写一个jsp代码测试一下,在[/b]F:/jboss-4.2.2.GA/server/default/deploy[/b]目录下新建[/b]test.war[/b]目录,新建一个进入到[/b]F:/jboss-4.2.2.GA/server/default/deploy[/b]/test.war[/b]目录下,新建一个login.jsp,文件如下:[/b]
<%@ 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[/b]把[/b]spring+ [/b]hibernate+jsf[/b]的类包全部放到[/b]F:/jboss-4.2.2.GA/server/default/lib[/b]下(既是[/b]hibernate3.jar[/b],[/b]jsf-impl.jar[/b],[/b]spring.jar[/b],[/b]spring-hibernate3.jar[/b]类包全部剪切到[/b]F:/jboss-4.2.2.GA/server/default/lib[/b]目录下,注意的是:你项目中[/b]hibernate3 .jar[/b]包不能包含在项目的[/b]Classpath[/b]中,否则会出现[/b]hibernate not bound[/b]的异常。)[/b]
<%@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.[/b]现在我们把[/b]spring+ [/b]hibernate+jsf[/b]的项目从[/b]tomcat[/b]上移植到[/b]jboss[/b]上[/b][/b]
[/b]
5.1[/b]首先把[/b]hibernate[/b]的类和类包文件(我[/b]hibernate[/b]的类和类包,一般都放在一起,都放到[/b]com.myhibernate[/b]类包里面[/b]),全部剪切到[/b]jboss_hibernate.har[/b]目录里面,而原网站文件夹[/b].war/WEB-INF/classes[/b]下不能存放[/b]hibernate[/b]的类和类包文件,否则会出现的异常。第二把[/b]spring+ [/b]hibernate+jsf[/b]的类包全部放到[/b]F:/jboss-4.2.2.GA/server/default/lib[/b]下(既是[/b]hibernate3.jar[/b],[/b]jsf-impl.jar[/b],[/b]spring.jar[/b],[/b]spring-hibernate3.jar[/b]类包全部剪切到[/b]F:/jboss-4.2.2.GA/server/default/lib[/b]目录下,注意的是:你项目中[/b]hibernate3 .jar[/b]包不能包含在项目的[/b]Classpath[/b]中,否则会出现[/b]hibernate not bound[/b]的异常。)[/b][/b]
[/b]
然后把[/b]spring[/b]的[/b]beans[/b]配置文件中的[/b]spring[/b]和[/b]hibernate[/b]整合配置代码[/b][/b]
[/b]
<!--[/b]把[/b]spring[/b]和[/b]hibernate[/b]整合的首要条件[/b],[/b]设定[/b]sessionFactory[/b],这是[/b]tomcat[/b]里面的配置[/b]-->[/b]
<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>
[/b]
改成[/b][/b]
<!--[/b]把[/b]spring[/b]和[/b]hibernate[/b]整合的首要条件[/b],[/b]设定[/b]sessionFactory[/b],这是[/b]jboss[/b]里面的配置[/b]-->[/b]
<bean id="sessionFactory"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:/hibernate/SessionFactory</value>
</property>
</bean>
启动[/b]JBOSS[/b],然后就可以看到整个项目就移植成功了![/b][/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: