- 浏览: 76086 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
quanhy5:
这是session复制时session内东西不是可序列化而引起 ...
weblogic集群session保持的问题 -
NICOBEYOND:
不错,向楼主学习!
通常在Spring发布Hession,RMI等 -
完美冰蓝:
估计有戏!
使用jad及eclipse插件进行.class文件的反编译 -
heavilyarmed:
谢谢了 呵呵
oracle主键自增
通常在Spring发布Hession,RMI等,是非常方便的,
但是要发布SOAP类型的WebService则要依赖一个独立的Servlet容器(如Tomcat+Axis),
这种Webservice一般还有别的配置文件,比如web.xml,wsdd文件等等
。有时侯,你可能想一台机器上只部署一个Http Soap Service
,这种场合你可能不希望安装一个类似Tomcat的容器,
你更希望发布的时候就是一个服务程序,该程序启动则提供WebService.这篇文章描述一种解决方案。
开发环境:
Spring 1.2.6
XFire 1.0
Jetty 4.2.1
方案描述:我们可以通过XFire的编程接口来创建WebService并嵌入一个HttpServer,
从而来做到在一个独立应用程序中发布Http Service
1// Create an XFire Service
2 ObjectServiceFactory serviceFactory = new ObjectServiceFactory();
3 Service service = serviceFactory.create(Echo.class);
4 service.setInvoker(new BeanInvoker(new EchoImpl()));
5 // Register the service in the ServiceRegistry
6 XFire xfire = XFireFactory.newInstance().getXFire();
7 xfire.getServiceRegistry().register(service);
8 // Start the HTTP server
9 XFireHttpServer server = new XFireHttpServer();
10 server.setPort(8191);
11 server.start();
这样的话,如果发布多个WebSerice则要依次显式的创建 XFire Service,然后再一一注册,
这样显然是不够优雅的。
我们想要让开发者在Spring配置文件中指定要发布为WebService的POJOs,
然后载入Spring环境就自动发布为webservice,而不需要跟 XFire API打交道。
首先,我们想要一个BeanFacory,能把一个pojo装配成XFire Service
1 /**
2 *
3 */
4 package com.yovn.ws.xfire.example;
5
6 import org.codehaus.xfire.service.Service;
7 import org.codehaus.xfire.service.binding.BeanInvoker;
8 import org.codehaus.xfire.service.binding.ObjectServiceFactory;
9 import org.springframework.beans.factory.FactoryBean;
10
11 /**
12 * @author new
13 *
14 */
15 public class XFireServiceFactoryBean implements FactoryBean
16 {
17
18
19
20
21 private Class serviceClass;
22
23
24 private Object target;
25
26
27 private Service service;
28
29
30 private final ObjectServiceFactory sf=new ObjectServiceFactory();
31
32 /**
33 *
34 */
35 public XFireServiceFactoryBean()
36 {
37
38 }
39
40 /* (non-Javadoc)
41 * @see org.springframework.beans.factory.FactoryBean#getObject()
42 */
43 public Object getObject() throws Exception
44 {
45 if(service==null)
46 {
47 service=sf.create(serviceClass);
48 service.setInvoker(new BeanInvoker(target));
49 }
50 return service;
51 }
52
53 /* (non-Javadoc)
54 * @see org.springframework.beans.factory.FactoryBean#getObjectType()
55 */
56 public Class getObjectType()
57 {
58
59 return Service.class;
60 }
61
62 /* (non-Javadoc)
63 * @see org.springframework.beans.factory.FactoryBean#isSingleton()
64 */
65 public boolean isSingleton()
66 {
67 return true;
68 }
69
70 public void setServiceClass(Class serviceClass)
71 {
72 this.serviceClass = serviceClass;
73 }
74
75 public void setTarget(Object target)
76 {
77 this.target = target;
78 }
79
80 }
81
这样我们可以通过Spring来装配一个pojo,
下一步我们要在Spring容器载入时候注册XFire Service,
并启动一个嵌入的Http Server,我们可以借助Spring的ApplicationListener来实现
Ok,我们完成基础的代码,下面试着发布一个简单的WebServie1 /**
2 *
3 */
4 package com.yovn.ws.xfire.example;
5
6
7 import org.apache.commons.logging.Log;
8 import org.apache.commons.logging.LogFactory;
9 import org.codehaus.xfire.XFire;
10 import org.codehaus.xfire.XFireFactory;
11 import org.codehaus.xfire.server.http.XFireHttpServer;
12 import org.codehaus.xfire.service.Service;
13 import org.codehaus.xfire.service.ServiceRegistry;
14 import org.springframework.context.ApplicationContext;
15 import org.springframework.context.ApplicationEvent;
16 import org.springframework.context.ApplicationListener;
17 import org.springframework.context.event.ContextClosedEvent;
18 import org.springframework.context.event.ContextRefreshedEvent;
19
20 /**
21 * @author new
22 *
23 */
24 public class XFireServiceStarter implements ApplicationListener
25 {
26
27 private int port = 80;
28
29 private XFireHttpServer server;
30 private final Log logger=LogFactory.getLog(getClass().getName());
31
32 public void setPort(int port)
33 {
34 this.port = port;
35 }
36
37 public void onApplicationEvent(ApplicationEvent event)
38 {
39 try
40 {
41 if (event instanceof ContextRefreshedEvent)
42 {
43
44 if (server != null)
45 {
46
47 server.stop();
48 logger.info("xfire server stopped");
49
50 }
51 registerService((ApplicationContext)event.getSource());
52 server = new XFireHttpServer();
53 server.setPort(port);
54 server.start();
55 logger.info("xfire server started");
56
57 } else if (event instanceof ContextClosedEvent)
58 {
59 if(server!=null)
60 {
61 server.stop();
62 logger.info("xfire server stopped");
63 }
64
65 }
66
67 } catch (Exception e)
68 {
69 logger.error("process event "+event+" error",e);
70 }
71
72 }
73
74 private void registerService(ApplicationContext context)
75 {
76 XFire xfire=XFireFactory.newInstance().getXFire();
77 ServiceRegistry registry=xfire.getServiceRegistry();
78 String names[]=context.getBeanNamesForType(Service.class);
79
80 for(int i=0;i<names.length;i++)
81 {
82 Service service=(Service)context.getBean(names[i]);
83 registry.register(service);
84 logger.info("register service:"+service.getName());
85 }
86
87 }
88
89 }
90
该接口的实现如下1 package com.yovn.ws.xfire.example;
2
3 public interface Add
4 {
5 int add(int a,int b);
6
7 }
1 package com.yovn.ws.xfire.example;
2
3 public class AddImpl implements Add
4 {
5
6 public int add(int a, int b)
7 {
8
9 return a+b;
10 }
11
12 }
2
3 public class AddImpl implements Add
4 {
5
6 public int add(int a, int b)
7 {
8
9 return a+b;
10 }
11
12 }
这是一个简单功能的POJO,下面我们在Spring中装配起来
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
3 <beans>
4 <bean id="addService" class="com.yovn.ws.xfire.example.XFireServiceFactoryBean">
5 <property name="serviceClass" value="com.yovn.ws.xfire.example.Add"/>
6 <property name="target" ref="adder"/>
7 </bean>
8
9 <bean id="adder" class="com.yovn.ws.xfire.example.AddImpl"/>
10 <bean id="xfireStarter" class="com.yovn.ws.xfire.example.XFireServiceStarter">
11 <property name="port" value="80"/>
12 </bean>
13 </beans>
2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
3 <beans>
4 <bean id="addService" class="com.yovn.ws.xfire.example.XFireServiceFactoryBean">
5 <property name="serviceClass" value="com.yovn.ws.xfire.example.Add"/>
6 <property name="target" ref="adder"/>
7 </bean>
8
9 <bean id="adder" class="com.yovn.ws.xfire.example.AddImpl"/>
10 <bean id="xfireStarter" class="com.yovn.ws.xfire.example.XFireServiceStarter">
11 <property name="port" value="80"/>
12 </bean>
13 </beans>
好了,我们完成了,只要载入这个xml初始化一个Spring ApplicationContext,一个名叫Add的webservice就发布了。你可以通过访问http://localhost/Add?wsdl来获得webservice的详细描述!
发表评论
-
为Weblogic9.2安装和配置Apache HTTP 服务器插件
2007-07-31 09:32 5799下面内容来自Installing and Configurin ... -
配置WebLogic Server集群
2007-06-20 08:21 1074预备知识 什么是Domain和Server Domain ... -
Linux下配置WebLogic Server集群
2007-06-20 09:08 1306本文讲述如何在WebLogic Server 8.1上配置集群 ... -
weblogic集群session保持的问题
2007-06-25 02:48 5146这次考试院weblogic集群一直被session保持的问题所 ... -
WebLogic如何设置session超时时间
2007-06-25 02:48 2395WebLogic如何设置session超时时间 1 web. ... -
基于Weblogic Server实现EOS负载均衡的考虑
2007-06-25 02:51 1480EOS本身不提供负载均衡、流量控制、过负载控制的处理,主要依赖 ... -
EOS开发部署资料
2007-06-25 03:04 15851.关于EOS的primary key EOS的primar ... -
weblogic之SESSION复制
2007-06-25 03:05 3174在weblogic.xml中增加如下配置: <sessi ... -
Java - Webservice调用方式:axis,soap详解
2007-06-28 03:43 7742调用webservice,可以首先根据wsdl文件生成客户端, ... -
soap webservice axis
2007-06-28 03:45 1350本文介绍使用AXIS作为开发环境来体会Web服务的开发过程。& ... -
只需要3步把您的java程序转换为webservice
2007-06-28 04:34 1524一、Axis安装 1、环境 J2SE SDK 1.3 or 1 ... -
webwork与spring集成的三种方法
2007-05-31 09:21 10441.External-Ref 这种方法看起来比较烦琐,(这里 ... -
Spring与Hibernate的整合与解耦
2007-06-01 06:07 969Hibernate与Spring整合后,就可以使用IoC及AO ... -
Spring ORM implementation for Castor (1)
2007-06-01 08:03 966Data access with the Spring fra ... -
Spring ORM implementation for Castor (2)
2007-06-01 08:04 880Declarative Transaction Demarca ... -
java文章网址收集
2007-06-06 01:04 9581.TheServerside.com 依然是地位无可动 ... -
J2EE大型网站架构设计一点总结
2007-06-06 08:35 3476程序开发是一方面,系统架构设计(硬件+网络+软件)是另一方面。 ... -
使用Hibernate进行大数据量的性能测试总结
2007-06-07 07:37 21501) 在处理大数据量时,会有大量的数据缓冲保存在Session ... -
hibernate下数据批量处理解决方案
2007-06-07 07:37 955很多人都对Java在批量数据的处理方面是否是其合适的场所持有怀 ... -
CORBA介绍
2007-06-07 07:51 1787CORBA(Common Object Request Br ...
相关推荐
在IT行业中,分布式服务框架是实现大规模系统高可用、高性能的关键技术之一,而Dubbo、Hessian和RMI则是其中的三个重要组件。本篇将深入解析这些技术及其在实际应用中的示例。 首先,Dubbo是阿里巴巴开源的一款高...
Hession与SpringMVC整合的例子程序,HseServer.zip为服务器端,HseClient.zip为客户端 pom.xml为引用的jar,可以删除一些无用的引用。版本为JDK8,Spring4.3.4,hessian4.0.38
在与Spring框架集成时,Hession 可以帮助开发者轻松实现服务的远程调用,从而构建分布式的微服务架构。 1. **Hession 序列化机制** Hession 使用自定义的二进制序列化协议,能将Java对象转换为字节流,同时也可以...
将Hession与Spring框架结合,可以充分利用Spring的依赖注入、AOP(面向切面编程)等特性,简化服务的发布和消费过程。在Spring中,我们可以使用`HessianServiceExporter`或`HessianProxyFactoryBean`来实现这一目标...
Spring框架允许我们更优雅地管理服务,如通过注解配置服务bean,自动注册到Hession服务器,以及利用Spring的AOP特性添加事务、日志等服务管理功能。学习这部分内容,可以帮助我们更好地理解和应用Hession在企业级...
在Java开发中,Spring框架是广泛应用的轻量级容器,而Hessian是一种高效的远程方法调用(RPC)协议,它使得服务端的方法可以直接在客户端调用,仿佛它们就在同一台机器上。本文将深入探讨如何在Spring框架下结合...
【Hession入门及注入Spring】 Hessian是一种轻量级的RPC(Remote Procedure Call)协议,它基于HTTP协议,主要用于提供二进制序列化的远程方法调用。Hessian使得Java对象能够在网络间高效地进行传输,简化了分布式...
在Spring中配置Hessian服务,我们可以利用Spring的自动装配能力,简化服务的发布和消费过程。 要实现Spring4与Hessian4的结合,你需要完成以下步骤: 1. **配置服务提供方**: - 首先,创建一个服务接口和其实现...
Spring支持多种服务暴露方式,包括HTTP、RMI、JMS等,而Hessian就是其中一种。 Hessian与Spring的集成主要涉及以下几个步骤: 1. **添加依赖**:在项目中引入Hessian的库,这通常通过Maven或Gradle的依赖管理来...
- 引入Hession客户端库:在项目中添加Hession客户端依赖,通常通过Maven或Gradle完成。 - 创建Hession客户端:使用`HessianProxyFactory`创建服务代理对象,指定服务URL和接口类型。 - 调用服务:通过代理对象...
在“Hession调用”中,核心概念包括服务端(Server)和客户端(Client)。服务端提供一系列接口或方法,通过Hession协议暴露这些接口供客户端调用。客户端则通过HTTP请求调用这些服务,就像调用本地方法一样简单。 ...
2. **跨语言**:Hession支持多种编程语言,如Java、C++、Python等,可以实现不同语言的服务间通信。 3. **简单易用**:Hession提供了简单的API,使得开发者可以快速地创建和调用服务。 4. **自动类型转换**:Hession...
hession服务端
在IT行业中,Hessian是一种高效的远程方法调用(Remote Method Invocation, RMI)协议,它由Caucho Technology开发。Hessian提供了一种二进制的序列化格式,使得网络通信更加高效,减少了数据传输量。它支持Java、...
在实际的"**hession例子**"中,我们可能会看到如何配置和启动Hession服务,编写服务接口,创建客户端,以及如何处理调用异常等问题。通过学习和实践这个例子,我们可以深入理解Hession的工作原理,以及如何在实际...
3.1 添加依赖:在项目中引入Hession的相关库,通常通过Maven或Gradle管理依赖。 3.2 创建服务接口:定义服务接口,该接口包含需要暴露给客户端调用的方法。 3.3 实现服务:编写服务接口的实现类,实现具体业务逻辑...
此外,Spring还提供了AOP(Aspect Oriented Programming,面向切面编程)支持,允许我们在不修改原始代码的情况下添加日志、事务管理等功能。 接下来,Hessian4是用于实现这些服务的远程调用。Hessian是一种轻量级...
6. **Spring集成**: 在Spring中使用Hessian,通常需要配置一个HessianExporter,它会暴露一个Spring Bean作为Hessian服务。客户端可以通过HessianProxyFactoryBean创建对服务的代理,然后像调用本地方法一样调用远程...
Hession常用于企业内部的微服务架构中,特别是在需要大量快速通信的高并发场景下,如电商系统中的订单处理、库存管理等。同时,由于其兼容HTTP,也可以作为API Gateway的一部分,对外提供服务。 **与其他RPC框架的...