ejb3的依赖注入问题

最近看了一下ejb3 in action,其中有个关于依赖注入的问题一直没弄懂,在glassfish下是这样的,
package ejb3inaction.example;
import javax.ejb.Remote;
@Remote
public interface HelloUser {
public void sayHello(String name);
}

package ejb3inaction.example;
import javax.ejb.Stateless;
@Stateless
public class HelloUserBean implements HelloUser {
public void sayHello(String name) {
System.out.println("Hello " + name + " welcome to EJB 3 In Action!");
}
}
客户端的调用是这样的:
package ejb3inaction.example;
import javax.ejb.EJB;
public class HelloUserClient {
@EJB
private static HelloUser helloUser;
public static void main(String[] args) {
helloUser.sayHello("Curious George");
System.out.println("Invoked EJB successfully .. see server console for output");
}
}
不过在jboss4.2.2下的客户端的代码却变成了这样:
public class HelloUserClient {
private static HelloUser helloUser;
public static void main(String[] args) {
try {
Context context = new InitialContext();
helloUser = (HelloUser) context.lookup("chapter1/"
+ HelloUserBean.class.getSimpleName() + "/remote");
helloUser.sayHello("Curious George");
} catch (NamingException e) {
e.printStackTrace();
}
}
}
如果向上面那样用@EJB注解的话会报空指针异常,当然客户端的代码以JAR文件的形式发布在JBOSS容器内的,向各位高手指点!


[该贴被Hqiu于2009-02-08 22:41修改过]

注射需要在一个EJB容器才能成功

客户端需要注射机制,必须使用Jboss Seam框架才能帮助你注射,否则只能用JNDI。

注射目前没有成为Web容器的标准默认机制,WebBeans正在制定。