在WebSphere中注入spring资源失败

时间:2012-12-07 15:41:43

标签: java spring websphere websphere-7 autowired

我一直试图将一个hashmap注入一个类。根据这篇文章:Auto-wiring a List using util schema gives NoSuchBeanDefinitionException我应该使用@Resource而不是@Autowire来制作地图。

我的代码如下所示:

@Configurable
public class MyClass
{   

    @Resource(name="myMap")
    private Map<String,String> myMap = new HashMap<String, String>();

我的配置如下:

<context:annotation-config/>
<context:component-scan base-package="com.MyClass"/>

<util:map id="myMap" 
            key-type="java.lang.String"
            value-type="java.lang.String">
    <entry key="k1" value="v1"/>
    <entry key="k2" value="v2"/>
</util:map>

应用程序启动正常,但是当我尝试运行引用MyClass的代码时,我得到了这个WebSphere错误:

CNTR0035E: EJB container caught com.ibm.wsspi.injectionengine.InjectionException: Failed to process bindings for metadata
    at com.ibm.ws.injectionengine.InjectionEngineImpl.processBindings(InjectionEngineImpl.java:529)
    at com.ibm.ws.injectionengine.InjectionEngineImpl.processInjectionMetaData(InjectionEngineImpl.java:322)
    at com.ibm.ws.util.ComponentNameSpaceHelper.populateJavaNameSpace(ComponentNameSpaceHelper.java:806)
...
Caused by: com.ibm.wsspi.injectionengine.InjectionException: CWNEN0044E: A resource reference binding could not be found for the following resource references [myMap], defined for the MyService component.
    at com.ibm.wsspi.injectionengine.InjectionProcessor.collectInjectionNBindingData(InjectionProcessor.java:1042)
    at com.ibm.ws.injectionengine.InjectionEngineImpl.processBindings(InjectionEngineImpl.java:516)
    ... 52 more
 and is throwing com.ibm.ejs.container.ContainerException: Failed to initialize BeanMetaData instance; nested exception is: 
    com.ibm.wsspi.injectionengine.InjectionException: Failed to process bindings for metadata.

有没有办法将地图注入我在WebSphere中的类?

(使用Spring 2.5,WebSphere 7)


之前,我尝试使用以下代码进行自动装配:

@Configurable(autowire=Autowire.BY_NAME, preConstruction=true)
public class MyClass
{   

@Qualifier("myMap")
@Autowired(required=true)
    private Map<String,String> myMap = new HashMap<String, String>();

并使用此配置:

<context:annotation-config/>
<context:component-scan base-package="com.MyClass"/>

<util:map id="myMap" 
            key-type="java.lang.String"
            value-type="java.lang.String">
    <entry key="k1" value="v1"/>
    <entry key="k2" value="v2"/>
</util:map>

结果是我尝试自动装配的字段为空。

2 个答案:

答案 0 :(得分:0)

似乎autowire byType或byName有效.. 你试过.. ??

答案 1 :(得分:0)

我可以通过添加

让我的应用程序再次部署

忽略扫描包:foo.myapp

(用你的基础包替换foo.myapp;))

然而,这感觉就像一种解决方法。另一方面,这会略微减少应用启动时间。