Статьи

При переходе с JBoss4 на JBoss5 происходит перерыв сканирования Spring Classpath

Сканирование classpath в Spring 2.5 не работает на JBoss5 из-за внутренних изменений архитектуры в JBoss5. Вы можете столкнуться с этой проблемой при переходе с JBoss4 на JBoss5. Эта статья проведет вас через простое исправление с фрагментами кода.

Ошибка сканирования пути к классам

В JBoss 4 ваше приложение, вероятно, использовало Spring 2.5.6 с сканированием пути к классам для загрузки пружинных компонентов (как показано ниже). При переносе кода в JBoss5 вы заметите, что компонентное сканирование не работает с JBoss5. Симптомы могут включать в себя нулевые компоненты Spring или если вы использовали интеграцию Spring Seam и бины Spring были загружены при сканировании пути к классам, то может быть следующая ошибка:

Код шва

public class LoginController extends Controller {
@In("#{userService}")
protected demo.entity.service.UserService userService;

Трассировки стека

Caused by: org.jboss.seam.RequiredException: @In attribute requires non-null value: loginController.#{userService}
at org.jboss.seam.Component.getValueToInject(Component.java:2335)
at org.jboss.seam.Component.injectAttributes(Component.java:1736)
at org.jboss.seam.Component.inject(Component.java:1554)
at org.jboss.seam.core.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:61)
at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)

Spring 2.5.6 зависимость в pom.xml

 <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6</version>
</dependency>

Старый весенний конфиг XML

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-2.5.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-2.5.xsd"
default-init-method="init" default-destroy-method="shutdown">
<context:annotation-config />
<context:component-scan base-package="demo.dao.jpa" />
</beans>

Если вы запустите приведенный выше код в JBoss5, компонентное сканирование не будет работать. Смотрите эту проблему JIRA на веб-сайте Spring .

Решение

Вам необходимо перенести вашу весеннюю версию с 2.5.6 на 3.0.0.RELEASE. Удалите старую пружинную зависимость для 2.5.6 и добавьте следующее. Добавьте фрагменты для компонентов, которые нужны вашему приложению. Вот список общих компонентов пружин и их maven зависимостей.

Новая зависимость

 <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>3.0.0.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.0.0.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>3.0.0.RELEASE</version>
</dependency>
 <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>3.0.0.RELEASE</version>
<scope>test</scope>
</dependency>

Полный список доступен здесь . После внесения этого изменения создайте свой проект с новыми зависимостями. Ваш старый код должен работать с Spring 3 на JBoss 5.1.0.GA.

С http://www.vineetmanohar.com/2010/04/08/spring-classpath-scan-issue-jboss5