问题标签 [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 回答
16 浏览

java - java.lang.ClassNotFoundException:org.apache.yoko.orb.OCI.IIOP.DefaultConnectionHelper

我正在尝试按照此处描述的步骤运行客户端自由:自由客户端。但是我在尝试查找远程 EJB 时遇到了这个错误

com.ibm.ws.classloading.internal.UnifiedClassLoader 3 CNFE 来自超级类加载器 com.ibm.ws.classloading.internal.ThreadContextClassLoader@5ba31911 java.lang.ClassNotFoundException: org.apache.yoko.orb.OCI.IIOP.DefaultConnectionHelper at com .ibm.ws.classloading.internal.UnifiedClassLoader.findClass(UnifiedClassLoader.java:137) 在 com.ibm.ws.classloading.internal.ThreadContextClassLoader.findClass(ThreadContextClassLoader.java:141) 在 java.base/java.lang.ClassLoader .loadClass(ClassLoader.java:588) 在 com.ibm.ws.classloading.internal.UnifiedClassLoader.loadClass0(UnifiedClassLoader.java:116) 在 com.ibm.ws.classloading.internal.UnifiedClassLoader$Delegation.loadClass(UnifiedClassLoader.java :85) 在 com.ibm.ws.classloading.internal 的 com.ibm.ws.classloading.internal.UnifiedClassLoader.loadClass(UnifiedClassLoader.java:109)。ThreadContextClassLoader.loadClass(ThreadContextClassLoader.java:157) 在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) 在 java.base/java.lang.Class.forName0(Native Method) 在 java.base/ java.lang.Class.forName(Class.java:398) at org.apache.yoko.osgi.ProviderLocator.loadClass(ProviderLocator.java:90) at org.apache.yoko.orb.OCI.iiop.init(iiop. java:59) 在 org.apache.yoko.orb.OB.PluginManager.initPlugin(PluginManager.java:149) 在 org.apache.yoko.orb.OBCORBA.ORB_impl.initialize(ORB_impl.java:362) 在 org.apache .yoko.orb.OBCORBA.ORB_impl.setParameters(ORB_impl.java:1028) 在 org.omg.CORBA.ORB.init(ORB .java:179) 在 org.apache.yoko.rmi.impl.PortableRemoteObjectExtImpl.getDefaultOrb(PortableRemoteObjectExtImpl.java:39) 在 org.apache.yoko.rmi.impl。PortableRemoteObjectExtImpl.getCurrentState(PortableRemoteObjectExtImpl.java:49) 在 org.apache.yoko.rmi.api.PortableRemoteObjectExt.getState(PortableRemoteObjectExt.java:60) 在 org.apache.yoko.rmi.impl.RMIState.current(RMIState.java: 130) 在 org.apache.yoko.orb.OB.GIOPClient.initServiceContexts(GIOPClient.java:256) 在 org.apache.yoko 的 org.apache.yoko.rmi.impl.ValueHandlerImpl.getRunTimeCodeBase(ValueHandlerImpl.java:173) .orb.OB.GIOPClient.getWorker(GIOPClient.java:135) 在 org.apache.yoko.orb.OB.GIOPClient.prepareForDowncall(GIOPClient.java:448) 在 org.apache.yoko.orb.OB.Downcall.( Downcall.java:184) 在 org.apache.yoko.orb.OB.DowncallStub.createLocateRequestDowncall(DowncallStub.java:223) 在 org.apache.yoko.orb.OB.DowncallStub.locate_request(DowncallStub.java:413) 在 org .apache.yoko.orb.CORBA.Delegate._OB_getDowncallStub(Delegate.java:774) 在 org。org.apache.yoko.orb.OB.CorbanameURLScheme_impl.parse_url(CorbanameURLScheme_impl.java:208) 中的 apache.yoko.orb.CORBA.Request.invoke(Request.java:285)。 URLRegistry_impl.parse_url(URLRegistry_impl.java:70) 在 org.apache.yoko.orb.OB.ObjectFactory.stringToObject(ObjectFactory.java:77) 在 org.apache.yoko.orb.OBCORBA.ORB_impl.string_to_object(ORB_impl.java: 1123) 在 com.ibm.ws.jndi.iiop.OrbContext.lookup(OrbContext.java:53) 在 org.apache.aries.jndi.DelegateContext.lookup(DelegateContext.java:149) 在 java.naming/javax.naming .InitialContext.lookup(InitialContext.java:409) 在 com.ibm.ws.injectionengine.osgi.internal.IndirectJndiLookupObjectFactory.getObjectInstance(IndirectJndiLookupObjectFactory.java:166) 在 com.ibm.ws.injectionengine.osgi.internal.IndirectJndiLookupObjectFactory.getObjectInstance (间接JndiLookupObjectFactory。java:100) 在 com.ibm.wsspi.injectionengine.InjectionBinding.getInjectionObjectInstance(InjectionBinding.java:1552) 在 com.ibm.ws.ejb.injection.processor.EJBInjectionBinding.getInjectionObjectInstance(EJBInjectionBinding.java:1108) 在 com.ibm .wsspi.injectionengine.InjectionBinding.getInjectionObject(InjectionBinding.java:1428) 在 com.ibm.ws.ejb.injection.processor.EJBInjectionBinding.getInjectionObject(EJBInjectionBinding.java:1046) 在 com.ibm.wsspi.injectionengine.InjectionBinding.getInjectableObject (InjectionBinding.java:1368) 在 com.ibm.ws.injectionengine.AbstractInjectionEngine.inject(AbstractInjectionEngine.java:776) 在 com.ibm.wsspi.injectionengine.InjectionTarget.inject(InjectionTarget.java:104)。 ws.clientcontainer.internal.ClientModuleInjection.inject(ClientModuleInjection.java:177) 在 com.ibm.ws.clientcontainer.internal。ClientModuleInjection.processReferences(ClientModuleInjection.java:107) 在 com.ibm.ws.clientcontainer.internal.ClientModuleRuntimeContainer.startModule(ClientModuleRuntimeContainer.java:224) 在 com.ibm.ws.app.manager.module.internal.ModuleHandlerBase.deployModule( ModuleHandlerBase.java:99) 在 com.ibm.ws.app.manager.module.internal.DeployedModuleInfoImpl.installModule(DeployedModuleInfoImpl.java:49) 在 com.ibm.ws.app.manager.module.internal.SimpleDeployedAppInfoBase.deployModules( SimpleDeployedAppInfoBase.java:597) 在 com.ibm.ws.app.manager.module.internal.SimpleDeployedAppInfoBase.installApp(SimpleDeployedAppInfoBase.java:511) 在 com.ibm.ws.app.manager.module.internal.DeployedAppInfoBase.deployApp( DeployedAppInfoBase.java:349) 在 com.ibm.ws.app.manager.ear.internal.EARApplicationHandlerImpl.install(EARApplicationHandlerImpl.java:77) 在 com.ibm.ws。app.manager.internal.statemachine.StartAction.execute(StartAction.java:149) 在 com.ibm.ws.app.manager.internal.statemachine.ApplicationStateMachineImpl.enterState(ApplicationStateMachineImpl.java:1317) 在 com.ibm.ws。 app.manager.internal.statemachine.ApplicationStateMachineImpl.run(ApplicationStateMachineImpl.java:897) 在 com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper.run(ExecutorServiceImpl.java:239) 在 java.base/java.util。 concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang.Thread.run(Thread.爪哇:834)1317) 在 com.ibm.ws.app.manager.internal.statemachine.ApplicationStateMachineImpl.run(ApplicationStateMachineImpl.java:897) 在 com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper.run(ExecutorServiceImpl.java:239)在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java .lang.Thread.run(Thread.java:834)1317) 在 com.ibm.ws.app.manager.internal.statemachine.ApplicationStateMachineImpl.run(ApplicationStateMachineImpl.java:897) 在 com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper.run(ExecutorServiceImpl.java:239)在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java .lang.Thread.run(Thread.java:834)java:628) 在 java.base/java.lang.Thread.run(Thread.java:834)java:628) 在 java.base/java.lang.Thread.run(Thread.java:834)

