`
ldd600
  • 浏览: 103596 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
47bb354f-8b5f-3ea6-a206-c7ead38c741c
Hyperic插件开发不完...
浏览量:11257
社区版块
存档分类
最新评论

让已有的系统开放RMI服务(2)

 
阅读更多

MessageReceiverFactory: 生产MessageReceiver的简单工厂:

public class MessageReceiverFactory {

      private static MessageReceiver messageReceiver;

      private static RemotableMessageReceiver remotableMessageReceiver;

 

      private static void init() throws ServerReceiverException {

            SystemInfo sysInfo = ContextFactory.getSystemConfigContext()

                        .getSystemInfo();

            if (sysInfo.isServer()) {

                  MessageReceiver mifMessageReceiver = new ServerMessageReceiver();

                  if (sysInfo.isRemoteable()) {

                        try {

                              remotableMessageReceiver = new RMIMessageReceiver(mifMessageReceiver);

                        } catch (RemoteException e) {

                              throw new ServerReceiverException(

                                          "bind Message Receiver to port: "

                                                      + sysInfo.getRmiport()

                                                      + " with service name: "

                                                      + sysInfo.getReceiverRmiBindName(), e);

                        }

                  }

                 

                  messageReceiver = new StdMessageReceiver(mifMessageReceiver);

 

            } else {

                  String rmiHost = sysInfo.getRmiHost();

                  int rmiPort = sysInfo.getRmiport();

                  String serviceName = sysInfo.getReceiverRmiBindName();

                  messageReceiver = createRemoteMesageReceiver(rmiHost, rmiPort,

                              serviceName);

            }

      }

 

      public static MessageReceiver createRemoteMesageReceiver(String rmiHost,

                  int rmiPort, String serviceName) throws ServerReceiverException {

            return new RemoteMessageReceiver(rmiHost, rmiPort, serviceName);

      }

 

      public synchronized static MessageReceiver getMessageReceiver() throws ServerReceiverException {

            if(messageReceiver == null) {

                  init();

            }

            return messageReceiver;

      }

     

      public static RemotableMessageReceiver getRemoteableMesageReceiver(){

            return remotableMessageReceiver;

      }

     

      public synchronized static void initMessageReceiver() throws ServerReceiverException {

            init();

      }

}

  

StartUpServlet:

publicclass StartupServlet extends HttpServlet {

      publicvoid init(ServletConfig config) throws ServletException {

            try {

                  //parse configuration

                 

                  //init rmi service

                  MessageReceiverFactory.initMessageReceiver();

     

            } catch (Exception ex) {

                  ex.printStackTrace();

                  thrownew ServletException(ex.getMessage(), ex);

            }

      }

      publicvoid destroy() {

            try {

                 

                  RemotableMessageReceiver remotableMessageReceiver = MessageReceiverFactory

                              .getRemoteableMesageReceiver();

                  if (remotableMessageReceiver != null) {

                        SystemInfo sysInfo = ContextFactory.getSystemConfigContext()

                                    .getSystemInfo();

                        RMIUtils.unBind(sysInfo.getRmiport(), sysInfo

                                    .getReceiverRmiBindName(),

                                    remotableMessageReceiver);

                  }

            } catch (Exception e) {

                  e.printStackTrace();

            }

      }

}

 

RMIUtils: 工具类提供rmi注册和撤销服务的功能:

public class RMIUtils {

      public static void  bind(int rmiPort, String serviceName, Remote remoteObject)

                  throws RemoteException {

            SystemInfo sysInfo = ContextFactory.getSystemConfigContext()

                        .getSystemInfo();

            Remote exportable = (Remote) UnicastRemoteObject

                        .exportObject(remoteObject);

 

            Registry registry = null;

 

            try {

                  registry = LocateRegistry.getRegistry(sysInfo.getRmiport());

                  registry.list();

            } catch (Exception e) {

                  registry = LocateRegistry.createRegistry(sysInfo.getRmiport());

            }

            registry.list();

            System.out.println("bind the service: " + serviceName);

            String bindName = serviceName;

 

            registry.rebind(bindName, exportable);

 

      }

 

     

      public static void unBind(int rmiPort, String serviceName, Remote remoteObject) throws RemoteException {         

            SystemInfo sysInfo = ContextFactory.getSystemConfigContext()

            .getSystemInfo();

 

            Registry registry = LocateRegistry.getRegistry(sysInfo.getRmiport());

 

            String bindName = serviceName;

 

            try {

                  registry.unbind(bindName);

                  UnicastRemoteObject.unexportObject(remoteObject, true);

            } catch (java.rmi.NotBoundException nbe) {

            }

      }

}

分享到:
评论

相关推荐

    基于Java的邮件收发管理系统设计与实现开题报告改.doc

    尽管国外已有成熟的邮件系统,但国内的邮件服务仍有待完善和普及。因此,设计一个简单易用的Java邮件系统,既能满足用户需求,也能推动国内邮件服务的发展。 2. 文献综述 J2EE架构是目前企业级应用开发的主流选择,...

    Dubbox 2.8.4相关jar包

    - **与现有REST服务集成**:如果已有REST服务,Dubbo-rpc-rest可以方便地与这些服务集成,实现微服务间的互通。 3. **RESTful服务与Dubbo的结合** 将RESTful服务与Dubbo结合,可以充分利用两者的优势。RESTful...

    JMX 远程服务器信息监控

    Java Management Extensions(JMX)是Java平台提供的一种标准管理框架,用于管理和监控应用程序、系统和服务。在本场景中,我们关注的是如何利用JMX来远程监控服务器上的关键资源,如CPU利用率、内存状态、已加载类...

    JAVA_API1.6文档(中文)

    javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的已优化的二进制数据。 javax.xml.bind.helpers 仅由 JAXB 提供者用于: 提供某些 javax.xml.bind 接口的...

    jboss5.0.1GA端口配置

    - 使用网络工具如`netstat`或`telnet`等验证端口是否已被正确占用,并确保服务正常运行。 #### 四、示例代码 为了更好地理解上述步骤,下面提供一个简单的示例来展示如何修改`bindings.xml`文件中的端口配置: ``...

    HPE 1-8 自动加载磁带机使用指南

    - **LTO(线性磁带开放标准)**:指的是线性磁带开放标准,目前已有多个版本,比如 LTO-4,每一代都提供了更高速的数据传输能力和更大的存储容量。 - **KMIP(密钥管理互操作性协议)**:KMIP 是一种网络协议,用于...

    java面试第六部分:java高频面试题

    - **方法引用**:直接引用已有的方法,如`::`操作符,减少冗余代码。 - **默认方法**:接口中可以定义带有默认实现的方法,增强了接口的功能。 - **Stream API**:提供了一种新的集合操作方式,方便进行数据过滤...

    JDK_1_6 API

    javax.swing 提供一组“轻量级”(全部是 Java 语言)组件,尽量让这些组件在所有平台上的工作方式都相同。 javax.swing.border 提供围绕 Swing 组件绘制特殊边框的类和接口。 javax.swing.colorchooser 包含供 ...

    JavaAPI中文chm文档 part2

    javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的已优化的二进制数据。 javax.xml.bind.helpers 仅由 JAXB 提供者用于: 提供某些 javax.xml.bind 接口的...

    java api最新7.0

    javax.swing 提供一组“轻量级”(全部是 Java 语言)组件,尽量让这些组件在所有平台上的工作方式都相同。 javax.swing.border 提供围绕 Swing 组件绘制特殊边框的类和接口。 javax.swing.colorchooser 包含供 ...

    JavaAPI1.6中文chm文档 part1

    javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的已优化的二进制数据。 javax.xml.bind.helpers 仅由 JAXB 提供者用于: 提供某些 javax.xml.bind 接口的...

    [Java参考文档]

    javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的已优化的二进制数据。 javax.xml.bind.helpers 仅由 JAXB 提供者用于: 提供某些 javax.xml.bind 接口的...

    J2EE入门 ppt

    J2EE(Java 2 Platform, Enterprise Edition)是Sun Microsystems(现已被Oracle收购)推出的一个企业级应用开发平台,专为构建分布式、多层的、面向服务的(SOA,Service-Oriented Architecture)应用程序而设计。...

    [Java参考文档].JDK_API 1.6

    javax.swing 提供一组“轻量级”(全部是 Java 语言)组件,尽量让这些组件在所有平台上的工作方式都相同。 javax.swing.border 提供围绕 Swing 组件绘制特殊边框的类和接口。 javax.swing.colorchooser 包含供 ...

    java培训学习大纲.docx

    8. **就业服务**:与多家企业有合作关系,确保学员毕业后一周内找到工作,合作企业包括IBM、中国移动等。 9. **培训课程详解**:针对Oracle和MySQL数据库进行深入讲解,并根据市场需求和合作企业的要求定制课程内容...

Global site tag (gtag.js) - Google Analytics