初始化EJB客户端的Context

编写EJB客户端时取得那个Context对象是比较棘手的一个问题,对于不同的应用服务器,其工厂类和JNDI URL总是不同的,每次都得到处找资料,这次干脆一次性把所有资料都找了一下,写成一个类去获取InitialContext构造函数需要的那个Properties对象。查找的过程比我想象的艰难,这更坚定了我要将它们找出来的决心。目前已找出当今主流J2EE应用服务器的相关资料,有weblogic,websphere,jboss,sun one,oracle application server,JRun,IONA,对于Borland Enterprise Server(BES),大量资料表明它的客户端不需要为InitialContext构造函数提供参数,即Context ctx = new InitialContext()即可,对此我百思不得其解,Borland到底怎么实现获取其它机器上JNDI上下文的呢?所以我将BES对外隐藏了(private)。也许有我未知的东西,有知道的朋友请告知。另外,oracle application server有点特别,有些资料上没有写明它的JNDI端口,并且有时在其JNDI URL中会出现一个附加的Bean类名,这个服务器我没用过,也不知道原因,而JRun不需要提供JNDI服务的协议名,因此为了支持这些情况特地做了一些处理。
以下是这个ContextProperties类的代码:

import java.util.Properties;
import javax.naming.InitialContext;

public class ContextProperties{
    public static final int WEBLOGIC = 0;
    public static final int WEBSPHERE = 1;
    public static final int JBOSS = 2;
    public static final int SUNONE = 3;
    public static final int ORACLE = 4;
    public static final int JRUN = 5;
    public static final int IONA = 6;
    private static final int BES = 7;
    //
    public static final int NULL_PORT = Integer.MAX_VALUE;
    private static final String WEBLOGIC_FACTORY = "weblogic.jndi.WLInitialContextFactory"
;
    private static final String WEBLOGIC_PROTOCOL = "t3"
;
    private static final int WEBLOGIC_PORT = 7001;
    private static final String WEBSPHERE_FACTORY = 
        "com.ibm.websphere.naming.WsnInitialContextFactory"
;
    private static final String WEBSPHERE_PROTOCOL = "iiop";
    private static final int WEBSPHERE_PORT = 2809; //may be 900
    private static final String JBOSS_FACTORY = "org.jnp.interfaces.NamingContextFactory"
;
    private static final String JBOSS_PROTOCOL =
"jnp";
    private static final int JBOSS_PORT = 1099;
    private static final String SUNONE_FACTORY =
"com.sun.jndi.cosnaming.CNCtxFactory";
    private static final String SUNONE_PROTOCOL =
"iiop";
    private static final int SUNONE_PORT = 3700;
    private static final String BES_FACTORY = ""; 
    private static final String BES_PROTOCOL = ""
    private static final int BES_PORT = NULL_PORT;
    private static final String ORACLE_FACTORY =
        "com.evermind.server.rmi.RMIInitialContextFactory"
;
    private static final String ORACLE_PROTOCOL =
"ormi";
    private static final int ORACLE_PORT = 23791; //may be no
    private static final String JRUN_FACTORY =
"jrun.naming.JRunContextFactory";
    private static final String JRUN_PROTOCOL = "";
    private static final int JRUN_PORT = 2908;
    private static final String IONA_FACTORY =
        "com.ejbhome.naming.spi.rmi.RMIInitCtxFactory";
    private static final String IONA_PROTOCOL =
"iiop";
    private static final int IONA_PORT = 9070;
    private static final String DEFAULT_IP = "localhost";

    private ContextProperties(){
    }

    public static Properties newInstance(int serverType, String ip, int port, String addIn){
        String factory = null;
        String protocol = null;
        switch (serverType) {
            case WEBLOGIC :
                factory = WEBLOGIC_FACTORY;
                protocol = WEBLOGIC_PROTOCOL;
                break;
            case WEBSPHERE :
                factory = WEBSPHERE_FACTORY;
                protocol = WEBSPHERE_PROTOCOL;
                break;
            case JBOSS :
                factory = JBOSS_FACTORY;
                protocol = JBOSS_PROTOCOL;
                break;
            case SUNONE :
                factory = SUNONE_FACTORY;
                protocol = SUNONE_PROTOCOL;
                break;
            case ORACLE :
                factory = ORACLE_FACTORY;
                protocol = ORACLE_PROTOCOL;
                break;
            case JRUN :
                factory = JRUN_FACTORY;
                protocol = JRUN_PROTOCOL;
                break;
            case IONA :
                factory = IONA_FACTORY;
                protocol = IONA_PROTOCOL;
                break;
            case BES :
                factory = BES_FACTORY;
                protocol = BES_PROTOCOL;
                break;
        }
        Properties props = new Properties();
        if (factory != null){
            String slash = "";
            if (protocol.length() > 0){
                slash = "://";
            }
            String portString = "";
            if (port != NULL_PORT){
                portString = ":" + port;
            }
            String additivePath = "";
            if (addIn.length() > 0){
                additivePath = "/" + addIn;
            }
            props.put(InitialContext.INITIAL_CONTEXT_FACTORY, factory);
            props.put(InitialContext.PROVIDER_URL, protocol + slash + ip + portString
                            + additivePath);
        }
        return props;
    }

    public static Properties newInstance(int serverType, String ip, int port){
        return newInstance(serverType, ip, port, "");
    }

    public static Properties newInstance(int serverType, String ip){
        int port = Integer.MIN_VALUE;
        switch (serverType) {
            case WEBLOGIC :
                port = WEBLOGIC_PORT;
                break;
            case WEBSPHERE :
                port = WEBSPHERE_PORT;
                break;
            case JBOSS :
                port = JBOSS_PORT;
                break;
            case SUNONE :
                port = SUNONE_PORT;
                break;
            case ORACLE :
                port = ORACLE_PORT;
                break;
            case JRUN :
                port = JRUN_PORT;
                break;
            case IONA :
                port = IONA_PORT;
                break;
            case BES :
                port = BES_PORT;
                break;
        }
        Properties props = new Properties();
        if (port != Integer.MIN_VALUE){
            props = newInstance(serverType, ip, port);
        }
        return props;
    }

    public static Properties newInstance(int serverType){
        return newInstance(serverType, DEFAULT_IP);
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值