Java 应用程序客户端中的EJB注入don';行不通

Java 应用程序客户端中的EJB注入don';行不通,java,jakarta-ee,ejb,jndi,Java,Jakarta Ee,Ejb,Jndi,我试图在我的应用程序客户机中注入一个无状态的EJB,但得到了以下错误 严重:准备应用程序时出现异常:无法加载EJB模块。DeploymentContext不包含任何EJB。检查存档以确保C:\glassfish3\glassfish\domains\domain1\applications\EJB的打包正确 如果使用EJB组件注释来定义EJB,并且还使用EJB或web部署描述符,请确保部署描述符引用Java EE 5或更高版本的架构,并且元数据完成属性未设置为true,以便可以按预期处理组件注释

我试图在我的应用程序客户机中注入一个无状态的
EJB
,但得到了以下错误

严重:准备应用程序时出现异常:无法加载EJB模块。DeploymentContext不包含任何EJB。检查存档以确保C:\glassfish3\glassfish\domains\domain1\applications\EJB的打包正确

如果使用EJB组件注释来定义EJB,并且还使用EJB或web部署描述符,请确保部署描述符引用Java EE 5或更高版本的架构,并且元数据完成属性未设置为true,以便可以按预期处理组件注释

我的客户的定义如下:

@EJB
private static Sless sless;
public static void main(String[] args) {
    System.out.println("Sless says: " + sless.hello());
}
@Remote
public interface Sless {
    public String hello();
}
Sless
是我的接口,定义如下:

@EJB
private static Sless sless;
public static void main(String[] args) {
    System.out.println("Sless says: " + sless.hello());
}
@Remote
public interface Sless {
    public String hello();
}
我还有一个类实现了
Sless

@Stateless
public class SlessBean implements Sless{
    @Override
    public String hello() {
        return "hello, world!\n";
    }    
}
请提供有关问题来源的任何帮助。

1)
独立客户端
非托管POJO
(不由容器维护的POJO)不支持注释注入。因此,
@EJB
将无法工作

2)您必须从独立客户端执行手动
JNDI查找

这需要什么?

1)您的EJB扩展
远程接口。因为
Local
接口不会将
EJB
公开给跨应用程序调用或远程调用

2)独立客户端中的依赖项
jar
文件ie:
ORB Jar

3)您需要知道服务器上的
RMI/IIOP
端口

4)如果
独立客户端
服务器
使用不同的JDK/JRE实现,您还必须小心。例如:1使用
SUN JDK
和其他使用
IBM JDK

独立客户端连接到Glassfish上的
EJB

1)
独立客户端
非托管POJO
(不由容器维护的POJO)不支持注释注入。因此,
@EJB
将无法工作

2)您必须从独立客户端执行手动
JNDI查找

这需要什么?

1)您的EJB扩展
远程接口。因为
Local
接口不会将
EJB
公开给跨应用程序调用或远程调用

2)独立客户端中的依赖项
jar
文件ie:
ORB Jar

3)您需要知道服务器上的
RMI/IIOP
端口

4)如果
独立客户端
服务器
使用不同的JDK/JRE实现,您还必须小心。例如:1使用
SUN JDK
和其他使用
IBM JDK



独立客户端连接到Glassfish上的
EJB
>

您正在运行控制台应用程序,请遵循此操作。EJB只能注入到运行在Java EE兼容服务器(如GlassFish 3和JBoss 7)上的企业应用程序上,例如,将EJB注入到Web应用程序的Servlet中在glassfish 3.1.2.2上运行。客户端没有将其作为企业应用程序运行。我在上面粘贴的错误是服务器日志,因此我认为它实际上是在服务器上运行的。您正在运行控制台应用程序。EJB只能注入到运行在Java EE兼容服务器(如GlassFish 3和JBoss 7)上的企业应用程序上,例如,将EJB注入到Web应用程序的Servlet中在glassfish 3.1.2.2上运行。客户端没有将其作为企业应用程序运行。我在上面粘贴的错误是服务器日志,因此我认为它实际上是在服务器上运行的。IMO最好使用web服务使用EJB的方法,而不是执行RMI调用,但这将取决于OP的设计。我已经浏览了这个博客,但没有什么不同happened@LuiggiMendoza,hmmmm,为此,他需要将EJB作为web服务公开。@Luiggi这也是一个选项,但我真的想尝试一下EJB注释,看看它是如何工作的。那是all@Ayodeji,您在该文档中不理解的部分是什么?你试过了吗?在我看来,使用web服务使用EJB的方法比使用RMI调用更好,但这取决于OP的设计。我已经浏览了这个博客,但没有什么不同happened@LuiggiMendoza嗯,嗯,那,,他需要将EJB作为web服务公开。@Luiggi这也是一个选项,但我真的想尝试一下EJB注释,看看它是如何工作的。那是all@Ayodeji,您在该文档中不理解的部分是什么?你试过了吗?