我常用的一个JNDI查找类,平进做EJB测试可以用

     以前做EJB测试时,老是要写一堆Properties.setValue之类的,很烦,总是要复制来复制去的,我就写了下面这个类,用起来会方便一点,平时做些小测试,玩玩是可以的,但做企业应用最好不要这样用,因为我把它们的Exception都catch了,只是在控制台输出一些信息,这是不好的做法哦!

下面是JNDIUtil.java的源码,大家直接复制下来,在最顶加个package就可以用了

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

/**
 *
 * @author Dao
 */
public class JNDIUtil
{

    private static InitialContext ctx = null;

    public static Object lookup(String jndiBinding)
    {

        if (ctx == null)
        {

            //下面是JBOSS的配置,如果用其它EJB容器,得换了下面的某些信息
            Properties props = new Properties();
            props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
            props.setProperty("java.naming.provider.url", "localhost:1099");
            props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
            
            try
            {
                ctx = new InitialContext(props);
            }
            catch (NamingException ex)
            {
                System.out.println("InitialContext Exception: may be you used wrong property name or value!");
            }
        }

        try
        {
            return ctx.lookup(jndiBinding);
        }
        catch (NamingException ex)
        {
            System.out.println("JNDI look up Exception: jndi name '" + jndiBinding + "' not found!");
        }

        return null;
    }
}

 

 

下面写个调用的代码出来

package common;

import com.mydomain.HaiHome;
import com.mydomain.HaiRemote;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.rmi.PortableRemoteObject;

/**
 *
 * @author Dao
 */
public class Main
{

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws CreateException, RemoteException
    {

        //下面是EJB2测试调用方法

        Object objRef = JNDIUtil.lookup("HaiEJB");

        HaiHome home = (HaiHome) PortableRemoteObject.narrow(objRef, HaiHome.class);

        HaiRemote remote = home.create();

        System.out.println(remote.sayHai());

        //下面是EJB3测试调用方法

        Object objRef2 = JNDIUtil.lookup("HaiEJB");

        HaiRemote haiRemote = (HaiRemote) objRef2;

        System.out.println(haiRemote.sayHai());
    }
}

 

 

 

其实我平时在做EJB3小应用时,还用偷懒,因为EJB3可以用Annotation,它可以直接在类中绑定JNDI Name,所以我通常都会绑定一个跟他类名一样的JNDI Name,用法如下

 

@Stateless

@Remote({HaiRemote.class})

//如果下面的RemoteBinding用不了,那就是你少了jboss-annotations-ejb3.jar这个包

@RemoteBinding(jndiBinding="HaiSessionBean")    //这里我绑定了跟类名一样的JNDI名称

public class HaiSessionBean implements HaiRemote

{

    public String sayHai(String name)

    {

        return name + " say hello to you!";

    }

}

 

下面我们对JNDIUtil.java加多一个Object lookup(Class cla)方法,改后如下

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

/**
 *
 * @author Dao
 */
public class JNDIUtil
{

    private static InitialContext ctx = null;

    public static Object lookup(String jndiBinding)
    {

        if (ctx == null)
        {
            Properties props = new Properties();
            props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
            props.setProperty("java.naming.provider.url", "localhost:1099");
            props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
            
            try
            {
                ctx = new InitialContext(props);
            }
            catch (NamingException ex)
            {
                System.out.println("InitialContext Exception: may be you used wrong property name or value!");
            }
        }

        try
        {
            return ctx.lookup(jndiBinding);
        }
        catch (NamingException ex)
        {
            System.out.println("JNDI look up Exception: jndi name '" + jndiBinding + "' not found!");
        }

        return null;
    }
    
    public static Object lookup(Class cla)
    {
        String simpleName = cla.getSimpleName();
        
        return lookup(simpleName);
    }
}

 

 

下面我们看看调用时有什么变化

 

import com.mydomain.HaiSessionBean;
import com.mydomain.HaiRemote;
import java.rmi.RemoteException;
import javax.ejb.CreateException;

/**
 *
 * @author Dao
 */
public class Main
{

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws CreateException, RemoteException
    {

        //看下面这句的用法,这样我就避免了使用String,减少出错的机会

        //事实证明,减少String参数的使用,可以减少很多很多不必要的错误哦,当然,要适当时才能这样做

        //因为我的做法是不规范的,你做EJB分布式应用时就知道了,不过平时就,呵呵,省点时间学多点东西吧

        HaiRemote haiRemote = (HaiRemote) JNDIUtil.lookup(HaiSessionBean.class);
        
        System.out.println(haiRemote.sayHai());
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值