永发信息网

如何实现 WebLogic RMI

答案:1  悬赏:20  手机版
解决时间 2021-03-20 02:37
如何实现 WebLogic RMI
最佳答案
可以扩展此“标记”接口(即,它作为标识远程类的标记),以便使用创建远程对象结构的方法存根控件创建自己的远程接口。随后,可使用远程类实现自己的远程接口。此实现会绑定到注册表中的一个名称,客户端或服务器可在注册表中查找对象并远程使用该对象。 如果已经编写了 RMI 类,则可以通过更改远程接口以及扩展此接口的类上的导入语句,将其置于 WebLogic RMI 中。要添加对客户端应用程序的远程调用,请按名称在注册表中查找对象。WebLogic RMI 异常与 java.rmi 异常完全相同,并对其进行了扩展,因此现有接口和实现不必更改异常处理。 实现WebLogic RMI 的步骤 以下部分描述如何实现 WebLogic Server RMI: 创建可以远程调用的类步骤1. 编写远程接口步骤2. 实现远程接口步骤3. 编译 Java 类步骤4. 使用 RMI 编译器编译实现类步骤5. 编写调用远程方法的代码Hello 代码示例 创建可以远程调用的类 只需几个步骤,即可编写自己的 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 接口的完整代码。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
股票求助:假如我买了1000的股票,是不是这个公
iCloud怎么备份音乐?
香柏木和橡木哪个性价比更高?
求2012年企业财务报表EXCEL格式
刘德凯嘉庆君有台湾哪里可以下载的?
牛角冲地址有知道的么?有点事想过去
手臂越粗越有劲吗
虎牙助手的昵称怎么改
恋爱零距离台湾版电视剧
冷库3匹压缩机要装多少雪种
怎么去看清身边的人,证明他不是瘾君子?
杭州市民卡电子钱包的钱可以退吗?
人体大量蒸出汗液会倒致脑梗吗?
起一个跟丁字的网名
大闸蟹蒸熟了放上一夜还能不能吃了
推荐资讯
2017年在淘宝上开给别人充值的店赚钱吗?有什
上次好友帮我的车换了个机油,感觉比之前在4S
鑫吉祥装饰地址有知道的么?有点事想过去
我有一三轮车从燕郊邮到南乐需要多少钱。具体
博讯电子科技公司在什么地方啊,我要过去处理
谁有 这 是 僵 尸 吗?第一季和第二季无修超
先天性口吃和后天性有什么区别
张杰和谢娜哪年认识的?
蘸印泥的印章怎么印?
求教“勿恃已善,不服人仁。勿矜已艺,不敬人
11. 如图,在矩形OABC中,点E、F分别在线段AB
微信怎么解除微店
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?