NoClassDefFoundError для EJB Домашний класс - PullRequest
0 голосов
/ 08 марта 2012

Я использую JBoss 4.2.3, EJB2, XDoclet и развернул один EAR с EJB в нем и другие EAR с различными веб-сайтами.

При попытке получить доступ к EJB с одного из веб-сайтов я получаю NoClassDefFoundError.Кажется, что поиск успешен.Я вижу, например, что getContext().lookup(SecurityServiceRemoteHome.JNDI_NAME) возвращает что-то класса "$ Proxy266".Я также вижу в JNDI JBoss View эту привязку:

remote (proxy: $Proxy266 implements interface com.icumed.ifactory.service.session.SecurityServiceRemoteHome,interface javax.ejb.Handle)

FYI, SecurityServiceRemoteHome.JNDI_NAME = "ejb / ifactory / SecurityService / remote"

Сразу после поиска я вызываю это, котороеВот где выдается ошибка:

home = (SecurityServiceRemoteHome)PortableRemoteObject.narrow(obj,
    SecurityServiceRemoteHome.class);

Я слышал, что это может быть ненужным, и я могу просто выполнить прямое преобразование типов здесь, но я не думаю, что это проблема.Из того, что я читал в Интернете до сих пор, кажется, что, возможно, SecurityServiceRemoteHome не может быть полностью загружен.Возможно, некоторые вспомогательные классы отсутствуют?Я не вижу никаких ошибок, указывающих на это, хотя.Каков наилучший способ отладки этого?

1 Ответ

0 голосов
/ 10 марта 2012

После еще большего количества копаний я нашел ответ. Это связано с файлом jboss-app.xml и элементом loader-repository. Предпосылкой является то, что ранее у меня был один полный файл EAR со всеми WAR-файлами и EJB-компонентами. Я решил разбить их на части, и когда я это сделал, я изменил файлы jboss-app.xml, чтобы имя архива было разным для каждого из них. Это было неправильно. Они должны быть одинаковыми между EAR для EJB и EAR для WAR (Да, мне не нужен файл EAR, если это просто WAR ... за исключением OC4J). Кроме того, у меня должен быть элемент загрузчика-репозитория с именем архива. Отказ от этого вызывает другие проблемы.

...