Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为EJB选择本地接口?_Java_Jakarta Ee_Ejb 3.0_Ejb - Fatal编程技术网

Java 如何为EJB选择本地接口?

Java 如何为EJB选择本地接口?,java,jakarta-ee,ejb-3.0,ejb,Java,Jakarta Ee,Ejb 3.0,Ejb,假设我有以下EJB(使用ejb3): 该类可通过本地和远程接口使用 如何将此EJB的本地接口注入应用程序的另一部分? 具体来说,我不知道如何创建一个@EJB注释来选择本地接口。例如,以下内容是否足够 @EJB(name="Queries") private Queries queries; 特别是,我希望避免仅仅为了通过@EJB的“beanInterface”属性区分而创建单独的本地和远程接口。部署EJB时,容器会查看接口并标识本地和远程接口。我想说,在您的示例中,EJB容器已经使用了本地接口

假设我有以下EJB(使用ejb3):

该类可通过本地和远程接口使用

如何将此EJB的本地接口注入应用程序的另一部分?

具体来说,我不知道如何创建一个@EJB注释来选择本地接口。例如,以下内容是否足够

@EJB(name="Queries") private Queries queries;

特别是,我希望避免仅仅为了通过@EJB的“beanInterface”属性区分而创建单独的本地和远程接口。

部署EJB时,容器会查看接口并标识本地和远程接口。我想说,在您的示例中,EJB容器已经使用了本地接口。在这种情况下,使用远程接口是没有意义的,因为容器可以选择使用本地接口

如果您想确定,请尝试使用本地接口的JNDI名称作为@EJB注释的参数

@EJB(name="java:comp/env/ejb/EntitySupplierLocal")
在上面的示例中,我在接口名称中添加了local。在您的例子中,您必须查看JNDI上下文以获得正确的名称,或者您甚至知道它;)

通常,我建议使用定义了业务方法的基本接口,并扩展本地和远程接口。因此,您不必复制方法,并且可以分别扩展本地和远程访问的功能

public interface Queries () { .. }

@Local
public interface QueriesLocal extends Queries () { .. }

@Remote
public interface QueriesRemote extends Queries () { .. }

部署EJB时,容器查看接口并标识本地和远程接口。我想说,在您的示例中,EJB容器已经使用了本地接口。在这种情况下,使用远程接口是没有意义的,因为容器可以选择使用本地接口

如果您想确定,请尝试使用本地接口的JNDI名称作为@EJB注释的参数

@EJB(name="java:comp/env/ejb/EntitySupplierLocal")
在上面的示例中,我在接口名称中添加了local。在您的例子中,您必须查看JNDI上下文以获得正确的名称,或者您甚至知道它;)

通常,我建议使用定义了业务方法的基本接口,并扩展本地和远程接口。因此,您不必复制方法,并且可以分别扩展本地和远程访问的功能

public interface Queries () { .. }

@Local
public interface QueriesLocal extends Queries () { .. }

@Remote
public interface QueriesRemote extends Queries () { .. }

根据规范,您不能同时拥有远程和本地接口。但是,您可以创建一个超级接口,将所有方法放在那里,然后创建两个子接口。完成后,只需使用@EJB。这样,您只需要维护一个接口


编辑:参见“EJB3规范简化版”中的第3.2节,根据规范,您不能同时拥有远程和本地接口。但是,您可以创建一个超级接口,将所有方法放在那里,然后创建两个子接口。完成后,只需使用@EJB。这样,您只需要维护一个接口


编辑:请参见“EJB3规范简化版”中的第3.2节,位于

前面评论中的解决方案与Jboss上的EJB3.0不完全兼容

您可以轻松获得此错误:

org.jboss.ejb3.common.resolvers.spi.NonDeterministicInterfaceException:
beanInterface specified, Queries, is not unique within EJB QueriesEJB
仅创建以下内容:

public interface Queries ()  //Local by default

@Remote
public interface QueriesRemote extends Queries () { ... }

它可以工作

前面评论中的解决方案与Jboss上的EJB3.0不完全兼容

您可以轻松获得此错误:

org.jboss.ejb3.common.resolvers.spi.NonDeterministicInterfaceException:
beanInterface specified, Queries, is not unique within EJB QueriesEJB
仅创建以下内容:

public interface Queries ()  //Local by default

@Remote
public interface QueriesRemote extends Queries () { ... }

它可以工作

您有这方面的规范参考吗?1。去2号。单击“单击下面的按钮下载用于评估的规范或构建使用规范的应用程序”3。下载ejb-3_0-fr-spec-simplified.pdf 4。转到第16页,第3.2项您是否有该项目的规范参考?1。去2号。单击“单击下面的按钮下载用于评估的规范或构建使用规范的应用程序”3。下载ejb-3_0-fr-spec-simplified.pdf 4。转到第16页第3.2项