- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前我们有一个部署架构,其中一堆面向数据的服务通过 RMI 暴露给业务服务。两种类型(面向数据的服务和业务服务)都是无状态 session bean。每个数据服务接口(interface)包(包含远程接口(interface))也有一个定位器,用于执行 JNDI 查找。这样我们就可以从业务服务逻辑中的任何地方调用面向数据的服务。
这是定位器的样子:
public final class OMRLocator {
private static final Logger LOG = Logger.getLogger( OMRLocator.class );
private static final String ORG_WILDFLY_INITIAL_CTX_FACTORY = "org.wildfly.naming.client.WildFlyInitialContextFactory";
private OMRLocator() {
}
@Produces
public static OrganisationsAndMandatesRegister locate() {
try {
Properties ctxProp = new Properties();
ctxProp.put( Context.INITIAL_CONTEXT_FACTORY, ORG_WILDFLY_INITIAL_CTX_FACTORY );
InitialContext ctx = new InitialContext( ctxProp );
return (OrganisationsAndMandatesRegister) ctx.lookup( OrganisationsAndMandatesConstants.REMOTE_NAME );
}
catch ( NamingException ex ) {
LOG.log( Level.WARN, "Cannot reach: " + OrganisationsAndMandatesConstants.REMOTE_NAME, ex );
return null;
}
}
}
我们在 JBOSS EAP6 上运行并开始试验 CDI。因此,我们向数据服务 beans 和 @Produces
添加了一个 beans.xml
以使(在本例中为 OrganisationAndMandatesRegister
CDI 可注入(inject). 这个想法是, future 我们可能会重新打包我们的应用程序,并将数据服务与业务服务一起打包在一个企业文件中。
最近我们迁移到 JBOSS EAP7.2(Wildfly 8?),突然间我们看到了各种意想不到的延迟和事务问题。
我怀疑我们获取 bean 的方式是造成这些问题的一个因素。例如:我猜范围取决于业务 EJB 生命周期,但是对于业务服务中的 locate()
的每次调用都会生成一个新的数据服务实例。
那么:使用 CDI 时生成远程 bean(通过 RMI)的最佳方法是什么?鉴于这两种类型的服务都是无状态的(或者这是自动完成的),我是否应该考虑范围界定?
最佳答案
如果在生产者方法上没有定义范围,则使用@Dependend,因此找到合适的范围,可能是@RequestScoped。当您从 JNDI 检索 EJB 时,您不会获得新的实例,而是从池中获得一个实例,该实例在多次调用中可能是相同的。您的问题可能是 EJB 拦截器,因为如果依赖作用域,EJB 实例在注入(inject)后始终相同,并且永远不会释放。
摆脱@Produces,因为CDI 与EJB 集成并且EJB 可以通过@Inject 或@EJB 注入(inject)。如果您想保留 Locator 类,那么您可以在其中注入(inject) EJB 并返回正确的 EJB 实例(实际上是一个代理),其中 Locator 应该是@ApplicationScoped。另一种方法是使用允许编程查找的实例。使用 Object 类型,您可以访问容器的所有 CDI Bean(包括 EJB),因此通用接口(interface)将有助于最大限度地减少可访问的 bean。
请参阅以下链接以获得更多帮助。
http://www.adam-bien.com/roller/abien/entry/inject_vs_ejb
总结一下:
选项 a) 保持原样。也许使用 @Dependent
明确范围以指示这是在调用 bean 创建时调用的(注入(inject)调用 bean 的构造函数)
选项 b) 使用无状态 @ApplicationScoped
session bean
@LocalBean // otherwise @EJB will not work
@ApplicationScoped // this instance should be created only once per ear
public class OMRLocator {
@EJB // does implicitly a remote (default) JNDI lookup
private OrganisationsAndMandatesRegister instance;
@Produces
@Dependent // just to make it explicit
public OrganisationsAndMandatesRegister locate() {
return instance;
}
}
关于jakarta-ee - 整合EJB(JNDI)和CDI的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55721688/
我想了解为什么一些 Jakarta EE 规范是空的。 例如 Jakarta Annotations规范由免责声明和快速描述(3 行)组成,但是有 Javadoc . 当 JCP 负责 J2EE 规范
我正在研究 OpenNTF 项目“XPages Jakarta EE Support”。 我正在尝试为 Person 对象上的 CRUD 操作设置 REST API。我设法创建 GET 和 POST
我正在研究 OpenNTF 项目“XPages Jakarta EE Support”。 我正在尝试为 Person 对象上的 CRUD 操作设置 REST API。我设法创建 GET 和 POST
我正在采用 Jakarta EE 9 并使用 EJB 和 WEB 模块开发一个 EE 应用程序。 EJB 已经完成并部署在 Glassfish 6(Jakarta EE 9 的 RI 实现)上。现在,
OpenLiberty(v20.0.0.2-beta 或其他版本)中是否有办法将 jakarta ee 9(通过 webProfile-9.0 或 jakartaee-9.0 或任何仅 jakarta
在使用Spring Boot 3.0.7并试图保持更新时,我遇到了这个错误,不知道它是什么意思。。加载的依赖项是Spring Security 6.0.9,问题存在于使用Java 17或19的情况下(
有没有办法在 JPA 实体监听器中检查当前事务是否已提交,如下所示? @ApplicationScoped public class EntityListener { @Inject
以下代码使用 javamail api 通过 gmail smtp 服务器发送邮件和附件。 public void doSendGmail(){ from = txtFrom.getT
大家好我有一个应用程序(spring+hibernate)需要同时发送数千封电子邮件我被告知这里最好的解决方案是有一个邮件服务器我不知道从哪里开始,或者是否有更好的框架或服务所以请大家给我一些信息,从
我正在尝试从 Java 邮件的文件夹中删除/删除消息(在我将其复制到另一个文件夹之后),这是我的代码: Flags deleted = new Flags("DELETED"); folder.se
某些页面可以接收称为“P1”的特定请求参数: page.do?P1=value1 现在,一个scriptlet正在测试request参数的存在,如果P1为“value1”,则会在页面上呈现一些信息。
我有一段非常类似于此http://java.sun.com/developer/onlineTraining/JavaMail/contents.html#JavaMailFetching的代码 我的
我在NetBeans中创建了一个Java Web应用程序项目,并在其中创建了一个启动bean: package malibu.util; import javax.annotation.PostCon
我有两个不同的项目:A 和 B。 B 包含一个拦截器,我想在项目 A 以及将来的项目 C 和 D 中使用它。 我在两个项目中都使用 jboss-javaee-6.0 版本 3.0.3.Final(这意
我一直在阅读 “Java 事务” ,我一直困惑它是什么?什么是有用的? 最佳答案 你可以谷歌搜索并找到这样的页面:http://www.java-tips.org/java-ee-tips/enter
这个问题在这里已经有了答案: What exactly is Java EE? (5 个回答) Difference between an application server and a servl
Web 应用程序的用户界面通常包含用于执行 CRUD 操作的各种按钮。在执行以下操作时,按钮标签的建议命名约定是什么? 用户创建(添加用户...或添加用户或添加用户) 事件创建(添加事件...或添加事
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我对java网页环境很陌生。最近尝试用Java开发一个电子商务平台。 因此,我使用 j_security_check 基于表单作为我的身份验证工具。身份验证完成后,成功重定向到所需页面。 但是,由于我
什么时候 我通过无状态服务从数据库中获取实体, 然后在另一个 bean 和 中修改它 然后想通过无状态服务将其保存到数据库中, 我注意到实体已分离。我认为因为无状态服务的持久化上下文,实体从被夺取到存
我是一名优秀的程序员,十分优秀!