请注意,需要下载Xfire1.2.6 、spring2.0,hibernate 3.0 相关类库及相关数据库的jdbc 驱动。本文相关内容是在myeclipse5.1 下完成。
一、 首先在web.xml 中添加对xfire 及spring 支持的相关内容,如下:
<? 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