问题标签 [ejb-3.2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
156 浏览

ejb - 从远程 EJB 的客户端加载类

我正在尝试为部署在使用 WebLogic 应用程序容器的 Oracle 云上的远程企业 bean 开发独立客户端。EJB 方法需要称为“任务”的特定接口的参数。EJB 类看起来像这样:

客户端应用程序具有自定义的接口实现,如下所示:

然后有一个客户端类调用 EJB 并传递一个 CustomTask 的实例,如下所示:

我知道这可以通过在 Java RMI 中提供 rmi 代码库来实现,但我找不到任何有关如何使用 EJB 执行此操作的文档。我想知道 EJBS 中是否有这样的功能(预计会有),如果是的话,有人可以让我朝着正确的方向前进吗?我在互联网上搜索,但到目前为止我还没有找到合适的教程或文档。非常感谢任何帮助。

0 投票
1 回答
2050 浏览

java - 使用 Maven 创建三层应用程序

我想使用maven创建一个多层java项目如下:

  1. PresentationLayer-GUIModule(jsp/jsf 页面的最顶层)
  2. PresentationLayer-GatewayModule(Web 服务的最顶层)
  3. BusinessLayer-ServiceModule(中间层)
  4. DataAccessLayer(最底层)
  5. CommonLayer(可从所有层访问的垂直层)

Maven模块结构:

  • 根 pom
    • 耳朵绒球
    • GUIModule pom
    • GatewaModule pom
    • 服务模块 pom
    • DataAccessLayer pom
    • CommonLayer pom

我创建了一个flashcard使用以下 pom 配置调用的项目:

根pom:

耳球:

GUIModule pom:

网关模块 pom:

服务模块 pom:

DataAccessLayer pom:

CommonLayer pom:

这些文件会导致创建一个包含所有其他模块的 ear 文件,并成功部署在 中jboss application server eap-7.1,但是此地址找不到 Web 服务: http://localhost:8080/myflashcard/getflashcard

RESTful 网络服务:

应用程序.xml:

0 投票
0 回答
98 浏览

keycloak - 从 MDB 调用 EJB 的权限问题

我们最近从 JAAS 切换到 Keycloak。应用程序是带有 EJB 和 MDB 的 JavaEE 应用程序。在 WildFly 中设置 keycloak 登录模块以将用户从 wen 传播到 EJB 并且它有效。但是当从 MDB 调用 EJB 时面临问题。收到消息时,MDB 中有匿名用户。因此,该用户无权调用受以下保护的 EJB:

在 JAAS 版本中,我们使用专用 mdb 用户进行编程登录。

这具有具有所需权限的用户。由于现在移至 Keycloak,此 JAAS 登录代码将不起作用。有什么选项可以防止从 MDB 调用 EJB 时出现权限问题?

0 投票
1 回答
384 浏览

java - 在 Web 应用程序中 @Inject @Remote EJB

是否可以在 Web 应用程序中@Inject使用EJB?@Remote我在 Glassfish 5 上运行,并且正在部署 EAR (EJB + WAR)。

@Local当我用CDI注释 EJB 接口时,@Remote没有。
可能是什么原因?

顺便说一句,使用@EJB而不是@Inject完美地工作,但我要解决这个@Inject问题。

0 投票
1 回答
92 浏览

jakarta-ee - NetBeans 8.2 和 Glassfish 5.0 幽灵 EJB

我在 NetBeans 8.2 和 GlassFish 5.0 中创建了一个带有一些 EJB 的小型 Web 应用程序。稍后我将其删除。不仅来自 IDE,还来自硬盘驱动器。(该项目也未部署在服务器上)。当我尝试创建一个名称非常接近已删除项目(XApp2 和 XApp)的项目时,EJB-s 出现在新项目的 EJB 模块的“Enterprise Beans”列表中。但不在“Source Packages”中 EJB-s 在“Enterprise Beans”树节点中是不可删除的。这不是项目特定的。我可以通过其他命名项目再做一次。硬盘驱动器上的新项目不包含 EJB 文件以及项目内容中对它们的引用。

当 Ghost EJB 中出现一些编译/部署错误时,情况会更加严重。由于不存在 EJB,全新的空项目无法部署。

一些参考应该是在NetBeans环境下,因为我重装了服务器,情况还是一样。

我怎样才能摆脱幽灵 EJB?

在此处输入图像描述

在此处输入图像描述

0 投票
2 回答
436 浏览

java - 如何对 EJB3 事务提交或回滚做出反应?

我已经将服务实现为无状态会话 EJB (3.2) 以通过 JPA 存储数据。此外,每次更新数据时,EJB 也会更新一个 Lucene 索引。会话 bean 是容器管理的。ejb 的代码如下所示:

我有不同的其他 BusinessService-EJB 调用此 DataService EJB 来插入或更新数据。我无法控制 BusinessService-EJB 实现。由 BusinessService-ejb 启动的事务可以包含对我的 DataService EJB 的 save() 方法的多个调用。

如果 BusinessService-EJBs 方法“进程”中断,就会出现我的问题。DataService.save() 的每个方法调用都会更新给定数据对象的 Lucene 索引。但是,如果后面的调用之一失败,则回滚整个事务。我的 JPA 工作将按预期回滚(没有数据写入数据库)。但是在事务被取消之前,Lucene 索引现在已经针对 save() 方法的所有成功完整调用进行了更新。

所以我的问题是:我如何在我的 DataService EJB 中对这种情况做出反应?这甚至可能吗?

我看到使用 Statefull Session EJB 3.2 我可以使用注释“ @AfterCompletion”来注释方法。所以我想这可能是仅当 @AfterCompletion 以“成功”调用时才编写 lucene 索引的解决方案。但是无状态会话 EJB 不允许使用此注释。我应该简单地将我的 EJB 类型从无状态更改为有状态吗?但这如何影响我的 BusinessService-EJB 场景,它仍然是无状态会话 EJB?这行得通吗?我还担心将我的 ejb 表单 stateless 更改为 statefull 会对性能产生影响。

或者有没有其他方法可以解决这个问题?例如,一个监听器根据事务 ID 编写日志,并在事务完全完成后更新 lucene 索引......?


2018-08-29 - 解决方案:

我通过以下方式解决了这个问题:

我没有在我的 DataService.save(data) 方法期间直接更新 Lucene 索引,而是使用相同的事务使用 JPA 创建一个新的 eventLogEntry。

现在,每当客户端调用 lucene 搜索方法时,我都会运行一个 flush 方法来根据事件日志条目更新我的 lucene 索引:

使用注释TransactionAttributeType.REQUIRES_NEW,flush() 方法将仅读取已提交的 eventLog 条目。

因此客户端只会在 Lucene 索引中看到已提交的更新。即使在来自我的一个 BusinessService-EJB 的事务期间,lucene 也不会包含“未刷新”文档。此行为等同于事务模型“已提交读”。

另请参阅类似的讨论:如何使无状态会话 bean 具有事务意识?

0 投票
1 回答
330 浏览

jakarta-ee - @DependsOn 用于子类

@DependsOn可用于确保一个 EJB 在另一个 EJB 之前初始化:

我想知道子类是否也隐式继承了这个约束?

我知道普通的 Java 注释不会被继承,但是 Java EE 改变了一些注释的规则。但是我还没有找到关于@DependsOn注释的具体信息。

0 投票
1 回答
362 浏览

jersey-2.0 - 使用 EJB + JPA + Jersey 进行延迟加载

我有以下工作没有FetchType.LAZY

以及查询方法:

这是 JSON 结果:

但是我只想返回 id 和 text 数据,所以我尝试更改 @ManyToOne(fetch = FetchType.LAZY)

然后我得到这个错误:

我可以做一些事情,比如更改查询以仅获取我想要的字段:

但是我在 JavaScript 前端的响应是:

不再是对象数组,映射所有给出我拥有的实体数量的东西远非理想。

我发现的大部分内容是之后如何获取数据,这不是我关心的,我只需要首先发送我想要的字段。我不确定是否应该使用 EJB @TransactionAttribute,我找不到工作示例。我还尝试将策略更改为 Lazy 类中的@OneToMany,但无济于事。

0 投票
1 回答
110 浏览

java - EJB 模块中的 Spring 上下文

我目前正在制作一个 EJB 模块,如果没有持久性,它就无法完成。

我最初的直觉引导我使用 Spring Boot,因为它有一些关于如何使用 JPA 的疯狂实现,老实说,我有点被宠坏了。

但是,我无法真正在我的 EJB 模块中启动并运行 Spring。我使用public static void main(String[])方法创建了常用的类,但我担心这个方法永远不会运行成为现实,并且使用一种@PostConstruct方法来初始化 Spring 听起来很荒谬。

如何在 EJB 模块上初始化 Spring Boot?我应该制作另一个模块并以某种方式从我的 EJB 中引用它吗?我怎样才能做到这一点?这是人们实际做的事情,还是我应该把懒惰的背朝下放在电脑前学习“正确的” JPA?

提前致谢

0 投票
1 回答
3199 浏览

jboss - WFLYCTL0180:缺少/不可用依赖项和反射信息错误的服务

回滚并显示以下失败消息: