Я обнаружил довольно сложную проблему при работе над проектом с несколькими внедряемыми EE. Кажется, проблема в слиянии зависимостей Hibernate EJB3.1 TimerService и недостаточной изоляции загрузчика классов.
Начиная со стандартной сборки AS 6 CR1, я развернул WAR. Эта WAR содержит банки Hibernate.
Затем я развертываю EJB (технически MDB) в JAR. Когда я это делаю, JBoss запускает TimerService, чтобы обеспечить полную поддержку EJB3.1. TimerService зависит от Hibernate. Затем JBoss бастует, потому что загрузчик классов обнаруживает уже загруженную версию Hibernate.
Я даже пытался упаковать каждый из них в отдельный EAR и развернуть их. Нет кости. Что-то в том, как загружается TimerService, похоже, полностью игнорирует изоляцию загрузки классов.
У меня вопрос, могу ли я что-нибудь с этим сделать, кроме отключения службы TimerService? Я собирался использовать его изящные функции позже в проекте. Честно говоря, я даже не знаю, является ли это ошибкой, поскольку документация загрузчика классов для JBoss, кажется, была написана злыми клингонами. Тем не менее, я надеюсь на обходной путь.
РЕДАКТИРОВАТЬ - На самом деле, у меня даже нет способа отключить TimerService, так как все мои усилия были сорваны так или иначе. В настоящее время я не понимаю, как кто-либо может развернуть Hibernate и EJB в одном экземпляре JBoss.
РЕДАКТИРОВАТЬ - Мне удалось развернуть, не включив файлы Jibernate в мой MDB или WAR, но полагаясь на реализацию JBoss Hibernate. Это неудовлетворительно; У меня осталось ощущение, что нет никакой изоляции между контейнером и моими бобами. Но, по крайней мере, это текущая версия Hibernate (3.6).