2013-02-21 29 views
5

Pracujemy nad projektem w java 1.6 przy użyciu JBOSS AS7 i używamy między innymi: Aspectj i HornetQ. Musimy zaktualizować do wersji 1.7, więc używamy ASpectj 1.7.1. Podczas wdrażania otrzymujemy następujący wyjątek:Jak określić zaimplementowane interfejsy dla fabryk połączeń jms przy użyciu Spring 3.2.1, Jboss AS7, Aspectj 1.7.1 java 1.7?

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 jest:

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

W innym projekcie, mieliśmy ten sam wyjątek, gdy używamy WZP źródło danych:

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

i uda nam się rozwiązać problem, dodając jboss-deployment-structure depedency modułu: 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> 

Czy istnieje moduł, który możemy dodać, aby przekazać ten wyjątek? lub w inny sposób rozwiązać ten problem?

+1

Ciężko jest mi zidentyfikować, gdzie HornetQ jest zaangażowany w Twój problem. Wydaje mi się, że jest to dla mnie kwestia czysto wiosenna. –

+0

To prawda! To była kwestia aspektów! Dziękuję za Twój czas! –

Odpowiedz

7

Chciałbym podzielić się z Wami rozwiązaniem. Dodaj moduły: 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> 
1

Chciałbym udokumentować, co działa dla mnie, nawet jeśli jestem spóźniony na to pytanie.

Używam JBoss 7.1.1 i 3.2.4: Wiosna

Korzystanie aspekty powiedzmy, opartych adnotacji w konfiguracji wiosennej spowoduje Aspect-Tkacz spróbować przejść wszystko składniki masz, w tym te, które otrzymałeś przez wyszukiwanie JNDI. Weaver natknie się na te komponenty, ponieważ (czytam gdzieś to) ładownik klasy użyty do ich załadowania (JBoss "ModuleClassLoader w moim przypadku) nie będzie wiedział nic o moim aspekcie (żyjącym w klasie programu ładującego klasy) i nie zadziała z Xlint:cantFindType.

Prosowanie tych komponentów przez coś w obrębie programu Classloader rozwiązuje ten problem.

Dla źródła danych JDBC:

Dla JMS ConnectionFactory

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

I tak dalej.

W ten sposób nie muszę uwzględniać żadnych dodatkowych modułów, takich jak org.jboss.ironjacamar.jdbcadapters i tym podobnych.