PHPRPC for Java 为何不采用 xml 配置或 annotation 方式发布服务

[quote="garnoopy"]
有个疑问,比如Java代码里,发布一个Java对象为PHPRPC服务的时候,总要写jsp发布。不知道有没有类似于dwr那样:1、通过xml或者annotation发布一个Java对象。
2、封装一个servlet或者filter,做url映射到某个服务
3、上面两步做到了,集成spring也就容易,无疑对推广phprpc很有用处

客户端调用:PHPRPC_Client client = new PHPRPC_Client("http://192.168.0.1/phprpcServlet/someService"); [/quote]

JSP 不是 PHPRPC 发布的唯一方式,其实可以用更高效的 Servlet 方式发布,而且创建发布 PHPRPC 的 Servlet 跟创建其它的 Servlet 的不同之处在于,它非常简单。它的通常步骤如下:

创建一个空的 Servlet,然后添加 init 和 service 两个方法,其它方法都不需要实现。

init 中可以通过 PHPRPC_Server.addGlobal 方法添加你要发布的对象和类,或者对象和类上的某个或某些方法。这些的对象是全局的,它的生命周期是从服务器启动到服务器关闭。

然后在 service 中直接 new PHPRPC_Server.start(req, resp); 就可以了。

当然,在 service 中你当然还可以通过创建一个 PHPRPC_Server 对象实例,然后通过它的 add 方法来发布服务,但这里发布的服务是针对每个请求的调用,也就是说,如果你在这里创建一个对象,发布该对象上的某个方法,当这个请求执行完之后,这个对象也就被销毁了。当下一个请求来到时,将会创建一个新的对象,执行的也是新的对象上的方法。当然,你也可以在这里将对象放到 Session 中,每次从 Session 中取出,用 add 方法发布,这样就是发布针对会话的调用了。你还可以按照任何逻辑来组织你的代码,然后在发布你想发布的服务。

也即是说,通过这种方式,你可以得到最大的灵活性,并且还可以以最简单的方式完成。

基本上写几行代码就可以完成一个发布的 Servlet,比写 xml 还要方便和灵活。而效率自然比通过读取 xml 然后再靠反射加载类要高效的多。这种方法还实现了零配置和热部署,不管从哪方面来说都优于 xml 配置文件方式。

另外,不用 annotation 方式有三个原因:

第一是 PHPRPC 最低支持到 Java 1.2,而 annotation 是 Java 5 才有的特性,如果现在的版本中使用 annotation 方式,那么就不能兼容低版本的服务器了(在我最初开发时,我们学校项目用的还是 Java 1.4,为了能够用上 PHPRPC,所以当时必须采用这种方式编写),我想现在虽然用 1.4 开发的不多了,但老项目中估计还在用着,而 PHPRPC 就是用来复用旧的代码的最好工具,不需要改写,直接就可发布给新项目用了。

第二是 annotation 具有一定的侵入性,分散的发布方式不利于集中维护。而且给本来独立的提供服务的代码(因为还可以被本机调用)扣上一个无关的 annotation 帽子,总会觉得不伦不类。这也是我不喜欢 CXF 那种 WebService 发布方式的原因。

第三是 annotation 跟 xml 配置文件一样,效率上要低很多,因为通过这种方式实现服务发布是要通过反射来完成的,况且 annotation 和 xml 一样都需要学习新的语法(至少要知道某个选项是什么意思,起什么作用),增加了学习的难度。而且它能提供的能力还很有限,无法提供逻辑处理能力。而通过在 Servlet 中创建代码来发布服务,则可以灵活组合,既高效又方便!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值