我正在尝试在war文件之外加载bean。目的是应该可以在不使用新war文件的情况下更改jar文件。
我的war文件包含外部jar作为提供的依赖项:
<dependency>
<groupId>com.lube</groupId>
<artifactId>foo</artifactId>
<version>0.0.1-snAPSHOT</version>
<scope>provided</scope>
</dependency>
我将jar文件添加到域目录(domain / lib / applibs)中的applibs文件夹中,并在部署期间填写了库字段。
似乎没有从这个jar文件中加载任何bean(无法注入),但是可以使用该类。 (该类在当前的类加载器中可用)。
如果我从war文件中向类中注入了某些内容,则会出现异常
UnsatisfiedResolutionException: WELD-001334: Unsatisfied dependencies for type XXX with qualifiers
我正在使用payara 4.1.2.174,但它也不适用于payara 5。
主要问题是:是否应该在战争之外装载bean(ejb / cdi)?我在网络上找不到任何好的解决方案。
P.S .:我不能使用微服务;)
编辑: war文件不不包含jar文件。 jar文件当前位于/ lib / applibs下的域中(我也测试了所有其他文件夹)
下面的命令asadmin add-library --type app C:\library.jar
library.jar仅包含一个CDI bean
@Model
public class CdiBean {
public void test() {
System.out.println("It works!");
}
}
和beans.xml文件。 (资源/ Meta-INF-我也没有使用Meta-INF文件夹进行了测试)
WAR文件具有一个尝试加载Bean的启动类。
@Singleton
@Startup
@Transactionmanagement(value = javax.ejb.TransactionmanagementType.BEAN)
public class AppStartup {
@PostConstruct
public void postConstruct() {
try {
System.out.println(CdiBean.class);
CDI.current().select(CdiBean.class).get().test();
} catch (Exception e) {
throw new IllegalStateException(e.getMessage(),e);
}
}
}
部署战争后的输出是:
[2020-01-21T13:47:36.413+0100] [Payara 4.1] [INFO] [] [] [tid: _ThreadID=103 _ThreadName=admin-thread-pool::admin-listener(3)] [timeMillis: 1579610856413] [levelValue: 800] [[ class com.lube.CdiBean]]
[2020-01-21T13:47:36.474+0100] [Payara 4.1] [SEVERE] [] [javax.enterprise.system.tools.deployment.common] [tid: _ThreadID=103 _ThreadName=admin-thread-pool::admin-listener(3)] [timeMillis: 1579610856474] [levelValue: 1000] [[
Exception while invoking class org.glassfish.ejb.startup.EjbApplication start method
javax.ejb.EJBException: javax.ejb.CreateException: Initialization failed for Singleton AppStartup
...
Caused by: javax.ejb.CreateException: Initialization failed for Singleton AppStartup
at com.sun.ejb.containers.AbstractSingletonContainer.createSingletonEJB(AbstractSingletonContainer.java:553)
at com.sun.ejb.containers.AbstractSingletonContainer.access$000(AbstractSingletonContainer.java:82)
at com.sun.ejb.containers.AbstractSingletonContainer$SingletonContextFactory.create(AbstractSingletonContainer.java:723)
... 72 more
Caused by: java.lang.IllegalStateException: WELD-001334: Unsatisfied dependencies for type CdiBean with qualifiers
... 74 more
Caused by: org.jboss.weld.exceptions.UnsatisfiedResolutionException: WELD-001334: Unsatisfied dependencies for type CdiBean with qualifiers
... 102 more
]]