JBoss КАК 7, приведение EJB3 к интерфейсу

#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. Вот почему я закрываю этот вопрос.