Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在没有JSP/Servlet作为中间层的情况下,从另一台机器上的独立客户端通过internet调用在远程机器上运行的EJB?_Java_Jakarta Ee_Servlets_Ejb_Weblogic - Fatal编程技术网

Java 如何在没有JSP/Servlet作为中间层的情况下,从另一台机器上的独立客户端通过internet调用在远程机器上运行的EJB?

Java 如何在没有JSP/Servlet作为中间层的情况下,从另一台机器上的独立客户端通过internet调用在远程机器上运行的EJB?,java,jakarta-ee,servlets,ejb,weblogic,Java,Jakarta Ee,Servlets,Ejb,Weblogic,案例: 开发一个独立的java客户端,它将在多用户桌面上的不同位置上运行。 应用服务器(Oracle Weblogic)将在不同位置的集中位置运行 现在我想从客户端访问/调用运行在中央服务器上的EJB(会话Bean)。 由于客户端和服务器位于不同的位置,并且没有通过Intranet或LAN进行连接,所以连接的唯一媒介是internet 我的问题是,如何直接从客户机调用服务器中的EJB,而不在两者之间使用servlet/JSP层 EJB是为远程访问而设计的,为什么是servlet依赖 我已经读到R

案例: 开发一个独立的java客户端,它将在多用户桌面上的不同位置上运行。 应用服务器(Oracle Weblogic)将在不同位置的集中位置运行

现在我想从客户端访问/调用运行在中央服务器上的EJB(会话Bean)。 由于客户端和服务器位于不同的位置,并且没有通过Intranet或LAN进行连接,所以连接的唯一媒介是internet

我的问题是,如何直接从客户机调用服务器中的EJB,而不在两者之间使用servlet/JSP层

EJB是为远程访问而设计的,为什么是servlet依赖

我已经读到RMI-IIOP可以用来建立这种类型的连接,但我无法通过互联网使用RMI-IIOP


这种远程通信的最佳体系结构/解决方案是什么?

没有servlet依赖关系。存在特定于应用程序服务器的自定义客户端/协议依赖项。每台服务器都有自己的连接设置方式,通过为适当的提供者和协议处理程序配置JNDI来实现

为什么RMI-IIOP不能在互联网上工作?我能看到的唯一潜在问题是安全性,我不知道是否有RMI-IIOP的加密版本,但除此之外,它是一个完全可路由的协议

您可能会遇到端口和防火墙问题,但这不是协议故障。如果您想在端口80(http的端口)上运行RMI-IIOP,那么这很好(显然,它不是http,也不能使用http代理,但同样,这不是协议问题)

Weblogic也有自己的协议,T3?我想是吧?你能用这个吗


我认为关键是为什么你认为你不能“在互联网上”运行RMI-IIOP,并试图解决这个问题,而不一定要使用什么协议。

没有servlet依赖性。存在特定于应用程序服务器的自定义客户端/协议依赖项。每台服务器都有自己的连接设置方式,通过为适当的提供者和协议处理程序配置JNDI来实现

为什么RMI-IIOP不能在互联网上工作?我能看到的唯一潜在问题是安全性,我不知道是否有RMI-IIOP的加密版本,但除此之外,它是一个完全可路由的协议

您可能会遇到端口和防火墙问题,但这不是协议故障。如果您想在端口80(http的端口)上运行RMI-IIOP,那么这很好(显然,它不是http,也不能使用http代理,但同样,这不是协议问题)

Weblogic也有自己的协议,T3?我想是吧?你能用这个吗


我认为关键是为什么你认为你不能“在互联网上”运行RMI-IIOP,并试图解决这个问题,而不一定要使用什么协议。

好吧,EJB根本不依赖于servlet。可以使用RMI/IIOP直接调用它们。 您必须面对的唯一问题是网络结构,我的意思是RMI/IIOP使用一些通常在公司防火墙中不打开的端口,打开它们可能非常困难。 所以通常最好发出HTTP请求,因为几乎所有防火墙都接受这种请求

因此,如果您在内部网中(客户机和服务器在同一内部网中),您可以使用RMI/IIOP,但是如果您的客户机和服务器位于不同的网络中,并且具有internet连接,那么我建议您使用HTTP。 您可以使用web服务并将EJB“导出”为web服务。 如果您不想使用Webservices,那么可以实现一个servlet,该servlet接收HTTP请求并调用EJB。这取决于必须返回到客户端的对象类型。
如果它是一个简单的字符串或不太复杂的东西,那么您甚至可以使用Servlet,但是如果它们是对象,那么Servelt解决方案就不是正确的选择。

那么EJB根本不依赖于Servlet。可以使用RMI/IIOP直接调用它们。 您必须面对的唯一问题是网络结构,我的意思是RMI/IIOP使用一些通常在公司防火墙中不打开的端口,打开它们可能非常困难。 所以通常最好发出HTTP请求,因为几乎所有防火墙都接受这种请求

因此,如果您在内部网中(客户机和服务器在同一内部网中),您可以使用RMI/IIOP,但是如果您的客户机和服务器位于不同的网络中,并且具有internet连接,那么我建议您使用HTTP。 您可以使用web服务并将EJB“导出”为web服务。 如果您不想使用Webservices,那么可以实现一个servlet,该servlet接收HTTP请求并调用EJB。这取决于必须返回到客户端的对象类型。
如果它是一个简单的字符串或不太复杂的东西,那么您甚至可以使用Servlet,但如果它们是对象,那么Servelt解决方案就不是正确的选择。

请记住,EJB是商业逻辑的统一单元,它们与协议无关。向调用者公开它是应用服务器的工作。RMI-IIOP/CORBA只是默认值

IIOP的internet路由问题与许多协议类似,这不是因为它们不在internet上路由,而是因为它们没有内置简单的代理/反向代理功能。因此,在DMZ中存在问题。与支持反向代理的HTTP相比,SMTP允许中继。防火墙端口通常也是关闭的,您通常不会将应用程序服务器放在DMZ中

为了解决让外部网络直接访问业务逻辑的问题,我通常会将协议更改为专为外部网络通信设计的协议。例如,使用@WebMethod注释EJB(或部署描述符),并自动将其作为SOAP服务提供,或者使用@PATH