jsp调用ejb,出现一个问题老是不成功JBAS011843: Failed instantiate InitialContextFactory org.jnp.interfaces.NamingContextFactory from classloader ModuleClassLoader for Module "deployment.MyTestEjb.war:main" from Service Module Loader 
ejb代码:package com.ejb;
import javax.ejb.Remote;
@Remote
public interface FirstBeanRemote {
public String hello(); }
package com.ejb;import javax.ejb.LocalBean;
import javax.ejb.Stateless;/**
 * Session Bean implementation class FirstBean
 */
@Stateless
@LocalBean
public class FirstBean implements FirstBeanRemote {
    /**
     * Default constructor. 
     */
    public FirstBean() {
        // TODO Auto-generated constructor stub
    }
    
    public String hello() {          
    return "hello";  
     
    }
}
jsp代码:<%@ page contentType="text/html; charset=UTF-8"%> <%@ page import="com.ejb.*, javax.naming.*, java.util.Properties"%> 
<jsp:directive.page import="java.util.Hashtable"/> <%      
 
        Hashtable<String,String> prop=new Hashtable<String,String>();        prop.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");   
 
       prop.put("java.naming.provider.url", "localhost:1099");   
 
       prop.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");   
 
       InitialContext ctx;   
 
try {   
 
                          ctx = new InitialContext(prop);                                               FirstBeanRemote helloworld = (FirstBeanRemote) ctx.lookup("FirstBean/remote");    
 
                        out.println(helloworld.hello());   
     } catch (NamingException e) {    
 
       out.println(e.getMessage());   
 

 %>
这是网上的一个测试例子,不知道我为什么老是不成功,求大神解答
ejb jspjavaee

解决方案 »

  1.   

    Failed instantiate InitialContextFactory
    应该是没有注解的问题!
      

  2.   

    哈,我也遇到了这个问题,你的web容器和EJB容器应该是在同一个JVM里运行吧,如果是的话,那么你就不必使用 ctx = new InitialContext(prop);而是使用 ctx = new InitialContext();可能是在这个JVM里已经有了一个ContextFactory了吧,同时,lookup的参数的也得变为java:global/FirstBean/remote,就是JBoss启动时输出的完整的JNDI路径。
    这个很可能是因为不同的ContextFactory的原因,我最近也在研究EJB~