如果所有工作都在我的Web服务器上完成,它很快就会过载。我打算在其后架设第二个服务器来处理数据。
EJB相对于RMI的优势是什么?反之呢?
那么Web服务(SOAP,REST)呢?
如果所有工作都在我的Web服务器上完成,它很快就会过载。我打算在其后架设第二个服务器来处理数据。
EJB相对于RMI的优势是什么?反之呢?
那么Web服务(SOAP,REST)呢?
EJB是建立在RMI之上的,两者都涉及Java客户端和Bean。如果您的客户端需要使用其他语言编写(例如.NET、PHP等),请使用Web服务或其他支持平台无关的传输协议(如HTTP或XML over HTTP或SOAP)。
如果选择RMI,则不需要Java EE EJB应用服务器。您必须保持客户端和服务器JVM同步;您无法升级客户端而不升级服务器。您必须自己编写EJB应用服务器提供的所有服务(例如连接池、命名和目录服务、池化、请求排队、事务等)。
RMI在思考时相当低级。为什么要退回到CORBA呢?
与Spring相比,更好的选择是EJB 3.0。这取决于您是否喜欢POJO开发,是否想要除ORM和JPA之外的关系技术选择等因素。
您可以支付Java EE应用服务器(例如WebLogic、WebSphere)的费用,也可以使用开源的服务器(JBOSS、Glassfish、OpenEJB和ActiveMQ),或者坚持使用Spring并在Tomcat、Jetty、Resin或任何其他Servlet/JSP引擎上部署。
Spring通过技术无关性提供了很多选择:持久化(Hibernate、iBatis、JDBC、JDO、JPA、TopLink)、远程调用(HTTP、Hessian、Burlap、RMI、SOAP Web服务)等。
EJB 3.0是一个有多个供应商实现的规范;Spring只能从Spring Source获得。
我建议使用Spring。它非常稳定,具有很高的吸引力,并且不会消失。它留下了您所有的选择。
Web服务在理论上很棒,但有一些需要注意的问题:
Spring的web服务模块非常好,但是在选择部署方式时要小心。采用POJO服务接口编写。这将使您获得所需的概念隔离,延迟部署选择到最后一刻,并且能够更改想法,如果第一个想法性能不佳。
关于web服务(SOAP,REST)
如果您的后端服务器不会公开展示,那么使用平台无关的Web服务接口(如SOAP / REST)将不会给您带来任何好处。
实际上,您将承担由XML标签包装数据所添加的所有开销,还有从XML到Java对象的编组和解组所带来的影响。
尽管任何分布式调用都需要一定级别的序列化-即使是RMI / EJB,但当序列化为人类可读的XML时,代价更大。
您可能根本不需要在Java中编写远程调用,您可以使用纯Apache HTTPD实例作为服务前端,该实例配置为通过mod_jk或mod_proxy跨多个Java服务器进行负载均衡。
这些模块可用于负载平衡各种Servlet容器,例如Tomcat / Jetty,或EJB容器,例如JBoss / GlassFish。