Jakarta ee EJB3会话bean的动态和编程创建

Jakarta ee EJB3会话bean的动态和编程创建,jakarta-ee,cdi,ejb-3.1,stateless-session-bean,Jakarta Ee,Cdi,Ejb 3.1,Stateless Session Bean,我有一个用例,我想动态(=以编程方式)创建一个无状态会话Bean(EJB3),而不是通过注释(@Stateless)声明性地创建一个无状态Bean 有没有办法告诉EJB容器/CDI我的程序想要: 创建一个java实例 将实例动态注册为无状态EJB(包括任何元信息,例如事务上下文(哪个方法应该在哪个事务上下文中运行,哪个TxType(必需,支持,…)下运行),以及 是否也在命名上下文(JNDI/EJB名称)中注册它 因此,简而言之: 我有作为“无状态SB”生产者/提供者的自定义代码,它应该能够

我有一个用例,我想动态(=以编程方式)创建一个无状态会话Bean(EJB3),而不是通过注释(@Stateless)声明性地创建一个无状态Bean

有没有办法告诉EJB容器/CDI我的程序想要:

  • 创建一个java实例

  • 将实例动态注册为无状态EJB(包括任何元信息,例如事务上下文(哪个方法应该在哪个事务上下文中运行,哪个TxType(必需,支持,…)下运行),以及

  • 是否也在命名上下文(JNDI/EJB名称)中注册它

因此,简而言之:

我有作为“无状态SB”生产者/提供者的自定义代码,它应该能够让容器知道它想要注册一个新实例(类)作为无状态SB,具有所有预期EJB行为(Tx拦截器等)

所以我真正想说的是:

我的代码知道如何(通过代码)实现需要 动态封装在属于某个类的实例中 不使用@Stateless注释进行声明性注释,并且 将以类似无状态会话的方式动态(运行时)修饰 豆子

另一种方法是,海事组织:

在接口中定义所有EJB特定的元信息,这些信息将由bean实现,但EJB3规范不允许您在接口级别上声明@Stateless。@应在实现级别(bean)上声明Stateless

请注意:我的例子中并不存在这种无状态注释bean实现,因此容器无法扫描代码、查找类并将其注册为无状态bean


有什么想法吗?

没有,EJB必须在启动时通过部署描述符或注释声明。您能解释一下您的用例吗?也许您不是在寻找动态创建EJB的方法,但您是在寻找一个pojo,它具有事务性功能,还可以注入到其他组件中。关于EJB的整个想法正在讨论中“容器管理”。你应该修改你的用例。你好,John。我想通过实现一个REST API来做一些原型设计,该API使用无状态会话bean来访问业务逻辑。我能够在注入点对真实会话bean或数据存根会话bean(mock)进行注释,这取决于我的自定义注释(通过CDI)中的开关。真正的会话bean是以传统方式(@Stateless)实现的,但在另一种情况下(mock),我做了一些动态的事情,因为我正在使用一个mock框架。我基本上要求@products注释的方法“给我“基于某个服务接口的模拟。我希望模拟实例表现为SLB。Hi InfiniteFactor。我理解你的建议。我的考虑是,我希望保持逻辑(调用我的服务方法)对我的策略不可知(无论它是真实的还是我的服务(模拟)的原型版本)。实际上,已知的“基于接口模式构建”或Spring使用此模式进行DI的方式。但现在,我想在运行时传递我的实现版本。嗯,在我写这篇文章时……我还意识到所有这些事情(我希望发生)都应该在第一次创建SLB时发生(在将其放入池中之前)……如果我看到我的代码/设计……突然……我想知道我想要的东西是否可能突然……(现在大声思考;-))