Где я работаю, мы используем Знатока 2, и у нас есть довольно хороший архетип для наших проектов. Цель состояла в том, чтобы получить хорошее разделение проблем, таким образом мы определили структуру проекта с помощью нескольких модулей (один для каждого приложения 'слой'): - распространенный: общий код используется другими слоями (например, i18n) - объекты: доменные объекты - репозитории: этот модуль содержит интерфейсы дао и реализации - сервисы-intf: интерфейсы для сервисов (например, UserService...) - сервисы-impl: реализации сервисов (например, UserServiceImpl) - сеть: все относительно веб-контента (например, css, jsps, jsf страницы...) - ws: веб-сервисы
Каждый модуль имеет свои собственные зависимости (например, репозитории могли иметь jpa), и некоторые - широкий проект (таким образом, они принадлежат общего модуля). Зависимости между различными модулями проекта ясно разделяют вещи (например, веб-слой зависит от уровня служб, но не знает о слое репозитория).
Каждый модуль имеет свой собственный основной пакет, например, если пакет приложений является "com.foo.bar", то мы имеем:
com.foo.bar.common
com.foo.bar.entities
com.foo.bar.repositories
com.foo.bar.services
com.foo.bar.services.impl
...
Каждый модуль уважает стандартную структуру проекта знатока:
src\
..main\java
...\resources
..test\java
...\resources
Модульные тесты на данный слой легко находят свое место под \src\test... Все, что является зависящим от домена, имеет, это - место в модуле объектов. Теперь что-то как FileStorageStrategy должно войти в модуль репозиториев, так как мы не должны знать точно, какова реализация. В сервисном слое мы только знаем интерфейс репозитория, мы не заботимся о том, что определенная реализация (разделение проблем).
существует несколько преимуществ для этого подхода:
, я знаю, что это не отвечает на все Ваши вопросы, но я думаю, что это могло поместить Вас на правильный путь и могло оказаться полезным для других.
В JBoss вы можете регистрировать все события загрузчика классов , которые должны точно сказать вам, где находятся ваши конфликтующие классы, если вы можете просеять многословие.
Или вы можете перейдите в jmx-console, найдите раздел jboss.classloader, найдите запись для вашего уха (что-то вроде id = "vfszip: /apps/jboss-5.1.0.GA/server/default/deploy/your. war / ") и вызовите findClassLoaderForClass для класса, который вызывает проблемы.
Какой сервер приложений вы используете?
Не думаю, что такой инструмент существует.