发布Hessian服务作为服务内部基础服务

摘要:Hessian经常作为服务内部RPC工具来使用,速度快效率高。重构代码的核心思想就是把共用的代码段提出来,使代码结构优化;架构设计类似,把基本的共用的服务提出来,使架构优化。下面讲述一下我在具体应用中使用Spring3.2.4在Tomcat7.0.47下发布Hessian4.0.37服务的过程。

关键词:Spring, Hessian, JAVA, 架构设计, Hibernate, Tomcat


Hessian经常作为服务内部RPC远程过程调用工具来使用,速度快效率高,我们的项目也不例外的使用了它。把一些基础的服务,被别的服务使用的服务,专门提出来,使用Hessian发布一个单独的服务,供别的服务使用。我发现这里的逻辑,设计理念与《重构》这本书里的思想如出一辙,重构代码的核心思想就是把共用的代码段提出来,采用优良的设计模式,来把代码结构优化。架构设计也是,把基本的共用的服务提出来,把架构优化。提出的服务当然要求性能很高,处理正确,运行稳定,Hessian是一个好的选择。

当然Netty和Mina也是常用的Java NIO框架,它们的性能同样优良,我们也可以利用它来发布服务,不过实现起来不如Hessian来的方便。因此,在工具的选择上,我选择了Hessian支持我们的系统架构。

Hessian的好处有很多,它可以支持C#客户端调用我们使用JAVA编写的服务,并且性能超群,传输速率很高。发布Hessian服务时,它也支持集成Spring,下面就讲述一下我在具体应用中使用Spring3.2.4在Tomcat7.0.47下发布Hessian4.0.37服务的过程。

一、将project发布成Hessian服务

首先在WEB-INF目录下配置web.xml文件,如下所示。


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

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

<servlet>

<servlet-name>remoting</servlet-name>

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

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>remoting</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

</web-app>

由于使用了Spring框架,还需要Spring相关的配置,这里在WEB-INF目录下添加remoting-servlet.xml文件。


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

<beans xmlns="http://www.springframework.org/schema/beans"    xmlns:p="http://www.springframework.org/schema/p"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:context="http://www.springframework.org/schema/context"

xmlns:aop="http://www.springframework.org/schema/aop"     xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.2.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.2.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-3.2.xsd

http://cxf.apache.org/jaxws

http://cxf.apache.org/schemas/jaxws.xsd">

<bean id="sessionFactory"

class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"

p:configLocation="/WEB-INF/hibernate.cfg.xml">

</bean>

<bean id="transactionManager"

class="org.springframework.orm.hibernate4.HibernateTransactionManager">

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

</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

<context:component-scan base-package="com.wang.anqi.model" />

<context:component-scan base-package="com.wang.anqi.dao.impl" />

<!-- 发布bean -->

<bean id="roleBLLImpl" class="com.wang.anqi.dataBll.impl.RoleBLLImpl" />

<bean name="/role-svc"

class="org.springframework.remoting.caucho.HessianServiceExporter">

<property name="service" ref="roleBLLImpl" />

<property name="serviceInterface" value="com.wang.anqi.dataBll.RoleBLL" />

</bean>

<!-- 发布bean -->

</beans>  

可以看到remoting-servlet.xml文件中引用了hibernate.cfg.xml文件,自然也要将hibernate.cfg.xml添加到WEB-INF目录下来,大家可以配合我的另一篇博客 关于项目中的DAL数据接入层架构设计 理解这里的Spring配置。添加相关的JAR包,将project打包成WAR包放在Tomcat的webapps目录下,启动Tomcat。

能配合Eclipse调试是最好不过了,你需要在Eclipse/Window/Preferences下的Server/Runtime Environments配置上你的Apache Tomcat v7.0,主要是把下载的apache-tomcat-7.0.47路径设好。然后去Window/Show View把Servers界面调出来,添加Tomcat v7.0 Server at localhost。File/New建立Dynamic Web Project,新建的Dynamic Web Project如果要使用其它的project里的代码,则右键它,打开Properties,在Deplyment Assembly中Add其它的project。右键它,点击Debug As/Debug on Server,就可以看到它在Tomcat v7.0 Server at localhost中运行了。可能会报错,记住把所有引用的jar包丢到apache-tomcat-7.0.47路径lib下,注意jar版本号不一致要去除。

