以下代码是否违反EJB 3规范?如果是这样,我能做些什么来保留所需的功能?EJB内部的类实例化
为什么我问的原因是,14的IntelliJ产生这些警告:
- 的“java.lang.reflect.Constructor中的”使用EJB中是不允许的“java.lang中的
- 用法.reflect.InvocationTargetException”是不允许 EJB
我想要实例化的类(ES)是EJB没有,只是一个POJO和EJB作为这些POJO的(它们封装业务逻辑的存储库)。
@Stateless
public class MyBean {
public SomeInterface createSomeClass(final Class<? extends AbstractSomeClass> someClass, final MyArgument argument) {
try {
final Constructor constructor = someClass.getDeclaredConstructor(argument.getClass());
constructor.setAccessible(true);
return (SomeInterface) constructor.newInstance(state);
} catch (InvocationTargetException | NoSuchMethodException | InstantiationException | IllegalAccessException e) {
// TODO fix exception handling
throw new RuntimeException(e);
}
}
}
谢谢你的帮忙。
问候,
西蒙
编辑
在我看来,有在EJB 3规范,回答我的问题的第一部分,一个部分:
企业bean不得试图查询某个类以获取有关已声明的 成员的信息由于Java语言的安全规则 ,因此企业bean无法访问。企业bean不得尝试使用Reflection API访问Java编程语言的安全规则使其不可用的信息。
我从来没有听说过这个,不明白这个规则背后的原因。有状态的EJB可能是我的问题的替代方案,但这对我来说太重了。
你看过CDI吗?似乎完全适合你试图达到的目标(生产者,注入建设者等)。 – BalusC
我想这会工作,但目前由于项目限制,我不能介绍CDI。 – saimonsez