5

我们正在使用 JBOSS AS7 在 java 1.6 中开发一个项目,其中我们使用:Aspectj 和 HornetQ。我们需要升级到 java 1.7,所以我们使用 ASpectj 1.7.1。在部署期间,我们得到以下异常:

Caused by: org.springframework.beans.factory.BeanCreationException:
  Error creating bean with name 'eventsJmsTemplate' defined in class path resource [com/company/project/jms/jms.xml]: 
  Cannot resolve reference to bean 'jmsConnectionFactory' while setting bean property 'connectionFactory'; nested exception is
   org.springframework.beans.factory.BeanCreationException: 
  Error creating bean with name 'jmsConnectionFactory': 
  Post-processing of the FactoryBean's object failed; 
    nestedexception is java.lang.IllegalArgumentException: 
      warning can't determine implemented interfaces of missing type 
    com.company.project.aspects.MBeanAttributesAdvice [Xlint:cantFindType]

mbean是:

<jee:jndi-lookup id="jmsConnectionFactory" jndi-name="java:/JmsXA" />

在其他项目中,我们在使用 JPA 数据源时遇到了同样的异常:

<jee:jndi-lookup id="dataSource" jndi-name="java:jboss/datasources/table" />
<bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />

我们设法通过在 jboss-deployment-structure 上添加模块依赖来解决这个问题:org.jboss.ironjacamar.jdbcadapters

<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="org.slf4j" />
            <module name="org.slf4j.impl" />
            <module name="org.apache.log4j" />
        </exclusions>
        <dependencies>
            <module name="org.jboss.ironjacamar.jdbcadapters" />
        </dependencies>
    </deployment>
</jboss-deployment-structure>

有没有我们可以添加的模块来传递这个异常?或任何其他方式来解决这个问题?

4

2 回答 2

7

我想与您分享解决方案。添加模块:org.hornetq、org.hornetq.ra、org.jboss.ejb3、org.jboss.ejb-client。

<jboss-deployment-structure>
    <deployment>
        <!-- Exclusions allow you to prevent the server from automatically adding 
            some dependencies -->
        <exclusions>
            <module name="org.slf4j" />
            <module name="org.slf4j.impl" />
            <module name="org.apache.log4j" />
        </exclusions>
        <dependencies>
            <module name="org.jboss.ironjacamar.jdbcadapters" />
            <module name="org.hornetq" />
            <module name="org.hornetq.ra" />
            <module name="org.jboss.ejb3" />
            <module name="org.jboss.ejb-client" />
        </dependencies>
    </deployment>
</jboss-deployment-structure>
于 2013-02-22T09:51:09.667 回答
1

我想记录什么对我有用,即使我迟到了这个问题。

我正在使用 JBoss 7.1.1 和 Spring 3.2.4:

例如,在 Spring 设置中使用基于注释的 Aspects 将导致 Aspect-Weaver 尝试检查您拥有的所有组件,包括您通过 JNDI-lookup 获得的组件。Weaver 会偶然发现这些组件,因为(我在某处读到过)用于加载它们的 Classloader(在我的例子中是 JBoss 的 ModuleClassLoader)对我的 Aspect (生活在我项目的类加载器中)一无所知,并且以Xlint:cantFindType.

通过项目类加载器范围内的东西代理这些组件可以解决这个问题。

对于 JDBC 数据源:

<jee:jndi-lookup id="dataSource" jndi-name="java:jboss/datasources/myDS" proxy-interface="javax.sql.DataSource" />

对于 JMS 连接工厂

<jee:jndi-lookup id="connectionFactory" jndi-name="java:/JmsXA" proxy-interface="javax.jms.ConnectionFactory"/>

等等。

这样我就不必包含任何额外的模块之类的org.jboss.ironjacamar.jdbcadapters

于 2014-02-21T10:56:02.707 回答