`
Gavin.Chen
  • 浏览: 325838 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

我常用的一个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());
    }
}

 

分享到:
评论
1 楼 yongtree 2009-07-15  
你这是jboss服务器下的写法,并不是通用的jndi查找类,如果应用到weblogic等服务器上,你的jndi调用就会有问题。

相关推荐

    JNDI调用分布式EJB3 通用接口

    6. **分布式EJB3**:如果EJB3组件部署在多个服务器上,JNDI查找可能返回一个负载均衡的bean集合,客户端可以通过统一的接口调用所有服务器上的bean,实现分布式处理。 在标签“源码 工具”中,我们可以推断这篇博客...

    EJB中JNDI的使用源码例子

    下面是一个简单的JNDI查找EJB的步骤: 1. 创建`InitialContext`:这是JNDI操作的第一步,通常在客户端或EJB内部进行。 ```java Properties props = new Properties(); props.put(Context.INITIAL_CONTEXT_FACTORY, ...

    EJB例子包含client以及jndi配置

    在标题"**EJB例子包含client以及jndi配置**"中,我们可以理解这是一个关于EJB应用的实例,它不仅包括了EJB服务器端的实现,还包含了客户端(client)的代码以及JNDI(Java Naming and Directory Interface)的配置。...

    EJB中JNDI的使用源码例子.7z

    通过JNDI,客户端可以轻松地查找并使用EJB服务,而无需关心这些服务的具体实现。在实际项目中,理解并熟练掌握JNDI的使用对于构建高效、可扩展的EJB应用至关重要。提供的源码例子可以帮助进一步理解这一过程。

    基于Java的源码-EJB中JNDI的使用源码例子.zip

    - EJB的注入(@EJB注解):在Java EE 5及以上版本,可以使用`@EJB`注解将EJB直接注入到客户端或另一个EJB中,这样就不再需要显式使用JNDI查找。 - CDI(Contexts and Dependency Injection)与JNDI:在更现代的...

    java源码:EJB中JNDI的使用源码例子.zip

    本压缩包包含了一个EJB中JNDI使用源码的例子,可以帮助开发者深入理解这两者之间的交互。 在Java EE中,JNDI主要用来查找和绑定资源,如EJB、数据源、邮件会话等。EJB的实例化通常涉及到JNDI查找过程,因为EJBs是在...

    WebLogic v9.2 EJB和JNDI Demo

    WebLogic v9.2 EJB和JNDI Demo

    ejb-jndi

    通过JNDI,开发者可以方便地在分布式环境中查找和使用资源,如EJB组件、数据库连接、消息队列等,而无需关注这些资源的实际位置或类型。这种抽象和标准化极大地提高了开发效率和系统的可移植性。同时,JNDI还允许...

    关于JNDI测试项目

    JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试项目JNDI测试...

    基于Java的实例源码-EJB中JNDI的使用源码例子.zip

    6. **JNDI与EJB的关系**:JNDI在EJB中的作用相当于一个“服务目录”,客户端通过JNDI查找找到EJB的服务,而EJB则通过JNDI注册自身,使得其服务可以在整个应用中被发现和使用。 7. **安全性考虑**:在使用JNDI查找...

    EJB中JNDI的使用源码例子.rar

    这个名为“EJB中JNDI的使用源码例子.rar”的压缩包,很显然是一个包含了具体示例代码的资源,可以帮助我们理解如何在EJB环境中运用JNDI。 首先,让我们来深入了解一下JNDI。JNDI提供了一种统一的方式来查找和管理...

    jndi测试小项目,初学者

    - **测试类**:用于验证JNDI操作是否正确的测试类,可能使用了JUnit或其他测试框架。 - **README**:项目说明文档,解释如何编译、运行和理解项目内容。 **学习JNDI的关键点**: 1. **理解Naming和Directory的区别*...

    基于Java的实例开发源码-EJB中JNDI的使用源码例子.zip

    EJB中的JNDI绑定则是将对象与一个JNDI名称关联的过程,使得其他应用程序可以通过这个名称找到该对象。这在部署EJB或配置资源时特别有用。例如,我们可能会将一个数据源绑定到JNDI名称`jdbc/MyDataSource`: ```java...

    基于Java的EJB中JNDI的使用源码例子.zip

    5. **环境入口点**:在Java EE的上下文中,每个EJB都会有一个环境入口点,这允许EJB通过JNDI查找其他服务,如事务管理器、邮件服务等。 了解了JNDI的基本概念后,实际的编程中,开发者通常会使用`InitialContext`类...

    基于java的EJB中JNDI的使用源码例子.zip

    在压缩包中的"codefans.net"文件中,可能包含了一个简单的EJB项目,其中包括了EJB的实现、接口以及使用JNDI查找EJB的客户端代码。通过查看和运行这些代码,可以更深入地理解JNDI在实际EJB应用中的工作原理。 总结...

    EJB项目的基础配置和测试方法

    例如,注入另一个Bean或JNDI查找的数据源。 ```java @EJB private AnotherBean anotherBean; @Resource private DataSource dataSource; ``` ### 二、EJB项目测试 1. **单元测试**:对于EJB的单元测试,可以使用...

    一个简单的EJB实例

    2. **JNDI查找**:如何在客户端代码中使用JNDI查找EJB实例。 3. **接口编程**:理解EJB的接口定义,以及如何通过接口调用Bean的方法。 4. **部署描述符**:EJB的部署信息通常在XML文件(如ejb-jar.xml)中定义,描述...

    POJO javaBean EJB JNDI 理解及区别

    ### POJO、JavaBean、EJB与JNDI的理解及区别 #### POJO:Plain Old Java Object POJO,即“纯旧式Java对象”,它指的是最基础的Java类对象,没有任何框架约束,也不实现任何特定接口。POJO的主要特征是拥有私有...

Global site tag (gtag.js) - Google Analytics