JSPCN主页
|
JSP空间
|
网站制作
|
JSP下载
|
JSP论坛
|
JSP教程
|
关于JSPCN
|
联系我们
做最专业的JSP中文网站
当前位置
:
首页
--
JAVA技术
--
Spring
文章搜索:
关键字
标题
JSP中文网内容管理系统(JCMS)
JSP虚拟主机
网络笔记本
网摘,图片,笔记收藏
虚拟服务器
JSPCN文章目录分类
JSP配置
[
219
]
JSP基础
[
136
]
中文问题
[
69
]
上传问题
[
27
]
JAVABEAN
[
46
]
数据库
[
212
]
文件操作
[
126
]
图片声音
[
17
]
JSP其他
[
57
]
时间相关
[
16
]
JAVAMAIL
[
72
]
STRUTS
[
144
]
开发工具
[
28
]
教程系列
[
157
]
JSP实例
[
89
]
JAVA基础
[
421
]
APPLET
[
78
]
JAVA网络
[
179
]
Applica
[
115
]
Servlet
[
98
]
XML
[
163
]
J2ME
[
257
]
J2EE
[
374
]
考试相关
[
63
]
JAVA线程
[
90
]
EJB
[
261
]
Swing
[
26
]
Java API
[
141
]
声音图片
[
28
]
异常处理
[
33
]
JAVA实例
[
290
]
JAVA类
[
139
]
SUN
[
89
]
Hibernate
[
6
]
JMX
[
8
]
Spring
[
34
]
本版推荐文章
快速上手Spring--4.安装和使用IDE
Spring中IOC的实现
品味Spring 的魅力
Spring开发指南0.8版(By夏昕)
Spring简介
spring持久化
spring提供的事务管理
使用分布式缓存来群集Spring远程服务
Spring对log4j的增强
Spring与iBATIS的集成
Learn Spring in spring(三)
在SPRING中实现事务暂停
Spring MultiAction的简单示例
Spring: A Developer's Notebook...
Spring: A Developer's Notebook...
POJO应用框架:Spring与EJB3.0的比较
学习如何在EJB应用程序中使用Spring
[评论]从Spring VS. EJB3.0想到的男女问题
在Spring中使用JDO
Spring 框架简介
本版热点文章
快速上手Spring--4.安装和使用IDE
spring持久化
POJO应用框架:Spring与EJB3.0的比较
根据petclinic项目手把手教你剖析SpringFram...
Spring与iBATIS的集成
Spring简介
使用Spring的JdbcTemplate实现分页功能
使用分布式缓存来群集Spring远程服务
在SPRING中实现事务暂停
spring提供的事务管理
Spring: A Developer's Notebook...
Spring对log4j的增强
Learn Spring in spring(三)
Spring MultiAction的简单示例
Spring中IOC的实现
Spring: A Developer's Notebook...
Spring 入门(一个简单的例子)
Spring开发指南0.8版(By夏昕)
[评论]从Spring VS. EJB3.0想到的男女问题
Spring--内容与形式并重[2005.5]
相关文章链接
XFire在SpringSide中的应用
作者: 文章来源:
访问次数:5次 加入时间:2007年04月09日
这一节,通过SpringSide来分析XFire的应用。
SpringSide开源项目是国内的开发人员所做的一个以Spring为核心的开源项目,目的是提供一个Pragmatic的企业应用开发基础和最佳实践展示。为使用Spring框架的开发者提供一个非Demo版的复杂、正式而体现最佳使用实践的参照系统。为JavaEEer必须面对的所有问题提供合理的、合乎Pragmatic原则的解决方案。采用Plugins形式组织,使开发者可快速定位所需的参考方案并做加法到自己的系统。
SpringSide中关于Web服务的配置是在WEB-IBF/classes文件下的applicationContext-webservice.xml中配置的:
<?xml version=
"1.0"
encoding=
"UTF-8"
?>
<!DOCTYPE beans PUBLIC
"-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd"
>
<beans>
<
import
resource=
"classpath:org/codehaus/xfire/spring/xfire.xml"
/>
<bean
class
=
"org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"
>
<property name=
"mappings"
>
<value>/BookService=bookService</value>
</property>
</bean>
<bean id=
"baseWebService"
class
=
"org.codehaus.xfire.spring.remoting.XFireExporter"
abstract
=
"true"
>
<property name=
"serviceFactory"
ref=
"xfire.serviceFactory"
/>
<property name=
"xfire"
ref=
"xfire"
/>
</bean>
<bean id=
"bookService"
parent=
"baseWebService"
>
<property name=
"serviceBean"
ref=
"bookManager"
/>
<property name=
"serviceClass"
value=
"org.springside.bookstore.service.webservice.BookService"
/>
</bean>
</beans>
第一步,引入xfire.xml文件
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml"/>。这样,我们就不必在web.xml中配置了,这种语法在Spring参考手册(2.0-M3)3.18节中有介绍,3.19节介绍了在web.xml配置bean定义文件的方法,就是上一节使用的方法。
第二步,处理映射,将/BookService URL和bookService这个bean联系起来。当然,这里bookService又继承了baseWebService,这样做挺巧妙,这样如果有多个Web服务bean,就继承baseWebService就可以了,这种面向对象的概念还是值得我们提倡的,Spring参考手册3.5节介绍了相关的知识。
在bookService的定义中,serviceBean也就是接口实现类为bookManager bean,这个bean实际是在WEB-INF/classes/ applicationContext-manager.xml文件中所定义,类名为org.springside.bookstore.service.logic.BookManager:
package
org.springside.bookstore.service.logic;
import
… …
public
class
BookManager
extends
BaseHibernateDao
implements
BookService {
private
CategoryManager categoryManager;
public
void
setCategoryManager(CategoryManager categoryManager) {
this
.categoryManager = categoryManager;
}
protected
Class
getEntityClass() {
… …
}
public
Book
get(
Integer
id) {
… …
}
public
void
save(
Book
book) {
… …
}
public
void
remove(
Integer
id) {
… …
}
public
List
getAllCategorys() {
… …
}
public
Category getCategory(
Integer
id) {
… …
}
public
List
findBooksByName(
String
name) {
… …
}
public
List
getNewBooks() {
… …
}
public
List
findAllLowStock(
Integer
stockHint) {
… …
}
public
List
findBooksByCategory(
String
category_id) {
… …
}
protected
void
filterCriteria(Criteria criteria,
Map
filter) {
… …
}
}
serviceClass也就是接口类为
org.springside.bookstore.service.webservice.BookService:
package
org.springside.bookstore.service.webservice;
import
java.util.
List
;
public
interface
BookService {
List
findBooksByName(
String
name);
List
findBooksByCategory(
String
category);
List
getAllCategorys();
}
事实上,SpringSide既是一个Web服务的提供者,又是一个Web服务的消费者。它在WEB-INF/classes/applicationContext-webservice-client.xml文件中定义了消费这个Web服务的bean:
<?xml version=
"1.0"
encoding=
"UTF-8"
?>
<!DOCTYPE beans PUBLIC
"-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd"
>
<beans>
<!-- 一分钟刷新一次sciprt文件-->
<bean
class
=
"org.springframework.scripting.support.ScriptFactoryPostProcessor"
>
<property name=
"refreshCheckDelay"
value=
"60"
/>
</bean>
<bean id=
"BookServiceClient"
class
=
"org.springframework.scripting.groovy.GroovyScriptFactory"
>
<constructor-arg value=
"classpath:org/springside/bookstore/service/webservice/BookServiceClient.groovy"
/>
<property name=
"serviceUrl"
value=
"http://localhost:8080/springside/service/BookService"
/>
</bean>
</beans>
这个消费Web服务的bean定义为BookServiceClient,它是采用Groovy脚本语言定义了。在Spring参考手册(2.0-M3)中的第25章专门介绍在Spring中脚本语言的使用,脚本语言支持是Spring 2.0新增的内容,目前可以支持Groovy、BeanShell、Jruby三种脚本语言。
这个BookServiceClient最终是在dwr中使用,可以
pluginsorg.springside.ajax.dwrwebappWEB-INFdwr.xml中的定义。
在SpringSide,采用Aegis的binding方式,在
pluginsorg.springside.webservice.xfiresrcorgspringsideookstoreservicewebserviceBookService.aegis.xml中定义了返回值的类型:
<?xml version=
"1.0"
encoding=
"UTF-8"
?>
<mappings>
<mapping>
<method name=
"findBooksByName"
>
<
return
-type componentType=
"org.springside.bookstore.domain.Book"
/>
</method>
<method name=
"findBooksByCategory"
>
<
return
-type componentType=
"org.springside.bookstore.domain.Book"
/>
</method>
<method name=
"getAllCategorys"
>
<
return
-type componentType=
"org.springside.bookstore.domain.Category"
/>
</method>
</mapping>
</mappings>
Copyright © 2002-2005
JSP
CN.net. All rights reserved.
JSP中文网 备案序号:蜀ICP备05001583号
成都恒海科技发展有限公司 成都市一环路南二段6号新瑞楼三楼8号