Ошибка определения класса: ошибка упаковки EJB EAR или ссылка - PullRequest
0 голосов
/ 19 марта 2012

У меня есть следующие проекты EJBWebClient EJBProj EJBDataAccess

Я впервые создал EJBProj. Создал EJBDataAccess и добавил его в EJBProj.ear. Затем создал EJBWebClient и добавил его к тому же уху соответственно.

Теперь из EJBWebClient я смотрю EJB внутри EJBProj, он выглядел и работает нормально. Внутри реализации компонента я вызываю DAO внутри EJBDataAccess, и он выдает ошибку NoClassDefFound для этого DAO.

Ex. PersonSerivceBean вызывает PersonDAO.getAllPeople (), который присутствует внутри EJBDataAccess. Вот где он выбрасывает NoClassDefFound.

Я ссылался на EJBDataAccess в пути сборки EJBProj, который, в свою очередь, ссылается на EJBWebClient.

Есть идеи, что здесь не так?

Ответы [ 2 ]

1 голос
/ 20 марта 2012

Я решил проблему, вручную включив имена банок в MANIFEST.MF

1 голос
/ 19 марта 2012

Я считаю, что это проблема с вашим EJB-контейнером.Я не уверен, что вы используете (JBoss, WebSphere, WebLogic и т. Д.), И я не являюсь экспертом ни по одному из них (мы давно прекратили использовать EJB), но всякий раз, когда вы получаете ошибку NoClassDefFound, это означает, чтоТекущий ClassLoader (тот, который загрузил .class идентификатор вашего кода «в») не может найти ссылочный класс.

Я знаю много-много лун назад, у JBoss была идея «Универсальный ClassLoader».По сути, все JAR / EAR / WAR были загружены в один большой пул.Проблема в том, что много раз код нуждался в разных версиях одного и того же JAR, и они не всегда были совместимы.Кроме того, технически существует угроза безопасности, если кто-то добавит «собственный» класс / JAR в ваш микс впереди вашего.Я думаю, что именно в JBoss 3.5 они отказались от Universal ClassLoader, так как я помню, что нашему приложению нужно было МНОГО работы, чтобы исправить ситуацию.Большая часть этого была для нас проблемой упаковки.

...