jboss 远程访问服务

JBoss除了提供MBean服务这种方式将任意的功能集成进来以外,还提供了分离调用的功能.它能将MBean的功能接口通过任意的协议供客户端远程访问.分离调用器的意义:远程访问以及访问服务的协议是一个相对于组件独立的服务.也就是说,可以将名称服务通过RMI/JRMP 或RMI/HTTP等任意的传输协议来进行访问.

分离调用器的架构

客户端这边有一个客户端代理,它提供MBean服务的动态代理接口,与EJB代理不同的是:解释器在代理里面而不是外面,客户端通过某种查找机制(比如JNDI)得到代理对象.

传输层的选择是由客户端代理的最后一个解释器(调用解释器)决定,调用解释器获得与传输协议相关的存根对象,这个存根对象对应服务器端分离MBean服务的分离调用器.调用解释器同时也会对同一个虚拟机中的调用的目标MBean进行一些优化.当调用解释器发现这种情况,这个调用会被转交给一个通过引用调用的调用器,这个调用器仅仅是将调用转交给目标MBean来进行.

分离调用器服务的功能即:通过分离调用器所能处理的任何协议,都能进行分离的调用操作.

 invoke接口如下:

package org.jboss.invocation;

import java.rmi.Remote;

import org.jboss.proxy.Interceptor;

import org.jboss.util.id.GUID;


public interface Invoker
   extends Remote
{   
   /**
    * A globaly unique identifier use to determine if an instance is local
    * to the invoker.
    */

   GUID ID = new GUID();
  
   /**
    * A free form String identifier for this delegate invoker, can be clustered or target node
    * This should evolve in a more advanced meta-inf object
    */
   String getServerHostName() throws Exception;
  
   /**
    * The invoke with an Invocation Object.
    *
    * <p>
    * the delegate can handle network protocols on behalf of proxies (proxies delegate to these
    * puppies). We provide default implemenations with JRMP/Local/Clustered invokers.
    * The delegates are not tied to a type of invocation (EJB or generic RMI).
    *
    * @param invocation    A pointer to the invocation object
    * @return              Return value of method invocation.
    *
    * @throws Exception    Failed to invoke method.
    */
   Object invoke(Invocation invocation) throws Exception;
}

分离调用器的作用相当于一个传输网关,能够基于特定的协议接受org.jboss.invocation.Invocation对象形式的调用请求,将请求对象序列化,然后转给目标MBean服务进行调用,再将返回值或异常返回给客户端.

Invocation对象是一个方法调用的上下文信息对象,包含了目标MBean的名称,方法以及方法的参数,有代理工厂产生的代理相关的上下文信息,以及客户端代理解释器进行方法调用时所需的参数.

客户端代理的配置是通过服务器端的代理工厂这个MBean来完成,代理工厂执行的任务如下:

1 创建一个动态代理,实现将要提供给客户端访问的MBean服务接口

2 将动态代理的句柄与客户端解释器进行关联

3 将代理绑定到JNDI中供客户端访问

通过指定的接口访问MBean服务的步骤如下:

1 定义一个匹配JMX操作声明的方法:public Object invoke(org.jboss.invocation.Invocation)throw Exception

2 使用org.jboss.invocation.MarshalledInvocation.calculateHash方法,创建从提供接口java.lang.reflect.methods到长散列值对象Hashmap<long,Method>映射

3 实现invoke方法,使用这个接口方法的散列映射,将被调用方法的长散列映射转为公开接口java.lang.reflect.methods通过反射机制来调用开放接口的MBean服务相关的对象

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值