`
lifaming15
  • 浏览: 64851 次
  • 来自: ...
文章分类
社区版块
存档分类

WebLogic RMI 编程(三)

 
阅读更多

如何实现 WebLogic RMI

构成所有远程对象的基本单元为接口 java.rmi.Remote,它不包含任何方法。可以扩展此“标记”接口(即,它作为标识远程类的标记),以便使用创建远程对象结构的方法存根控件创建自己的远程接口。随后,可使用远程类实现自己的远程接口。此实现会绑定到注册表中的一个名称,客户端或服务器可在注册表中查找对象并远程使用该对象。

如果已经编写了 RMI 类,则可以通过更改远程接口以及扩展此接口的类上的导入语句,将其置于 WebLogic RMI 中。要添加对客户端应用程序的远程调用,请按名称在注册表中查找对象。WebLogic RMI 异常与 java.rmi 异常完全相同,并对其进行了扩展,因此现有接口和实现不必更改异常处理。


实现 WebLogic RMI 的步骤

以下部分描述如何实现 WebLogic Server RMI:

创建可以远程调用的类

只需几个步骤,即可编写自己的 WebLogic RMI 类。下面是一个简单示例。

步骤 1. 编写远程接口

可被远程调用的每个类都实现一个远程接口。使用一种 Java 代码文本编辑器,编写符合下列准则的远程接口。

  • 远程接口必须扩展接口 java.rmi.Remote(其中不包含任何方法签名)。在实现接口的每个远程类中包含将实现的方法签名。有关如何编写接口的详细信息,请参阅 Sun Microsystems JavaSoft 教程中的“Creating Interfaces”。
  • 远程接口必须是公共的。否则,客户端在尝试加载实现它的远程对象时将出现错误。
  • 与 JavaSoft RMI 不同,没有必要让接口中的每个方法都在其 throws 块中声明 java.rmi.RemoteException。应用程序引发的异常可以特定于应用程序,并且可以扩展 RuntimeException。WebLogic RMI 为 java.rmi.RemoteException 设置了子类,因此如果已存在 RMI 类,将不必更改异常处理。
  • 远程接口不会包含很多代码。您所需要的只是要在远程类中实现的方法的方法签名。

    下面是远程接口的示例,方法签名为 sayHello()

    package examples.rmi.multihello;

    import java.rmi.*;

    public interface Hello extends java.rmi.Remote {

    String sayHello() throws RemoteException;

    }

对于 JavaSoft 的 RMI,每个实现远程接口的类必须有附带的、预先编译的代理。WebLogic RMI 支持更灵活的运行时代码生成;WebLogic RMI 支持动态代理和动态创建的字节代码(类型正确,但又独立于实现接口的类)。如果类实现单一的远程接口,则编译器生成的代理和字节代码将与远程接口具有相同的名称。如果类实现多个远程接口,则编译生成的代理和字节代码的名称将取决于编译器使用的名称重整。

步骤 2. 实现远程接口

仍使用 Java 代码文本编辑器,编写用于远程调用的类。此类应实现在步骤 1 中编写的远程接口,这意味着需要实现接口中包含的方法签名。目前,WebLogic RMI 中出现的所有代码的生成都取决于这个类文件。

对于 WebLogic RMI,类不需要扩展 UnicastRemoteObject,而 JavaSoft RMI 则要求扩展它。(可以扩展 UnicastRemoteObject,但这不是必需的。)这样便能够保持一个对您的应用程序有意义的类层次。

注意: 在 Weblogic Server 中,Weblogic RMI 和标准 JDK RMI 均可使用。如果使用 Weblogic RMI,则必须将“java weblogic.rmic ...”作为 rmic 编译器使用,并且不得将 RMI 实现作为“java.rmi.server.UnicastRemoteObject”的子类创建。如果使用标准 JDK RMI,则必须将“%JAVA_HOME%/bin/rmic”作为 rmic 编译器使用,并且必须将 RMI 实现类作为“java.rmi.server.UnicastRemoteObject”的子类创建。

类可以实现多个远程接口。类也可以定义非远程接口中的方法,但是不能远程调用这些方法。

此示例将实现一个类,此类创建多个 HelloImpl 并将每个 HelloImpl 都绑定到注册表中的一个唯一的名称。方法 sayHello() 问候用户,并标识已远程调用的对象。

package examples.rmi.multihello;
import java.rmi.*;
public class HelloImpl implements Hello {
  private String name;
  public HelloImpl(String s) throws RemoteException {
    name = s;
  }
  public String sayHello() throws RemoteException {
    return "Hello! From " + name;
  }

接下来,编写一个 main() 方法,以创建远程对象的实例,并通过将其绑定到一个名称(指向对象的实现的 URL)将其注册到 WebLogic RMI 注册表中。需要获取代理以远程使用对象的客户端将能够按名称查找此对象。

下面是 HelloImpl 类的 main() 方法的示例。它将 HelloImpl 对象注册到 WebLogic Server 注册表中的名称 HelloRemoteWorld 下。

  public static void main(String[] argv) {
    // WebLogic RMI 中不需要
    // System.setSecurityManager(new RmiSecurityManager());
    // 但是如果包含此行代码,就应该
    // 使它成为有条件的,如这里所显示:
    // if (System.getSecurityManager() == null)
    //   System.setSecurityManager(new RmiSecurityManager());
    int i = 0;
    try {
      for (i = 0; i < 10; i++) {
        HelloImpl obj = new HelloImpl("MultiHelloServer" + i);
        Context.rebind("//localhost/MultiHelloServer" + i, obj);
	System.out.println("MultiHelloServer" + i + " created.");
      }
      System.out.println("Created and registered " + i +
                         " MultiHelloImpls.");
    }
    catch (Exception e) {
      System.out.println("HelloImpl error: " + e.getMessage());
      e.printStackTrace();
    }
  }

WebLogic RMI 并不要求您设置安全管理器以将安全性集成到应用程序中。安全是由 WebLogic Server 对 SSL 和 ACL 的支持处理的。如果必须设置安全管理器,则可以使用自己的安全管理器,但不要将其安装在 WebLogic Server 中。

步骤 3. 编译 Java 类

使用 javac 或某些其他 Java 编译器编译 .java 文件,以便生成远程接口的 .class 文件以及实现它的类。

步骤 4. 使用 RMI 编译器编译实现类

对远程类运行 WebLogic RMI 编译器 (weblogic.rmic),以便在运行过程中生成动态代理和字节代码。代理是远程对象的客户端代理,它将每个 WebLogic RMI 调用转发到与其匹配的服务器端字节代码,而此字节代码又依次将此调用转发到实际远程对象实现。要运行 weblogic.rmic,请使用命令模式:

  $ java weblogic.rmic nameOfRemoteClass

其中,nameOfRemoteClass 是实现远程接口的类的完整包名。对于前面使用的示例,命令将为:

  $ java weblogic.rmic examples.rmi.hello.HelloImpl

如果在创建存根控件或骨架类时需要保留生成的源代码,请在运行 weblogic.rmic 时设置标志 –keepgenerated。有关可用的命令行选项列表,请参阅 WebLogic RMI 编译器选项

步骤 5. 编写调用远程方法的代码

使用一种 Java 代码文本编辑器,在 WebLogic Server 上编译和安装了远程类、它实现的接口以及其代理和字节代码后,即可为 WebLogic 客户端应用程序添加代码,以便调用远程类中的方法。

通常,只需一行代码:获得对远程对象的引用。使用 Naming.lookup() 方法来完成此任务。下面是一个简短的 WebLogic 客户端应用程序,它使用上一示例中创建的对象。

package mypackage.myclient;
import java.rmi.*;
public class HelloWorld throws Exception {
  // 查找 WebLogic 注册表中的
  // 远程对象
  Hello hi = (Hello)Naming.lookup("HelloRemoteWorld");
  // 远程调用方法
  String message = hi.sayHello();
  System.out.println(message);
}

此示例演示将 Java 应用程序作为客户端使用。

Hello 代码示例

下面是 Hello 接口的完整代码。

package examples.rmi.hello;
import java.rmi.*;
public interface Hello extends java.rmi.Remote {
  String sayHello() throws RemoteException;
}

下面是实现 Hello 接口的 HelloImpl 类的完整代码。

package examples.rmi.hello;
import java.rmi.*;
public class HelloImpl
    // WebLogic RMI 中不需要:
    // 扩展 UnicastRemoteObject
    implements Hello {
  public HelloImpl() throws RemoteException {
    super();
  }
  public String sayHello() throws RemoteException {
    return "Hello Remote World!!";
  }
  public static void main(String[] argv) {
    try {
      HelloImpl obj = new HelloImpl();
      Naming.bind("HelloRemoteWorld", obj);
    }
    catch (Exception e) {
      System.out.println("HelloImpl error: " + e.getMessage());
      e.printStackTrace();
    }
  }
}
分享到:
评论

相关推荐

    weblogic讲义

    此外,WebLogic Server还利用JMS进行消息传递,JDBC进行数据库访问,以及RMI和IIOP实现ORB通信。 总的来说,WebLogic Server是构建和运行J2EE应用程序的关键组件,提供了丰富的功能和工具,以支持企业级应用的开发...

    WebLogic JMS 介绍 打印版

    10. 可以利用WebLogic服务器的其他API和特性,如EJB、JDBC连接池、Servlets和RMI。 三、WebLogic JMS的架构 WebLogic JMS架构主要包括以下组件: 1. WebLogic JMS服务器:实现了消息通信的特性,负责消息的发送和...

    wlfullclient.jar(weblogic完整jar包)

    `wlfullclient.jar`包含了与EJB交互所需的客户端API,使得开发者可以在客户端代码中调用EJB方法,进行远程方法调用(RMI)或者使用EJB 3.1以上的轻量级注解驱动的编程模型。 **JMS(Java Message Service)** JMS是...

    wlfullclient.jar 客户端开发包 rmi\jms\ejb3 网络安全人必备

    本文将详细介绍`wlfullclient.jar`客户端开发包,它是一个专为WebLogic服务器开发的全面工具集,包含了对RMI(Remote Method Invocation)、JMS(Java Message Service)和EJB3(Enterprise JavaBeans 3.0)的支持,...

    weblogic集群测试.pdf

    集群中的WebLogic服务器通过内部通信机制(比如IIOP、RMI等)和分布式对象管理来实现负载均衡和故障转移。 ### 故障转移(Failover)与负载均衡(Load balancing) 故障转移是指当集群中的一个服务器实例发生故障时...

    bea RMI 培训

    【分布式对象与RMI简介】 分布式对象是一种跨越网络的编程模型,它允许不同的计算机...在BEA Weblogic Server这样的平台上,RMI可以与其他高级特性如EJB(Enterprise JavaBeans)结合,构建更复杂、健壮的分布式系统。

    漫谈WebLogic-CVE-2020-25511

    2. RMI是Java的一种远程方法调用机制,使得客户机可以调用远程服务器上的对象,简化了分布式环境下的编程。 3. JRMP(Java Remote Method Protocol)是Java RMI使用的特定协议,位于TCP/IP之上,用于查找和引用远程...

    JAVA编程学习的正确顺序

    在掌握了服务器使用配置后,需要学习JAVA网络编程,包括Socket、RMI、HTML、XML、JSP、JavaBean、Servlet等。同时,需要掌握Rational Rose、Ant、CVS版本控制、MyEclipse、Dreamweave等开发工具使用。 第4阶段:...

    java 企业编程思想

    Tomcat、Jetty等Servlet容器运行Java Web应用,而WebLogic、WebSphere等应用服务器提供了更全面的企业级服务,如EJB支持、事务管理等。 八、测试与持续集成 JUnit是Java单元测试的常用工具,Mockito等库帮助我们...

    Java网络高级编程

    第9章则聚焦于利用WebLogic服务器的EJB(Enterprise JavaBeans)技术,EJB是一种用于开发企业级应用的组件架构。 第10章的内容是Java安全体系结构,包括密钥、消息摘要、数字签名、访问控制、安全套接口SSL、主体...

    关于在集群中编程的问题

    在实现集群编程时,还需要考虑通信协议(如RMI、XML-RPC、Web Service、Corba等)的选择,以及如何处理分布式环境下的并发控制、数据一致性、网络延迟等问题。理解并掌握这些概念和技术,对于构建可扩展且健壮的...

    计算机软件JAVA编程优势及其应用研究.pdf

    而在企业级应用服务器领域,如JBoss、WebLogic和WebSphere等,Java技术同样占据了重要的地位。 综上所述,Java编程技术因其实时、独立和安全等优势,在计算机软件开发领域发挥了重要作用,并且已经发展成为一个不可...

    [怪兽搜索]《Java网络高级编程》[Pdf][www.guai.so].zip

    第1章介绍Java远程方法调用RMI;第3章介绍Java与CORBA不同体系的组件间的通信技术;第6章介绍JSP技术。第7-9间主要介绍Java有关的Web技术。其中,第4章介绍Javabean技术;第5章介绍Java XML技术;第8章介绍异步消息...

    基于Java的实例开发源码-EJB编程实例代码.zip

    EJB规范定义了三种主要的组件类型: 1. **会话Bean(Session Beans)**:这些组件代表了业务逻辑,通常用于处理单个客户端请求。会话Bean可以是无状态的,即每个客户端请求都被视为独立,或者有状态的,其中组件...

    h_JAVA 2应用编程150例.rar

    实例117 C/S结构的RMI-IIOP应用 414 实例118 使用JTA与JTS 417 实例119 Request-Reply模式的JMS应用 421 实例120 使用Java IDL 426 实例121 EJB与CORBA的交互 430 实例122 基于EJB的真实世界模型 433 实例123 EJB的...

Global site tag (gtag.js) - Google Analytics