小编Bla*_*lin的帖子

@ Inject,@ EJB,@ Local,@ Remote,@ LocalBean等......:困惑?

我有以下配置:

  • 1个包含2个带有EJB组件的EJB-JAR的GF上的EAR.
  • 1另一个Glassfish服务器(=>其他JVM)上的WAR 包含访问EJB组件的Web组件.

我在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)

java ejb java-ee cdi

36
推荐指数
2
解决办法
3万
查看次数

EAR中的log4j配置

我有一个由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)

提前致谢!

java ear log4j

6
推荐指数
2
解决办法
6195
查看次数

Spring bean用于两个不同的范围

我们有一个Web应用程序公开Web资源(REST)JMS MessageListener.Spring是用于定义和注入bean的框架.

我们在范围" 请求 "中定义了bean,以存储可用于Web资源的信息.我们也希望在JMS MessageListener中使用这些bean,但"请求"范围不存在并导致异常.

这个问题的一个解决方案是使用Spring 的" SimpleThreadScope " 实现的" thread " 类型的自定义范围.但是这个类中没有实现bean的破坏.我知道有一种方法可以通过"Spring自定义作用域示例线程"来实现它,但我更喜欢让Application Server管理线程池.

您对此问题有任何其他想法/建议吗?

重要方面:在作用域中创建的bean既可以由资源使用,也可以由JMS Message Listener使用.

我们来举个例子吧.想象一下,我们有以下几个类:

  • BeanInScope1
  • WebResource1
  • 班级服务1
  • MessageListener1

" Service1 "使用" BeanInScope1 "," Service1 "可以通过" WebResource1 "或" MessageListener1 " 调用,这意味着" BeanInScope1 "可以通过" WebResource1 "和" MessageListener1 " 以相同的方式创建..

希望这个例子能有所帮助......

java spring spring-bean

6
推荐指数
0
解决办法
712
查看次数

标签 统计

java ×3

cdi ×1

ear ×1

ejb ×1

java-ee ×1

log4j ×1

spring ×1

spring-bean ×1