WebService开发实例 (Xfire+Spring+Hibernate)

请注意,需要下载Xfire1.2.6spring2.0,hibernate 3.0 相关类库及相关数据库的jdbc 驱动。本文相关内容是在myeclipse5.1 下完成。

 

一、            首先在web.xml 中添加对xfirespring 支持的相关内容,如下:

 

<? xml version = "1.0" encoding = "ISO-8859-1" ?>

 

<! DOCTYPE web-app

    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

    "http://java.sun.com/dtd/web-app_2_3.dtd" >

< web-app >

<!-- START SNIPPET: xfire -->

< context-param >

<! xfire spring 相关配置文件位置 -->

 

        < param-name > contextConfigLocation </ param-name >

        < param-value > /WEB-INF/applicationContext.xml  

        classpath:org/codehaus/xfire/spring/xfire.xml </ param-value >

    </ context-param >

 

    < context-param >

        < param-name > log4jConfigLocation </ param-name >

        < param-value > /WEB-INF/log4j.properties </ param-value >

    </ context-param >

   

    < context-param >

        < param-name > webAppRootKey </ param-name >

        < param-value > webservicetest.root </ param-value >

    </ context-param >

 

 

      < filter >

        < filter-name > sessionFilter </ filter-name >

        < filter-class > org.springframework.orm.hibernate3.support.OpenSessionInViewFilter </ filter-class >

    </ filter >   

    < filter-mapping >

        < filter-name > sessionFilter </ filter-name >

        < url-pattern > /services/* </ url-pattern >

    </ filter-mapping >        

      

    < listener >

        < listener-class > org.springframework.web.util.Log4jConfigListener </ listener-class >

    </ listener >

 

    < listener >

        < listener-class > org.springframework.web.context.ContextLoaderListener </ listener-class >

    </ listener >    

     

     < servlet >

        < servlet-name > xfire </ servlet-name >

        < servlet-class > org.springframework.web.servlet.DispatcherServlet </ servlet-class >

    </ servlet >

  

 

    < servlet-mapping >

        < servlet-name > xfire </ servlet-name >

        < url-pattern > /services/* </ url-pattern >

    </ servlet-mapping >       

   

<!-- END SNIPPET: xfire -->

</ web-app >

 

二、            applicationContext.xml 文件内容:

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

<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd" >

< beans >

 

<!-- 数据库连接配置 -->

    < bean id = "propertyConfigurer" class = "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >

   

        < property name = "location" value = "/WEB-INF/jdbc_connect.properties" />

       

    </ bean >

       

    <!-- C3P0 连接池配置 -->

   

    < bean id = "dataSource" class = "com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method = "close" >     

       

        < property name = "driverClass" value = "${jdbc.driverClassName}" />

        < property name = "jdbcUrl" value = "${jdbc.url}" />

        < property name = "user" value = "${jdbc.username}" />

        < property name = "password" value = "${jdbc.password}" />

       

        < property name = "initialPoolSize" >

            < value > 5 </ value >

        </ property >

         < property name = "minPoolSize" >

             < value > 5 </ value >

         </ property >

         < property name = "maxPoolSize" >

             < value > 10 </ value >

         </ property >

         < property name = "acquireIncrement" >

             < value > 2 </ value >

         </ property >

         < property name = "maxIdleTime" >

             < value > 60 </ value >

         </ property >

         < property name = "maxStatements" >

             < value > 0 </ value >

         </ property >     

    </ bean >

    <!-- C3P0 结束 -->

   

    < bean id = "sessionFactory" class = "org.springframework.orm.hibernate3.LocalSessionFactoryBean" >

        < property name = "dataSource" ref = "dataSource" />

        < property name = "mappingResources" >

            < list >

            <! hibernate hbm 文件位置 ,至于hbm文件可以通过工具生成,这里就不详述了-->

                < value > com/dao/emp.hbm.xml </ value >              

            </ list >

        </ property >

        < property name = "hibernateProperties" >

            < props >

                < prop key = "hibernate.dialect" > ${hibernate.dialect} </ prop >       

                < prop key = "hibernate.show_sql" > true </ prop >                  

                 < prop key = "hibernate.jdbc.fetch_size" > 100 </ prop >

                < prop key = "hibernate.jdbc.batch_size" > 50 </ prop >

                < prop key = "hibernate.use_outer_join" > true </ prop >               

                < prop key = "hibernate.connection.SetBigStringTryClob" > true </ prop >

            </ props >            

        </ property >

       

        < property name = "eventListeners" >

            < map >

                < entry key = "merge" >

                    < bean class = "org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener" />

                </ entry >

            </ map >

        </ property >

   

    </ bean >

   

   

   

    < bean id = "transactionManager" class = "org.springframework.orm.hibernate3.HibernateTransactionManager" >

        < property name = "sessionFactory" ref = "sessionFactory" />

    </ bean >

   

    < bean id = "QueryHib" class = "Hello.HelloworldImpl " >

        < property name = "sessionFactory" ref = "sessionFactory" />

    </ bean >

     

   

    <! webservice bean -->

   

    < bean id = "QueryHibRis" class = "org.springframework.transaction.interceptor.TransactionProxyFactoryBean" >

        < property name = "transactionManager" ref = "transactionManager" />

        < property name = "target" ref = "QueryHib" />

        < property name = "transactionAttributes" >

            < props >         

            < prop key = "*" > PROPAGATION_REQUIRED </ prop >                   

            </ props >

        </ property >

    </ bean >

   

</ beans >

 

<!-- jdbc_connect.properties 文件内容, 主要是数据库配置, 以下是oracle 数据库 -->

 

jdbc.driverClassName= oracle.jdbc.driver.OracleDriver

jdbc.url= jdbc : oracle:thin:@172.17.99.230:1521:bsrun

jdbc.username= user

jdbc.password= user

hibernate.dialect= org.hibernate.dialect.Oracle9Dialect

 

三、            xfire-servlet.xml 文件内容, 如下:

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

<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"  >

 

< beans >

    <!-- START SNIPPET: xfire -->

    < bean class = "org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" >

        < property name = "urlMap" >

            < map >

                < entry key = "/QueryService" >

                    < ref bean = "query" />

                </ entry >    

             </ map >

        </ property >

       

    </ bean >

   

    <!-- Declare a parent bean with all properties common to both services -->

    < bean id = "query" class = "org.codehaus.xfire.spring.remoting.XFireExporter" >

        < property name = "serviceFactory" >

            < ref bean = "xfire.serviceFactory" />

        </ property >

        < property name = "xfire" >

            < ref bean = "xfire" />

        </ property >

        < property name = "serviceBean" >

            < ref bean = "QueryHibRis" />   <! 请注意这个需在applicationContext.xml 有定义-->

 

        </ property >

        < property name = "serviceClass" >

            < value > Hello . IHelloworld </ value >

        </ property >

       

    </ bean >   

    <!-- END SNIPPET: xfire -->

</ beans >

 

四、Hello.HelloworldImpl 类内容,主要是查询数据库并返回结果

 

package Hello;

 

 

import java.util.Collection;

 

//Generated by MyEclipse

 

public class HelloworldImpl implements IHelloworld {

   

    public Collection User(){  

    return getHibernateTemplate().find(" select new Helloworld.User(userid,username ) from emp");  

                

    }

   

}

 

IHelloworld 接口内容

package Hello;

//Generated by MyEclipse

 

import java.util.Collection;

 

 

public interface IHelloworld {

   

    public Collection User();

}

//xfire 对于返回collection 的,需要定义接口的IHelloworld.aegis.xml 文件, 需放在当前接口文件目录下。

 

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

  <mappings>

    <mapping>

        <method name= "User" >

            <return-type componentType= "Helloworld.User" />          

        </method>         

       

    </mapping>   

   

</mappings>

 

Helloworld.User 类内容:

package Helloworld;

 

public class User {

   

    String userid;

    String username;

// 一定要定义此构造函数,在Hello.HelloworldImpl中有用到哟

    Public User(String userid,String username){

        this.userid = userid;

this.username = username;

 

}  

 

    public String getUserid() {

        return userid;

    }

    public void setUserid(String userid) {

        this.userid = userid;

    }

    public String getUsername() {

        return username;

    }

    public void setUsername(String username) {

        this.username = username;

    }

 

}

 

完结,以上代码是我在实际应用中改编而成,都经过测试,肯定好用。

转自:http://blog.csdn.net/caok/archive/2008/12/29/3637734.aspx

 

你可能感兴趣的:(spring,Hibernate,bean,webservice,String,Class)