jboss4.x下的第一个ejb2.0程序(4)---从当前容器中调用entityBean

阅读更多
前面的Hello.java程序中有这么一段:
        Properties environment = new Properties();
        environment.put(Context.PROVIDER_URL, "localhost:1099");
        environment.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
        environment.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
        .....
        initialContext = new InitialContext(environment);      
      按照我的理解这段程序相当于从"localhost"这个容器中取得当前的环境变量.既然是本地的为什么还要把environment参数传进去呢.
直接initialContext = new InitialContext();  不行吗?其实是可以的,只要修改ejb-jar.xml:
http://java.sun.com/dtd/ejb-jar_2_0.dtd">
 
  
 
 Generated by XDoclet
 
  
  
   
    
   
   Name for Hello
   HelloWorld
   com.rox.HelloHome
   com.rox.HelloWorld
   com.rox.Hello
   Stateless
    Container
   
   
    com.rox.HelloEntityHome
    Entity
    com.rox.HelloEntityHome
    com.rox.HelloEntityInterface
    HelloEntityInterface
   
  
  
  
  
   
    
   
   Name for HelloEntity
   HelloEntityInterface
   com.rox.HelloEntityHome
   com.rox.HelloEntityInterface
   com.rox.HelloEntity
    Container
    java.lang.Integer
   False
   2.x
   HelloEntity
   
    helloNo
   
   
    helloName
   
    helloNo
   
  
  
  
  
 
 
 
 
 
  
  
  
  
  
  
  
  
  
  
 

注意红色的内容,那就是问题的关键.至于其中的原理,我仍在思考.
 
改变了ejb-jar.xml相应的需要修改Hello.java:
将原来的:
Object obj = initialContext.lookup("ejb/HelloEntity");
替换为:
Object obj = initialContext.lookup("java:comp/env/"+HelloEntityHome.class.getName());
 
按照我的理解comp是容器,env是环境,意思是从当前环境中lookup "HelloEntityHome.class.getName()".

你可能感兴趣的:(EJB,JBoss,XML,SUN)