启动成功后,在浏览器地址栏中输入:http://localhost/***HessianService/role-svc,如果在浏览器中出现的是 HTTP Status 405 - HessianServiceExporter only supports POST requests 而不是404便说明发布成功。

 

二、调用Hessian服务

那么其它的使用此基础服务的服务便可以以“客户"的形式来使用Hessian服务了,同样,在JAVA中调用Hessian服务也可以使用Spring,下面是spring.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:context="http://www.springframework.org/schema/context"

xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.2.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.2.xsd

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">

<bean id="roleBLLImpl"

class="org.springframework.remoting.caucho.HessianProxyFactoryBean">

<property name="serviceUrl">

<value>http://localhost/***HessianServcie/role-svc</value>

</property>

<property name="serviceInterface">

<value>com.wang.anqi.dataBll.RoleBLL</value>

</property>

</bean> 
</beans> 

我们自己来管理这Spring上下文,RoleBLL的实例可以通过下面的代码:RoleBLL m_roleBLL = (RoleBLL) SpringServiceSupport.getContext().getBean("roleBLLImpl"); 来获取到。如此一来,就可以其它编写其它服务啦,真是带劲。

补充说一句,《重构》这本书里处处使用着测试驱动开发的思想,当然这对于充分保证代码逻辑的正确性是非常有好处的;类似的,把共用服务提取出来,作为基础服务,与不提出来代码、架构都变化许多,这时我们也需要有充分的保证,业务逻辑的正确性,毕竟是通过网络来RPC远程过程调用的,对象的网络传输还是有一定的风险的,不过从目前的使用来看,JAVA之间的远程过程调用一点问题都没有,我们也对每个接口写了网络调用的测试,开发简单,正确性高,性能优良!

Hessian的服务发布及使用倒是很简单,不简单的是这种系统架构设计的思想。《重构》是一本好书,值得我再读很多遍。

现期的任务真是很多啊,责任又很重大。

后台服务架构设计完了,JAVA服务编码、服务发布不要紧,要紧的是还要开发部分很久没写的C#前端,更要紧的是尽快开发完毕(我真是个厉害的角色),最要紧的是我来负责管理这个项目的开发进度,并且鼓舞大家开发的士气,有什么疑难杂症要不断的解决处理,还要带俩实习生。

做了不止两个PM的活,真是既当爹又当妈又当小孩,疼并快乐着,且码且珍惜啊!

加油,王安琪!

来自王安琪http://www.cnblogs.com/wgp13x/

发布Hessian服务作为服务内部基础服务,布布扣,bubuko.com

时间: 2024-10-08 20:04:40

发布Hessian服务作为服务内部基础服务的相关文章

基础架构、基础服务、基础平台、基础中间件等等

前言 程序开发毕竟还不是搬砖这种无脑体力劳动,需要事先有标准,有架构,有设计,绝对不是新公司今天创立,明天就可以开始编码的.其实很多公司在起步的时候没有财力和资源建设独立的基础架构或平台架构部门,甚至运维团队都没有,但是这不妨碍我们心中有一个蓝图知道努力的方向,本文我们就简单聊聊平台架构相关的工作内容(或者说作为一个技术管理,应该去梳理.统一.明确的部分)的蓝图.由于本文覆盖的内容比较多,只能抛砖引玉大概提一些,无法一一展开太详细的东西.图中的数字是我认为的优先级,仅供参考. 规范 规范它虽然不

Nmap扫描教程之网络基础服务DHCP服务类

Nmap扫描教程之网络基础服务DHCP服务类 Nmap网络基础服务 网络基础服务是网络正常工作的基石,常见的网络基础服务包括DHCP服务和DNS服务.其中,DHCP服务用来为计算机动态分配IP地址:DNS服务用来对主机名进行解析.本章将介绍网络基础服务的扫描方法. NmapDHCP服务类 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一种局域网的网络协议.它的主要作用就是,给内部网络或网络服务供应商自动分配IP地址.当一台客户机需要一个IP

