gpt4 book ai didi

java - 奇怪的 EJB 行为还是我错过了什么???

转载 作者:行者123 更新时间:2023-12-01 05:31:06 26 4
gpt4 key购买 nike

这是使用 EJB beans 的一个非常奇怪的行为:

@Local
public interface Provider {
void test();
}

@Local
public interface ExtProvider extends Provider {
void test2();
}

public abstract class AbstractProvider implements Provider {
@Override
void test(){ System.out.println("Hello strange " + getTech()); }
protected abstract String getTech();
}

public abstract class ExtAbstractProvider extends AbstractProvider implements ExtProvider {
@Override
void test2() { System.out.println("Hello from " + getName());}
@Override
String getTech() { return "extended EJB";}
protected abstract String getName();
}
@Stateless
public class ProviderBean extends AbstractProvider {
@Override
protected String getTech() { return "EJB";}
}

@Stateless
public class ExtProviderBean extends ExtAbstractProvider {
@Override
protected String getName() { return "ext provider";}
}

根据上面的代码,如果我这样写:

@EJB Provider provider; // should inject an instance of ProviderBean
@EJB ExtProvider extProvider; // should inject an instance of ExtProviderBean

但是两者都不起作用!有人会说,在这个例子中,EJB 不知道每次创建哪个实例,因为有两个实例实现了 Provider。奇怪的是:只有当我们将两个 bean 声明为:

public class ExtProviderBean extends ExtAbstractProvider implements ExtProvider
public class ProviderBean extends AbstractProvider implements Provider

在这种情况下,代码可以工作。问题是我们必须显式定义实现 bean 实现接口(interface),即使它是从抽象实现中隐式定义的。我错过了什么还是这是一个限制?

最佳答案

我刚刚读完 this SO question我认为提供的答案也适用于您的情况。

我只是引用了部分答案以及 EE 规范:

@Stateless
public class A implements Foo { ... }

@Stateless
public class B extends A implements Bar { ... }

Assuming Foo and Bar are local business interfaces and there is no associated deployment descriptor, session bean A exposes local business interface Foo and session bean B exposes local business interface Bar, but not Foo. Session bean B would need to explicitly include Foo in its set of exposed views for that interface to apply.

关于java - 奇怪的 EJB 行为还是我错过了什么???,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8960098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com