我需要帮助。

0 投票
1 回答
123 浏览

jakarta-ee - 了解 EJB 架构和实现

我是 Jakarta EE 世界的初学者。我正在大学学习 Jakarta EE 模块,我正在努力寻找能够正确回答我问题的信息。我觉得这是一件如此简单、直截了当且被期望被理解的事情,但我只是不明白。

我的导师并没有很有帮助,告诉我不要担心其他任何事情,只是接受“它只是封装的业务逻辑”这是没有意义和无用的,因为如果这就是我不能创建自己的课程的原因。

现在我浏览了这篇文章https://docs.oracle.com/cd/E16439_01/doc.1013/e13981/undejbs002.htm并获得了基本概述。

我知道以下几点:

  1. EJB 在 EJB 容器中运行,该容器在应用程序服务器中运行,
  2. 两种类型的 EJB:会话 Bean、消息驱动 Bean
  3. 三种类型的 Session Bean:Stateless、Stateful、Singleton
  4. @Stateless 在会话/方法调用之间不保持“会话状态”?而有状态的bean呢?
  5. 容器有一个这些 EJB(Java 类)的池,基本上这些 EJB(Java 类)在@stateless 的情况下被实例化并随机分配给客户端
  6. @Stateful bean 保存在一个池中,并且为同一个客户端分配了同一个 bean?

