你是否曾想编写一个可以穿越来访问EJBs的J2EE应用程序?这会很麻烦,开发人员必须用各种迂回的方法,而没有一种是“特别好的”。开发人员通常写一个servlet来截取HTTP请求,并将它们导向到EJBs,这种方法很不正规。
另一种方法是运用信道(tunneling)技术,如HTTP上的RMI,这种方法会给性能带来很大的影响。除了上述的两种方法外,还有一种更好的方法。通过运用 Secure Socket Extension(JSSE),你就可以很好地解决这个问题。
在一个J2EE应用程序中,Enterprise Beans(EJB)通常是位于应用程序中的,而且一个Web前端是用servlets、JavaServer Pages(JSP)和标签库创建的。在大多数情况下,这些组件都位于企业的同一側,他们之间没有防火墙(见图1)。
图1. 传统的J2EE应用程序 但有时侯,防火墙会把客户端同隔离开(见图2)。在一个典型的例子中,一个胖客户端(thick client)(如一个基于Swing的客户端)与一个应用程序服务器交互。(这些客户端通常用诸如Java Web Start这样的技术来安装,所以最终用户既可以得到自动化部署的好处,也可以得到一个富客户端的好处。)
这就会出现一个问题。Remote Method Invocation(RMI)是在Java Remote Methods Protocol(JRMP)、Internet Inter Orb Protocol(IIOP)、或一个如T3的私有上实现的。要穿越防火墙实现RMI而又不在防火墙中另外打洞,就需要我们采用一些方法。
大多数可选方法都有不足,这个问题有许多解决方法,每种方法都各有利弊。你可以尝试HTTP上的RMI信道技术。JavaSoft中的RMI带有一个缺省的HTTP信道机制。如果RMI引擎不能用JRMP联系RMI服务器,它就会开一个通道,使请求穿过HTTP并与一个可以截取这个请求的Web组件对话。
JavaSoft提供了一个CGI脚本和一个servlet,它们可以截取这些请求并将这些请求导向到适当的EJBs。然而,这种方法不支持HTTPS,所以如果需要的访问,你就必须实现HTTPS信道。另外,甚至连JavaSoft都说,HTTP上的RMI信道可能会让性能严重下降。
【责编:admin】
--------------------next---------------------
阅读(327) | 评论(0) | 转发(0) |