bean初始化失败;嵌套异常为java.lang.NoClassDefFoundError:Ljavax/enterprise/concurrent/ManagedThreadFactory
我在WAR项目中添加了一些代码来使用javax.enterprise.concurrent.ManagedThreadFactory,现在我得到一个NoClassDefFoundError。我已经附上了错误消息和我的Maven pom更改。我在Java1.7中使用WebLogic12cbean初始化失败;嵌套异常为java.lang.NoClassDefFoundError:Ljavax/enterprise/concurrent/ManagedThreadFactory,java,multithreading,spring,jakarta-ee,Java,Multithreading,Spring,Jakarta Ee,我在WAR项目中添加了一些代码来使用javax.enterprise.concurrent.ManagedThreadFactory,现在我得到一个NoClassDefFoundError。我已经附上了错误消息和我的Maven pom更改。我在Java1.7中使用WebLogic12c ]] Root cause of ServletException. org.springframework.beans.factory.BeanCreationException: Error creating
]] Root cause of ServletException.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myComponent' defined in class path resource [my/package/bean.xml]: Cannot resolve reference to bean 'careCoordinatorRecipientListComponentRouter' while setting bean property 'inboundRouter'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myComponent': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [javax.enterprise.concurrent.ManagedThreadFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(shareable=true, mappedName=, description=, name=, type=class java.lang.Object, authenticationType=CONTAINER, lookup=)}
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1325)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
Truncated. see log file for complete stacktrace
Caused By: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'careCoordinatorRecipientListComponentRouter': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [javax.enterprise.concurrent.ManagedThreadFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(shareable=true, mappedName=, description=, name=, type=class java.lang.Object, authenticationType=CONTAINER, lookup=)}
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:300)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1074)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
Truncated. see log file for complete stacktrace
Caused By: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [javax.enterprise.concurrent.ManagedThreadFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(shareable=true, mappedName=, description=, name=, type=class java.lang.Object, authenticationType=CONTAINER, lookup=)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:920)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:789)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:703)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:431)
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:409)
Truncated. see log file for complete stacktrace
Maven change:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
]]ServletException的根本原因。
org.springframework.beans.factory.BeanCreationException:创建名为“myComponent”的bean时出错,该名称在类路径资源[my/package/bean.xml]中定义:设置bean属性“inboundRouter”时无法解析对bean“CareCordinatorRecipientListComponentRouter”的引用;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“myComponent”的bean时出错:注入资源依赖项失败;嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException:未找到依赖项类型为[javax.enterprise.concurrent.ManagedThreadFactory]的匹配bean:应至少有1个bean符合此依赖项的autowire候选项的条件。依赖项注释:{@javax.annotation.Resource(shareable=true,mappedName=,description=,name=,type=class java.lang.Object,authenticationType=CONTAINER,lookup=)}
位于org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
在org.springframework.beans.factory.support.BeanDefinitionValueResolver.ResolveValueIfNeeded上(BeanDefinitionValueResolver.java:106)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1325)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
截断的。有关完整的堆栈跟踪,请参阅日志文件
原因:org.springframework.beans.factory.BeanCreationException:创建名为“CareCordinatorRecipientListComponentRouter”的bean时出错:注入资源依赖项失败;嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException:未找到依赖项类型为[javax.enterprise.concurrent.ManagedThreadFactory]的匹配bean:应至少有1个bean符合此依赖项的autowire候选项的条件。依赖项注释:{@javax.annotation.Resource(shareable=true,mappedName=,description=,name=,type=class java.lang.Object,authenticationType=CONTAINER,lookup=)}
位于org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:300)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1074)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
位于org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
截断的。有关完整的堆栈跟踪,请参阅日志文件
原因:org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到依赖项类型为[javax.enterprise.concurrent.ManagedThreadFactory]的匹配bean:至少需要1个符合此依赖项autowire候选项条件的bean。依赖项注释:{@javax.annotation.Resource(shareable=true,mappedName=,description=,name=,type=class java.lang.Object,authenticationType=CONTAINER,lookup=)}
位于org.springframework.beans.factory.support.DefaultListableBeanFactory.RaiseNouchBeanDefinitionException(DefaultListableBeanFactory.java:920)
位于org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:789)
位于org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:703)
位于org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:431)
位于org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:409)
截断的。有关完整的堆栈跟踪,请参阅日志文件
Maven变更:
爪哇
JavaEEAPI
7
使用此代码的我的类:
public class AsynchronousLinkedComponentRouter implements
MessageDispatcher<Object, Object> {
/**
* The components reference.
*
* @uml.property name="component"
* @uml.associationEnd
*/
private List<Component<Object, Object>> components;
/**
* Logger for this class.
*/
private static final Log LOG = LogFactory
.getLog(AsynchronousLinkedComponentRouter.class);
protected ConcurrentHashMap<String, Object> threadResultsMap;
protected ConcurrentHashMap<String, ComponentException> componentExceptionsInThreads;
@Resource
private javax.enterprise.concurrent.ManagedThreadFactory threadFactory;
/**
* Set the components.
*
* @param theComponent
* the component reference.
*/
@Required
public void setComponents(final List<Component<Object, Object>> components) {
this.components = components;
}
/**
* Route the message to the component.
*
* @param message
* the message
* @return the output after the component has processed the message
* @throws RouterException
* if an error occurred when routing the message
*/
@Override
public Object route(final Object message) throws RouterException {
try {
threadResultsMap = new ConcurrentHashMap<String, Object>();
List<Thread> producerThreads = new ArrayList<Thread>();
for (final Component<Object, Object> component : this.components) {
AsychronousMessageProcessorTask ampTask = this.new AsychronousMessageProcessorTask(
component, message);
Thread producerThread = threadFactory.newThread(ampTask);
producerThread.setName("Parent thread: "
+ Thread.currentThread().getName() + " for component: "
+ component.getName());
producerThread.start();
producerThreads.add(producerThread);
}
LOG.info("Created the producer threads, waiting to join the threads.");
try {
for (Thread thread : producerThreads) {
thread.join();
}
} catch (InterruptedException e) {
throw new RouterException("Interruption while joining producer threads",e);
}
LOG.info("Joined all producer threads");
if (componentExceptionsInThreads.size() > 0) {
LOG.info("Detected exceptions thrown in "
+ String.valueOf(componentExceptionsInThreads.size())
+ " producer thread(s).");
String oneExceptionKey = null;
for (String k : componentExceptionsInThreads.keySet()) {
LOG.error(componentExceptionsInThreads.get(k));
oneExceptionKey = k;
}
// We can only throw one of the (possibly multiple) ComponentExceptions
// The selected one to throw is not guaranteed to be the first.
throw (componentExceptionsInThreads.get(oneExceptionKey));
}
List<Object> resultsList = new ArrayList<Object>(threadResultsMap.values());
return resultsList;
} catch (final ComponentException ex) {
throw new RouterException(ex);
}
}
private class AsychronousMessageProcessorTask implements Runnable {
private Component<Object, Object> component;
private Object message;
public AsychronousMessageProcessorTask(Component<Object, Object> component,
final Object message) {
this.component = component;
this.message = message;
}
public void run() {
try {
threadResultsMap.put(component.getName(),
component.processInbound(message));
} catch (ComponentException e) {
componentExceptionsInThreads.put(component.getName(), e);
}
}
}
}
公共类异步LinkedComponentRouter实现
消息调度器{
/**
*组件引用。
*
*@uml.property name=“组件”
*@uml.associationnd
*/
私有列表组件;
/**
*此类的记录器。
*/
私有静态最终日志=日志工厂
.getLog(AsynchronousLinkedComponentRouter.class);
受保护的ConcurrentHashMap threadResultsMap;
受保护的ConcurrentHashMap组件ExceptionsInthreads;
@资源
私有javax.enterprise.concurrent.ManagedThreadFactory线程工厂;
/**
*设置组件。
*
*@param组件
*组件引用。
*/
@必需的
公共组件(最终列表组件){
这个。组件=组件;
}
/**
*将消息路由到组件。
*
*@param消息
*信息
*@在组件处理消息后返回输出
*@RouterException
*如果在路由邮件时发生错误
*/
@凌驾
公共对象路由(最终对象消息)引发RouterException{
试一试{
threadResultsMap=新的ConcurrentHashMap();