请随时更正上述任何内容。根据我目前所知,整体架构似乎仍然让我感到困惑,

我有以下 6 个问题(所有问题都已链接)如果我没有正确组织它们,我很抱歉,我将尝试编辑/改进答案:

  1. 非 Java(通用客户端)如何访问 EJB?这甚至可能吗?

据我所知,大多数客户端是以下之一:a)笔记本电脑/平板电脑/移动设备中的 Web 浏览器,b)本机移动应用程序,c)某些 IOT 设备或其他类型的设备(例如,送货司机将某些东西保存到独特的手机)等...

现在!假设上面提到的客户(主要是 a 和 b),因为他们是访问相同“业务逻辑”的最常见需求,他们将如何处理?我假设原生移动应用程序也使用 HTTP/s 协议?这是否意味着它只能通过 Servlet?哪个有点像 MVC 控制器?

根据官方 Java EE 文档中的这张图表,看起来好像 Web 浏览器无法直接访问 EJB:

在此处输入图像描述

  1. 如果 (1) 的答案是否定的,例如 Web/移动应用程序等客户端无法直接访问 EJB,那么 @Stateful 会话 bean 有什么用处吗?比如说在一个 Web 应用中,HTTP 协议是无状态的,可以借助 session/cookie 来维护状态,这意味着状态是由 Web Container 来维护的?有状态会话 bean 有什么意义?

我已经阅读了有关堆栈溢出的其他问题,这表明将 @stateful 会话 bean 与 Servlet 一起使用并不是一个好主意。

我得到了整个购物车示例,但这并没有解释如何维护状态,如果我通过浏览器访问我的购物车,cookie 将负责状态,对吗?EJB 是否可以访问浏览器 cookie?

  1. 如果 EJB 只能由 Java 客户端直接访问:

据我所知,Java 客户端的示例:Servlet、另一个运行本地或远程的 EJB、另一个 Java 类?、独立的 Java 应用程序?

