有关service controller

03-03-05 烤串
         

我想在app server端通过一种配置的方式实现动态的服务加载,想法如下:

ServiceController是一个stateless session bean,他有一个方法public Object process(Command pCommand),pCommand可以看作是一个参数集合,包含我希望请求的服务,通过这个pCommand,ServiceController 可以查到希望调用的类以及他的方法并通过动态加载的方式把这个类载如虚拟机并调用他相应的方法。这个类可能是一个ejb的client, 也可能本身就包含了业务逻辑的处理。现在的问题是通过什么方式我才能把pCommand中的属性和具体的类及方法对应起来,如果ServiceController是在web server这一端,很容易实现,我可以通过一个xml配置文件,把pCommand中的属性和类的全名以及方法名一一映射。但是现在我的这个ServiceController是一个无状态session bean,我该如何做?我可以在ejb-jar.xml 中通过下面这样的配置来指定希望加载的类。

[env-entry]

[env-entry-name]TestClient[/env-entry-name]

[env-entry-type]java.lang.String[/env-entry-type]

[env-entry-value]test.ejb.TestClient[/env-entry-value]

[/env-entry]

但是要想具体指定到类的方法该如何做?

我的服务器是jboss2.4.6。

         

banq
2003-03-05 17:47

classloader只能定位到一个具体类的load吧,怎么具体指定到类的方法?关注。。

烤串
2003-03-06 09:24

我是打算先那到class,然后在通过reflection 来拿到他的方法,实现方式基本上是这样的:

Class[] parameterClasses = new Class[1];

parameterClasses[0] = Class.forName("javax.servlet.http.HttpServletRequest");

XXClass xxClass = new XXClass();

Method method = null;

method = xxClass.getClass().getMethod(methodName, parameterClasses);

Object[] parameters = new Object[1];

parameters[0] = request;

// invoke the method

method.invoke(xxClass, parameters);

banq
2003-03-06 10:59

你可以定义一个service controller的接口,接口中有一个方法比如:handle(),这样需要使用某个具体service时,你册程序只需要和这个接口打交道,直接操作接口的方法。

烤串
2003-03-06 11:21

可能是 service controller 的叫法容易引起一些误解,其实我现在还没定下来具体怎么定义这个名字,或许叫 service dispatch ? 不管叫什么,我的想法是 service controller 是一个比较纯粹的 stateless session,他根据传入的参数去动态的加载class并调用该class的方法,每个被加载进来的class可以看作是一个服务。这样的话,如果需求变化时,可以通过修改配置文件来修改服务的内容而不需要修改接口。

之所以希望把这个 service controller 放在 app server 这一端,是我想客户端可能会是web browser, stand along application, j2me 等等各种各样不同的类型,如果他们希望与服务端交互的话,只需指明要求的 “服务类型”,“服务类型的方法”,“参数”这3项最基本的要素就成。但是现在我找不到一个合理的把“服务类型”,“服务类型的方法”,“参数”的标示与具体的class,method,parameter name 对应起来的方式。

各位觉得呢?

2Go 1 2 下一页