我有以下配置:
我在EAR的每个EJB-JAR中都有2个EJB业务服务,它们都是这样开发的:
@Remote
public interface ServiceAItf {
...
}
@Stateless
@Local
public class ServiceAImpl implements ServiceAItf {
...
}
Run Code Online (Sandbox Code Playgroud)
在我的WAR中,我通过远程接口上的显式"InitialContext.lookup"访问EJB组件.
在我的EAR中,我对注入的最佳实践非常困惑,无论是在性能,架构等方面......
我有以下问题:
如您所见,我已在服务实现上声明了注释"@Local",而没有定义本地接口.这是对的吗?至少我在部署时没有错误.但也许我应该使用"@LocalBean"注释?我想"@LocalBean"注释只是允许直接调用实现作为"本地" EJB,但你必须在代码中使用这样的实现:
@Stateless @Local public class ServiceBImpl实现ServiceBItf {@EJB private ServiceAImpl serviceA; ...}
将一个EJB注入另一个EJB的最佳方法是什么? 它的工作原理如下:
@Stateless @Local公共类ServiceBImpl实现ServiceBItf {@EJB private ServiceAItf serviceA; ...}
但是从我注意到的,注入的"serviceA"是远程代理,而它位于同一个EAR文件中的同一个JVM中.所以我认为会对性能产生影响.这就是为什么我试图像这样注入服务:
@Stateless
@Local
public class ServiceBImpl implements ServiceBItf {
@Inject
private ServiceAItf serviceA;
...
}
Run Code Online (Sandbox Code Playgroud)
但它在GF中不起作用,我有以下例外:
WELD-001408 Unsatisfied dependencies for type [...] ... …Run Code Online (Sandbox Code Playgroud) 我有一个由ejb.jar档案组成的EAR .
在哪里可以/我应该将我的log4j.xml配置文件放在我的EAR中以便为不同的EJB配置log4j?
这是我的以下结构:
myEar
|-- myEjb1.jar
|-- myEjb2.jar
|-- myEjb3.jar
|-- lib
| -- myLib1.jar
| -- myLib2.jar
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我们有一个Web应用程序公开Web资源(REST)和JMS MessageListener.Spring是用于定义和注入bean的框架.
我们在范围" 请求 "中定义了bean,以存储可用于Web资源的信息.我们也希望在JMS MessageListener中使用这些bean,但"请求"范围不存在并导致异常.
这个问题的一个解决方案是使用Spring 的" SimpleThreadScope " 实现的" thread " 类型的自定义范围.但是这个类中没有实现bean的破坏.我知道有一种方法可以通过"Spring自定义作用域示例线程"来实现它,但我更喜欢让Application Server管理线程池.
您对此问题有任何其他想法/建议吗?
重要方面:在作用域中创建的bean既可以由资源使用,也可以由JMS Message Listener使用.
我们来举个例子吧.想象一下,我们有以下几个类:
" Service1 "使用" BeanInScope1 "," Service1 "可以通过" WebResource1 "或" MessageListener1 " 调用,这意味着" BeanInScope1 "可以通过" WebResource1 "和" MessageListener1 " 以相同的方式创建..
希望这个例子能有所帮助......