##2.基础服务(SQl,RabbitMQ)--openstack

2-基础服务(SQl,RabbitMQ) ##2.基础服务(MysqlSQL,RabbitMQ) #SQL root密码 DBPass=open2017 # #------------------ #SQL数据库 yum install mariadb mariadb-server python2-PyMySQL -y cp /etc/my.cnf.d/openstack.cnf{,.bak} echo "# [mysqld] bind-address = 0.0.0.0 default-sto

arcgis server10.2.2发布地图基础服务的具体步骤

原文:arcgis server10.2.2发布地图基础服务的具体步骤 1.直接打开制作好的.mxd文档,比如这里: 2.打开mxd文档之后,打开菜单:file-share as -services 弹出地图发布服务的界面: 点击publish之后,耐心的等待一段时间,地图服务就发布好了,地图服务成功之后,可以在浏览器查看: (1) (2) (3) 到此地图服务发布结束! 备注: GIS技术交流QQ群:432512093

基础服务

.net 基础服务开源战略规划备忘录 公司现状 1. 技术人员水平限制: 基础研发人员技术细节,性能处理能力不足,技术视野不够开阔;甚至一些高可用,高性能方案的概念都未听闻,更别提发展方向和思路了,令人痛心. 2. 技术反馈渠道限制: 公司业务线暂不多,基础服务的应用面尚属狭窄:基础服务和镜像各种环境的适应性和性能不足以及时凸显暴露出来,框架bug和问题使用反馈周期太长,不足以快速跟进和改善基础框架. 3. 人员招聘渠道限制: 高技术人才未中长期储备, 各招聘渠道未能招募到合适的技术人员.临时招

分布式云平台基础服务

Net 分布式云平台基础服务建设说明概要 1)  背景 建设云平台的基础框架,用于支持各类云服务的业务的构建及发展. 2)  基础服务 根据目前对业务的理解和发展方向,总结抽象出以下几个基础服务,如图所示 3)  概要说明 基础服务的发展会根据业务的发展,调整和完善,也会不断的改进,演变及完善:当然根据目前公司的现状和对基础服务的迫切程度,基础服务各模块的定位和发展预期将如下所述. 1)     数据库中间件 公司现状: 1)     对多种类型数据库的支持需求迫切,如同时支持mysql,orc

.Net 分布式云平台基础服务

.Net 分布式云平台基础服务 1)  背景 建设云平台的基础框架,用于支持各类云服务的业务的构建及发展. 2)  基础服务 根据目前对业务的理解和发展方向,总结抽象出以下几个基础服务,如图所示 3)  概要说明 基础服务的发展会根据业务的发展,调整和完善,也会不断的改进,演变及完善:当然根据目前公司的现状和对基础服务的迫切程度,基础服务各模块的定位和发展预期将如下所述. 1)     数据库中间件 公司现状: 1)     对多种类型数据库的支持需求迫切,如同时支持mysql,orcale,s

.Net 分布式云平台基础服务建设说明概要

1)  背景 建设云平台的基础框架,用于支持各类云服务的业务的构建及发展. 2)  基础服务 根据目前对业务的理解和发展方向,总结抽象出以下几个基础服务,如图所示 3)  概要说明 基础服务的发展会根据业务的发展,调整和完善,也会不断的改进,演变及完善:当然根据目前公司的现状和对基础服务的迫切程度,基础服务各模块的定位和发展预期将如下所述. 1)     数据库中间件 公司现状: 1)     对多种类型数据库的支持需求迫切,如同时支持mysql,orcale,sqlserver这些数据库.最多

虚拟化基础架构Windows 2008篇之1-虚拟化基础服务概述

1 基于Windows Server 2008 R2的Active Directory网络 在虚拟化的应用中,无论是基础服务器Hyper-V Server,还是带GUI的Windows Server 2008.Windows Server 2012,或者虚拟化管理工具VMM,都离不开Active Directory的支持.另外,对于Microsoft的其他应用,无论是否与虚拟化或云计算相关,也离不开Active Directory,例如DHCP.Windows部署服务等.在组建虚拟化与云计算应用