当前位置: 首页 > 知识库问答 >
问题:

使用Payara 4.1在不同的罐子中加载CDI bean。1.

干照
2023-03-14

我们目前正在将JEE 6应用程序(WAR部署)从GF 3.1移植到Payara 4.1。1.我们正在使用EJB和CDIBean。它们被打包在不同的jar文件中。我面临的问题是无法找到位于另一个jar文件中的CDIBean。每个jar文件都有自己的META-INF/bean。还有一个用于WAR(WEB-INF/beans.xml)归档。我已经尝试了以下步骤:

  • 领养豆子。xml(bean discovery mode=“all”)

有人知道Glassfish/Payara 4.1中是否存在一般错误吗。1.

Thx,伯纳德

不幸的是,这没有帮助。我做了更多的调查,似乎只有“一些”bean无法正确地从BeanManager中注入或检索。此处显示不起作用的类层次结构:

`// AllwaysFalse is our own annotation.
@AllwaysFalse
@Named
public class AllwaysFalseRemoteCondition<E extends IStandardEntity>
         extends ConditionBase<javax.persistence.criteria.Predicate, E>
         implements RemoteCondition<javax.persistence.criteria.Predicate, E>      
{
…
}

// The abstract base class
public abstract class ConditionBase<R, T extends IStandardEntity> implements      Condition<R, T> {
}

// The base interface
public interface RemoteCondition<T, E extends IStandardEntity> extends  Condition<T, E> {

}

public interface Condition<T, E extends IStandardEntity> extends Part<ConditionDescriptor> {
…
}

如果我将上述类别更改为:

public class AllwaysFalseRemoteBotCondition<E extends IStandardEntity> {
}

注射有效。

如果我尝试通过BeanManager注入bean,如果我执行基于类型的搜索,则getBeans()方法将不起作用:

`BeanManager bm = getBeanManager();
    Set<Bean<?>> beans = bm.getBeans(clazz, annotations);

如果我在“class”参数中提供接口类,则返回值始终为null。

共有2个答案

邵宏达
2023-03-14

解决方案:

Set<Bean<?>> beans = bm.getBeans(
    new TypeLiteral<RemoteCondition<javax.persistence.criteria.Predicate,?>>() {}
    .getType(), 
    new AnnotationLiteral<AlwaysFalse>(){}

打字机解决了这个问题!感谢Payara的支持!

宦正诚
2023-03-14

下载weld-servlet.jar并放入项目库,或者更好的是,为什么你不使用野蝇?他带着所有的罐子在你的应用程序中运行cdi。

 类似资料:
  • 问题内容: 我需要在jar中打包一个配置文件。配置文件位于jar文件的根目录下。但是我收到以下错误: 引起原因:java.lang.IllegalArgumentException:在java.io.File中URI不分层。(未知源) 问题答案: 您应该改用。如果文件嵌入在您的JAR中,则URI最有可能是bundle:// URI

  • 我使用的是SpringContext 5.3.13(没有SpringBoot) 我的问题:当运行jar时,由于jar内的路径不可用,文件找不到。更多信息: 文件本身在jar根目录内(检查了) 例外: 线程“main”组织中出现异常。springframework。豆。工厂BeanDefinitionStoreException:未能分析配置类[com.viber.httpmsecample.App

  • 是否可以在使用关键字创建的类中获取CDIBean的实例?我们目前正在对一个旧的应用程序进行一些增强,每次我们在应用程序中对CDI单例bean进行编程查找时,都会得到一个ContextNotActiveException。 获取参考的代码: BeanManager支持。JAVA

  • 问题内容: 我在eclipse的java项目中具有这样的结构: src / com / myprogram /…/ foo.java res / icon.png 。项目 … 我知道您可以使用以下方式从罐子中加载图像 当您尝试直接使用eclipse运行应用程序时会出现问题,因为(我想)res文件夹不在src文件夹中,则会显示 。我想为源代码和资源提供单独的文件夹。 另外,我发现我可以将文件夹添加到

  • 如何从WEB-INF\lib\someName加载(从代码)所需的文件(*.txt)。罐子 我尝试了机制: 但它仅在所需文件位于WEB-INF\class文件夹中时才起作用。 然后我尝试在jar中使用所需文件创建META-INF\资源文件夹。但它没有生效。

  • 这是我的适配器类。 当添加片段并将它们添加到适配器中的不同arraylist时,我传递了不同的arraylist,当调用get item时,我从arraylist中获取条目并将其作为参数传递给该片段,但当我运行此操作时,我最初只获得所有参数,当我更改选项卡时不会发生任何事情。我试着调试,发现getitem最初只被调用了8次,当我改变viewpager选项卡时,什么也不会发生。我也尝试了fragme