请注意,需要下载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