我假设这些客户端会通过 RMI/JNDI/CDI/依赖注入(在 servlet 的情况下)访问 EJB?说 EJB 类似于 Java EE 世界中的 SOAP Web 服务是否公平?

  1. 基于以上所有内容,EJB 是否还有很多用例?特别是由于大多数应用程序要么通过 Web 或使用 HTTP/Rest 端点的移动设备,因此许多应用程序使用 JWT 来管理状态客户端,除了可能是 Android 应用程序等之外,我看不到许多独立 Java 应用程序的示例。

  2. 使用 MVC/Spring/Spring Boot 是否更好,它似乎具有更易于理解的架构并创建 REST/SOAP Web 服务

  3. RMI 也使用 HTTP 吗?EJB 理解 HTTP 吗?

我认为这些问题中的大多数都围绕着同一点。我无法得到明确的答案,我认为这应该很明显,但我就是不明白。任何建议将不胜感激

0 投票
0 回答
373 浏览

java - 在 Wildfly 上使用 Spring Boot 战争应用程序查找远程 EJB 时出错

我最终希望创建一个支持 EJB 3+、传统 HTTP 请求以及最终 JPA/Hibernate 的 RESTful API。我正在使用 Eclipse 版本 2021-03,运行 JBOSS Wildfly 服务器,使用接口创建远程 EJB(类似于此处),最后使用 Spring boot 制作 REST API。

更新- 2021 年 4 月 22 日

根据日志输出,远程 EJB 被创建并且 RESTful 路由在 Web 服务器上工作。客户端 pom.xml 中有 EJB 依赖项的条目,我能够注入 EJB 依赖项,但是在查找过程中出现命名异常。我已多次检查 JNDI 绑定信息,但仍然出现异常。任何帮助将不胜感激。


EJB 远程代码

HelloStatefulWorld.java

HelloStatefulWorldEJB.java

pom.xml


EJB 客户端代码/REST API

ServletInitializer.java

Swe642a4EjbClientApplication.java

pom.xml


Eclipse 日志输出

0 投票
0 回答
103 浏览

jakarta-ee - Wildfly JavaEE 8 - Singleton EJB 的双重初始化

我正在构建一个基于Wildfly原型的 JavaEE 8 应用程序ord.wildfly.archetype:wildfly-jakarta-ear-archetype:23.0.0.Final并将其部署在Wildfly 23.0.2.Final.

这将创建 4 个项目

其中test-war将依赖项声明test-ejb为提供的模块。

但是,如果我这样定义@Singleton @StartupEJBtest-ejb

它被初始化两次:一次test-ejb是在部署时,另一次test-web是在部署时。

@Singleton考虑到依赖项的定义和provided范围,我没想到会这样。

我没有在项目配置中做任何事情,我只是添加了如上所述的单例类(我什至没有声明对记录器库的任何依赖,以将我的修改保持在最低限度)

我究竟做错了什么?


更新:添加清单和描述符

测试网

清单文件

豆类.xml

试耳

清单文件

应用程序.xml


更新:日志

深入研究日志,看起来问题实际上是双重部署而不是依赖问题。

在部署期间(通过 Eclipse),我看到第一块内容如下:

然后,我看到了第二个块:

EJB 和 WAR 模块被处理两次是否正确?


更新:野蝇日志

刚刚尝试增加 Wildfly 本身的日志级别。浏览生成的文件,我没有看到任何异常。但我注意到了这一点:

过了一会儿

我在 Wildfly 23 和 22 上验证了相同的行为。

0 投票
0 回答
48 浏览

java - 从 Jboss 4.2 迁移到 Jboss eap 7.3.0,在调用 EJB 时遇到问题。以下是代码:

Jboss EAP 7.3.0 打开 JDK 1.8.0_282 EJB 版本:3.2

0 投票
1 回答
137 浏览

ejb - 在 Liberty 上查找远程 EJB (wlp-javaee8.21.0.0.8)

正如标题所说。我在 EAR 中有一些 EJB,并且我有一个客户端 jar,它为同样处于自由状态(不同的服务器/机器)的 JSF 应用程序提供远程方法。客户端 jar 尝试通过查找访问远程 EJB。

这让我心碎了两天。正如标题所说...

