2009-07-28 107 views
1

,这里是我的Bean类的源调用企业bean方法

@Stateless(mappedName = “StringVal”) 公共类NewSessionBean实现NewSessionRemote {

String val = null; 

public String stringChange(int parameter) { 
    while(parameter < 5){ 
     switch (parameter){ 
      case 1: System.out.println(val + "One" + ","); 
      case 2: System.out.println(val + "Two" + ","); 
      case 3: System.out.println(val + "Three" + ","); 
      case 4: System.out.println(val + "Four" + ","); 
     } 
    } 
    return val; 
}  

}

这是我的客户端类对于这个bean(独立客户端)

import endpoint.NewSessionRemote; import javax.naming.InitialContext;

公共类TestLogicBean {

static String retVal = null; 

public static void main(String[] args) { 
    try { 
     InitialContext ctx = new InitialContext(); 
     NewSessionRemote br = (NewSessionRemote) ctx.lookup("StringVal"); 
     for (int i = 0; i < 5; i++) { 
      String retVal1 = br.stringChange(i); 
      System.out.println("EJB message is:" + retVal1); 
     } 


    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 

} 

}

但我发现了这个异常“javax.naming.NoInitialContextException:需要环境或系统属性指定的类名,或者作为一个applet参数,或者在一个应用程序资源文件中:java.naming.factory.initial“

我已经尝试了几种方法来做到这一点,但它仍然给出了这个例外。

+0

是不是调用你的bean的stringChange()方法会导致无限循环? :) –

回答

0

看我找到了什么:

http://www.jboss.org/index.html?module=bb&op=viewtopic&t=38107

好像你必须有这个你jndi.properties:

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory 
java.naming.provider.url=jnp://localhost:1099 
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces 

看起来它是所有关于建立到JNDI的连接服务器。

+0

我使用glassfish作为我的服务器应用程序,在那里所有的设置都专门设置了所有设置,如此处所述https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html#StandaloneRemoteEJB但仍然没有结果 – Switch

+0

你完成了所有5个步骤吗?它应该像罐子上宣传的那样工作。 –