OECP(Open Enterprise Components Plateform,开放的企业级组件平台)项目的架构体系中,我们知道在客户端需要通过JNDI来调用EJB容器中的SessionBean,那么如何在EJB3中JNDI调用SessionBean呢?
EJB3中,获得JNDI上下文主要有两种方式。(默认采用jboss的获取方式)
1、 通过程序编码的方式
 

Java代码
  1. public static InitialContext getInitialContext() throws NamingException{   
  2.    Properties p = new Properties();   
  3.   p.put(Context.INITIAL_CONTEXT_FACTORY,   
  4. "org.jnp.interfaces.NamingContextFactory");   
  5.    p.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");   
  6.    p.put(Context.PROVIDER_URL, "jnp://localhost:1099");   
  7.    return new InitialContext(p);   
  8. }  


客户端通过InitialContext ctx = getInitialContext();的方式来获取上下文。
2、 通过配置属性文件的方式
在应用的src下新建一个jndi.properties的资源文件(注意文件名必须是jndi.properties)
内容:
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost
客户端只要通过下面的方法就能获得上下文对象了
InitialContext ctx = new InitialContext();
 为了方便在程序开发的过程中的测试,我们一般情况下会封装一个获得JNDI上下文的工具类来使用。比如我们构建的一个如下的EJBFinder.java的类:
 

Java代码
  1. public class EJBFinder {   
  2.   
  3.  public static InitialContext getInitialContext() throws NamingException{   
  4.   Properties p = new Properties();   
  5.   p.put("server""jboss");   
  6.   p.put(Context.INITIAL_CONTEXT_FACTORY,   
  7.     "org.jnp.interfaces.NamingContextFactory");   
  8.   p.put(Context.URL_PKG_PREFIXES,   
  9.     "org.jboss.naming:org.jpn.interfaces");   
  10.   p.put(Context.PROVIDER_URL, "jnp://localhost:1099");   
  11.   InitialContext ctx = new InitialContext(p);   
  12.   return ctx;   
  13.  }   
  14.     
  15.  public static Object findEJB(String ejbname) throws NamingException{   
  16.   return getInitialContext().lookup(ejbname);   
  17.  }   
  18. }   
  19.   

这样的一个工具类给我们测试EJB组件提供了很大的方便,不用我们再去重复的去构建JNDI上下文的环境。但是当EJB组件开发完成后,正式部署到正式环境中,客户端调用EJB组件怎样去调用呢?
请看下一篇:如何在EJB3中JNDI调用SessionBean(二)

posted on 2009-07-20 10:35  LanrenXuan  阅读(2152)  评论(0编辑  收藏  举报