#ejb #jboss7.x
#ejb #jboss7.x
Вопрос:
Я сталкиваюсь со странным поведением с JBoss КАК 7 и моим приложением, которое использует EJB3.1. Я успешно выполняю поиск компонента, но когда я пытаюсь привести его к своему интерфейсу, возникает исключение.
Короче говоря, код:
@Local
public interface BusinessObjectsFactory { ... }
@Stateless
@Local(BusinessObjectsFactory.class)
public class JPABusinessObjectsFactory implements BusinessObjectsFactory { ... }
...
Object obj = ctx.lookup("java:app/moduleName/"
"JPABusinessObjectsFactory!pckg.BusinessObjectsFactory");
Class c = obj.getClass();
System.out.println(c.getName()); // pckg.BusinessObjectsFactory$$$view36
System.out.println(c.getInterfaces()[0].getName()); // BusinessObjectsFactory
BusinessObjectsFactory bof = (BusinessObjectsFactory) obj; //cast exception
Есть идеи? Обратите внимание, что интерфейс необходим (какая реализация просматривается, считывается из файла конфигурации и может измениться)
Комментарии:
1. 1. Ваше приложение выполняется на сервере, а где клиент? На том же сервере, в том же приложении? 2. Используете ли вы модули EJB-jar или WAR-упаковку? 3. (незначительный) если вы укажете @Local в своем интерфейсе, вам не нужно делать это еще раз на уровне класса. Достаточно одного @Local .
2. Находятся ли клиентские и целевые EJB в отдельных войнах? Что возвращают c.getInterfaces()[0].getClassLoader() и BusinessObjectsFactory.class.getClassLoader()?
3. Ну, я вроде как новичок в упаковке таких архивов. Что я хочу, так это отдельные модули EJB (скажем, модуль EJB для сохранения и модуль EJB с бизнес-логикой, которая использует этот модуль сохранения). Логика приложения должна вызывать модуль persitence через некоторый интерфейс. Вот почему я создал эту структуру:
4. интерфейсы-jar включает интерфейс BusinessObjectsFactory, jpa-persistence.jar знает и реализует interfaces.jar , applogic.jar знает интерфейсы. jar и выполняет поиск JNDI java: app / JPABusinessFactory
5. Я создаю приложения с помощью maven. Если есть какой-нибудь хороший пример, как этого добиться (как правильно устанавливать зависимости и что должно и не должно включать конкретные банки EJB)…
Ответ №1:
Я переключился на другую стратегию поиска, пока это больше не проблема для меня. Я не уверен, что это все еще присутствует в новейших версиях JBoss / Wildfly AS. Вот почему я закрываю этот вопрос.