Drools项目发布成Web服务
2014-07-13 21:02
357 查看
最近应项目的要求,开始研究Drools规则引擎。
作为规则引擎,一个比较通用的应用方式就是开放服务接口,以供其它模块或用户调用。发布成Web服务无疑是比较理想的方法。Drools项目发布成Web服务,也就是实现以Web服务的方式调用Drools引擎,目前的资料相对比较少。但Drools作为开源项目,目前官方采用Maven组织它的项目工程,利用官方插件创建的Drools工程也是Maven工程。所以只要扩展这个Maven工程,加入Web服务相关内容并开放接口即可。利用Maven项目开发Web服务的资料还是很多的,但不能简单的照搬,因为Drools工程和普通Maven工程相比有很多自己独有的东西。
我采用的Drools引擎版本:6.0.1Final,使用CXF框架开发Web服务。
首先要说明的是,不建议采用官方插件创建的Drools工程开发Web服务,因为对Maven工程进行扩展的常用方法是在pom.xml里添加新的依赖,这是非常方便且有效的方法。而官方插件创建的Drools工程虽然也是Maven工程,却没有pom.xml文件,这会带来很多不便。事实上没有这个文件,扩展其它的功能也很麻烦。相应的替代方法是,创建普通的Maven工程,并把它扩展成Drools工程,再开发Web服务。
1、在pom.xml里添加CXF依赖和配置jetty插件
我使用的CXF版本为2.7.0,最新发布的为3.0。
2、编写服务类代码
3、扩展Maven工程为Maven web工程
(1)在pom.xml里设置工程的打包方式为war
(2)在项目属性的project facets里增加Dynamic Web Module。注意选上时会出现Further configuration available提示,点击后在出现的对话框里设置Content directory的值为src/main/webapp(可选,但推荐,这是Maven web工程的理想组织形式),并选择Generate web.xml deployment descriptor,让其在WEB-INF目录下生成一个web.xml文件
(3)在项目属性的Deployment Assembly里检查是否有maven dependencies,如果没有请添加。因为我们要使用web工程,web工程发布是要包含所有引用外部库,而Maven默认情况下只是增加这些库的引用,并没有把库拷进工程,这样可以减小工程大小,但发布web时必须要包含进来。如果这一步忘了做,最后调用服务时很可能会出现很多ClassNotFoundException甚至其他奇怪的错误。
4、在webapp中发布Web服务
CXF提供了spring的集成,同时还提供了CXFServlet用于在web容器中发布WebService。 增加了apache-cxf的依赖会自动增加对spring的引用。只需要写配置文件。
(1)在WEB-INF目录(此时Eclipse可能会把它显示在Deployed Resources下)创建并编写服务配置XML文件
文件名可任取,但配置web.xml时会用到。文件内容
(2)在web.xml中配置CXFServlet和spring的ContextLoaderListener
至此服务已经发布,部署后,应该可以访问相关服务的WSDL,并使用工具(如Eclipse自带的Websevice Explorer)测试Web服务。如果测试成功,应该会显示正确的返回信息,并且命令行中有相应提示,表明Drools已经成功调用。
当然这里只是利用Web服务调用Drools引擎。真正功能完备的实现应该包含诸如把特定的规则文件作为输入并让Drools返回处理结果。还有这里也只开放了SOAP服务接口,REST接口也是今后可以考虑的。
作为规则引擎,一个比较通用的应用方式就是开放服务接口,以供其它模块或用户调用。发布成Web服务无疑是比较理想的方法。Drools项目发布成Web服务,也就是实现以Web服务的方式调用Drools引擎,目前的资料相对比较少。但Drools作为开源项目,目前官方采用Maven组织它的项目工程,利用官方插件创建的Drools工程也是Maven工程。所以只要扩展这个Maven工程,加入Web服务相关内容并开放接口即可。利用Maven项目开发Web服务的资料还是很多的,但不能简单的照搬,因为Drools工程和普通Maven工程相比有很多自己独有的东西。
我采用的Drools引擎版本:6.0.1Final,使用CXF框架开发Web服务。
首先要说明的是,不建议采用官方插件创建的Drools工程开发Web服务,因为对Maven工程进行扩展的常用方法是在pom.xml里添加新的依赖,这是非常方便且有效的方法。而官方插件创建的Drools工程虽然也是Maven工程,却没有pom.xml文件,这会带来很多不便。事实上没有这个文件,扩展其它的功能也很麻烦。相应的替代方法是,创建普通的Maven工程,并把它扩展成Drools工程,再开发Web服务。
1、在pom.xml里添加CXF依赖和配置jetty插件
<dependency> <groupId>org.apache.cxf</groupId> <artifactId>apache-cxf</artifactId> <version>2.7.0</version> <type>pom</type> </dependency>
我使用的CXF版本为2.7.0,最新发布的为3.0。
2、编写服务类代码
3、扩展Maven工程为Maven web工程
(1)在pom.xml里设置工程的打包方式为war
(2)在项目属性的project facets里增加Dynamic Web Module。注意选上时会出现Further configuration available提示,点击后在出现的对话框里设置Content directory的值为src/main/webapp(可选,但推荐,这是Maven web工程的理想组织形式),并选择Generate web.xml deployment descriptor,让其在WEB-INF目录下生成一个web.xml文件
(3)在项目属性的Deployment Assembly里检查是否有maven dependencies,如果没有请添加。因为我们要使用web工程,web工程发布是要包含所有引用外部库,而Maven默认情况下只是增加这些库的引用,并没有把库拷进工程,这样可以减小工程大小,但发布web时必须要包含进来。如果这一步忘了做,最后调用服务时很可能会出现很多ClassNotFoundException甚至其他奇怪的错误。
4、在webapp中发布Web服务
CXF提供了spring的集成,同时还提供了CXFServlet用于在web容器中发布WebService。 增加了apache-cxf的依赖会自动增加对spring的引用。只需要写配置文件。
(1)在WEB-INF目录(此时Eclipse可能会把它显示在Deployed Resources下)创建并编写服务配置XML文件
文件名可任取,但配置web.xml时会用到。文件内容
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation="http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" > <jaxws:endpoint id="XXX" implementor="YYY" address="/ZZZ" /> </beans>其中XXX是服务终结点的ID,YYY是前面编写的服务实现类,ZZZ是对应服务地址。即配置完后,部署运行时对应服务地址为/XXX/ZZZ。
(2)在web.xml中配置CXFServlet和spring的ContextLoaderListener
<pre name="code" class="html"><servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/XXX.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>XXX即刚才创建的服务配置文件名称
至此服务已经发布,部署后,应该可以访问相关服务的WSDL,并使用工具(如Eclipse自带的Websevice Explorer)测试Web服务。如果测试成功,应该会显示正确的返回信息,并且命令行中有相应提示,表明Drools已经成功调用。
当然这里只是利用Web服务调用Drools引擎。真正功能完备的实现应该包含诸如把特定的规则文件作为输入并让Drools返回处理结果。还有这里也只开放了SOAP服务接口,REST接口也是今后可以考虑的。
相关文章推荐
- 项目初步发布完成,终于可以休息一下了
- 利用Ant实现项目自动构建测试备份并发布到项目web(1)
- 发布NetAdvantage项目(转)
- 示例项目Codematicdemo的Asp.net2.0版源码发布免费下载,代码生成器Codematic2.0bate版预览
- 什么项目可以发布?一切竭可外包——CSDN外包频道(57)
- VC项目编译/发布自动化实践
- [spgoal]项目章程修改稿(9.16日发布)
- Visual Studio 2005 Web Application项目RC发布
- 示例项目Codematicdemo的Asp.net2.0版源码发布免费下载,代码生成器Codematic2.0bate版预览
- 利用Ant实现项目自动构建测试备份并发布到项目web(2)
- 使用ODP.NET连接ORACLE的Web项目发布!
- 利用Ant实现项目自动构建测试备份并发布到项目web
- 使用JAXR发布Web服务
- Slackware HandBook项目发布
- 利用Ant实现项目自动构建测试备份并发布到项目web(3)
- 开源项目-OpenPOP.NET 已经发布v1.3a版本!
- [WS]使用Axis发布简单的Web服务(补充)
- 新开源项目AjaxAnywhere 1.0 tag library发布
- 什么项目可以发布?一切竭可外包——CSDN外包频道(57)
- 如何让你发布的项目拥有VS2005 的Web Site Administration Tool