我知道过去的其他 stackoverflow 问题,并且我知道以下资源: https ://www.ibm.com/docs/en/was-liberty/core?topic=liberty-using-enterprise-javabeans-remote -接口

https://github.com/OpenLiberty/open-liberty/blob/release/dev/com.ibm.ws.ejbcontainer.remote_fat/test-applications/RemoteClientWeb.war/src/com/ibm/ws/ejbcontainer/remote/客户端/web/RemoteTxAttrServlet.java

我已经尝试了上面提供的所有组合,但没有任何乐趣。


我使用启用了 javaee8 功能的 (wlp-javaee8.21.0.0.8),这启用了我需要的所有其他东西,例如 ejb-3.2、ejbRemote-3.2、jndi-1.0 和其他一些)

我有一个 EAR my-ear,其中包含一个模块 my-module-1.0.4-SNAPSHOT.jar,其中包含我的 bean。我正在使用 gradle/liberty 插件和 IntelliJ。我在客户端 jar 模块中使用 IntelliJ 中的测试来尝试访问远程 bean。

我的 myEAR 部署良好,启动良好,应用程序显示在 admincenter 中运行。在messages.log 中,我看到了我的EJB 绑定。只举一个例子。

[16/08/21 10:58:42:384 IST] 00000022 com.ibm.ws.ejbcontainer.osgi.internal.NameSpaceBinderImpl I CNTR0167I:服务器正在绑定 my.org.functiona.ejb.advance.MyAdvance 接口my-ear 应用程序的 my-module-1.0.4-SNAPSHOT.jar 模块中的 MyAdvanceBean 企业 bean。绑定位置是:ejb/my-ear/my-module-1.0.4-SNAPSHOT.jar/MyAdvanceBean#my.org.functiona.ejb.advance.MyAdvance [16/08/21 10:58:42:385 IST ] 00000022 com.ibm.ws.ejbcontainer.osgi.internal.NameSpaceBinderImpl I CNTR0167I: 服务器正在绑定 my-module-1.0.4- 中 MyAdvanceBean 企业 bean 的 my.org.functiona.ejb.advance.MyAdvance 接口my-ear 应用程序的 SNAPSHOT.jar 模块。绑定位置是:my.org.functiona.ejb.advance.MyAdvance [16/08/21 10:58:42:385 IST] 00000022 com.ibm.ws.ejbcontainer.runtime.AbstractEJBRuntime
I CNTR0167I: 服务器正在绑定 my-ear 应用程序的 my-module-1.0.4-SNAPSHOT.jar 模块中的 MyAdvanceBean 企业 bean 的 my.org.functiona.ejb.advance.MyAdvance 接口。绑定位置为:java:global/my-ws-ear/my-module-1.0.4-SNAPSHOT.jar/MyAdvanceBean!my.org.functiona.ejb.advance.MyAdvance

这是我对应的界面:

这是我相应的实现:

就像我说的,它伤透了我的心。我尝试了(不完整的)文档和其他来源中提供的每种组合。我取得的最大进展是通过默认 InitialContext().lookup 访问“corbaname::localhost:2809/NameService”。所以至少我能够确认我可以连接到 NameService。但是,使用该上下文以及 messages.log 或文档中的代码片段中提供的任何名称组合的任何后续 bean 查找都会失败,但出现以下异常。

javax.naming.NameNotFoundException [根异常是 org.omg.CosNaming.NamingContextPackage.NotFound: IDL:omg.org/CosNaming/NamingContext/NotFound:1.0]

与 InitialContext() 查找相同,我在名称前加上“corbaname::localhost:2809/NameService#”。

我试过了

  • ejb/my-ear/my-module-1.0.4-SNAPSHOT.jar/MyAdvanceBean#my.org.functiona.ejb.advance.MyAdvance
  • ejb/global/my-ear/my-module-1.0.4-SNAPSHOT.jar/MyAdvanceBean#my.org.functiona.ejb.advance.MyAdvance
  • ejb/my-ear/my-module-1.0.4-SNAPSHOT.jar/MyAdvance#my.org.functiona.ejb.advance.MyAdvance
  • ejb/global/my-ear/my-module-1.0.4-SNAPSHOT.jar/MyAdvance#my.org.functiona.ejb.advance.MyAdvance
  • java:global/my-ear/my-module-1.0.4-SNAPSHOT.jar/MyAdvance#my.org.functiona.ejb.advance.MyAdvance
  • java:global/my-ear/my-module-1.0.4-SNAPSHOT.jar/MyAdvanceBean#my.org.functiona.ejb.advance.MyAdvance
  • my.org.functiona.ejb.advance.MyAdvance

可能还有其他几个

我在上面的所有内容中都用感叹号替换了 # 符号。又经历了一遍。我尝试了 corbaloc:: 和 corbaloc:iiop: 作为上下文。没有什么。

我不是网络开发专家,但这感觉非常尝试和错误,我不觉得它应该是那样的。我知道在 websphere 中,我可以在管理控制台中识别名称,但是我什至不确定 websphere 本身和 liberty 的行为方式相同。

正弦从远程访问 EJB 似乎是面包和黄油的东西我认为由于我的经验不足,我忽略了一些基本和愚蠢的东西。

任何指针任何人?非常感谢您花时间阅读本文。

卡斯滕

编辑:server.xml

0 投票
0 回答
48 浏览

jboss - 注入导致 WELD-001408:不满足的依赖关系

我有一个 java EE web 应用程序,其中特定的注入会导致以下错误:

WELD-001408:带有限定符 @Default 的 GenericDAO 类型的依赖关系不满足

豆豆

自定义Bean

通用DAO

只有在应用程序中定义了 beans.xml 时才会出现此问题。删除它,也解决了这个问题。在我的情况下,需要 beans.xml。此外,当GenericDAO<T> genericDAO;从 CustomBean 中删除注入时,该错误不再出现。此外,我在其他课程中的其余注射似乎没有任何问题。

我试图通过创建 GenericDAO 的接口并注入接口来解决这个问题。还尝试使用 @Local , @Dependent 等几个注释,但我每次都会偶然发现不同的错误。

0 投票
1 回答
25 浏览

jakarta-ee - 在 EJB 3.1 中从无状态 Bean(已经有 REQUIRED)调用的方法中添加 @TransactionAttribute(REQUIRED_NEW) 是否有效?

根据规范,EJB 不支持嵌套事务,所以我想知道的是,假设有 2 个类(父类和子类)。父调用是无状态会话 bean,子调用是普通 java 服务(不是 EJB)。由于 EJB 默认使用容器托管事务,在 Child 的方法中添加 @TransactionAttribute(REQUIRED_NEW) 注释会导致创建新事务还是被容器忽略?

0 投票
0 回答
27 浏览

hibernate - 使用 hibernate 和 JakartaEE 在多租户中不回滚

我按照此链接使用 JakartaEE 8、Payara web-server 5.2021.9、Hibernate 5.4.32 和 MariaDb 10.5 测试多租户。当我坚持并抛出异常时,即使使用 entityManager.getTransaction().rollback() 或 setRollbackonly(),我的测试实体也不会回滚(仍然保留在数据库中)。

这是我的代码:

我错了或错过了什么?

0 投票
1 回答
35 浏览

java - 来自 EJB Bean 的 HTTP 请求

EJB 规范说你不应该管理线程。我已经看到 Bean 代码发送远程请求并使用 Thread.sleep 循环等待响应以减少 CPU 使用率。据我了解,这违反了规范。简单地从一个单独的 POJO 或库中调用逻辑,然后在 EJB 的方法中引用它来解决这个问题吗?简单地删除 Thread.sleep 是否会以额外的 CPU 消耗为代价来解决问题?外部同步请求应该如何在 EJB 中编码?