Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > glassfish v3 ошибка при деплое, не находит класс


Автор: NikitOS9 4.6.2010, 12:55
такая ситуация;
сервак glassfish3, есть два модуля

Код

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd"
             version="6">
  <application-name>turkeyForSale</application-name>
  <module id="domainModel-EJB">
    <ejb>domainModel.jar</ejb>
  </module>
  <module id="webClients-War">
    <web>
      <web-uri>webClients.war</web-uri>
      <context-root>/</context-root>
    </web>
  </module>
</application>


в модуле domainModel.jar находятся ejb, в которых используются некоторые классы из webClients.war, например если точнее, то из webClients.war\WEB-INF\classes\flexModel\FlexHouse.class

при деплое ошибка что в модуле domainModel.jar
...
java.lang.RuntimeException: EJB Container initialization error
...
Caused by: java.lang.NoClassDefFoundError: flexModel/FlexHouse

на glassfish v2 все находилось и работало, как тут и куда прописать пути к модулям ?

спасибо

Автор: powerOn 4.6.2010, 13:47
Мне кажется что доменная модель не должна ничего знать о своих клиентах, т.е. о классах из более высших слоев. Зависимость между модулями должна быть Web -> Domain, а не Web <-> Domain. Скорее всего у вас архитектурная ошибка.  

Автор: NikitOS9 4.6.2010, 13:55
это ошибка работала на glassfish v2, и если не ошибаюсь начиная с ejb3.1, например в eclipselink, ejb можно упаковывать в war модули и это считается нормальным

Автор: powerOn 4.6.2010, 14:19
Цитата(NikitOS9 @  4.6.2010,  14:55 Найти цитируемый пост)
например в eclipselink, ejb можно упаковывать в war модули и это считается нормальным 

можно то можно, вопрос в логической связи слоев, а она у вас двунаправленная, а желательно делать однонаправленную, тем самым снижая coupling и повышая reusability. 

Автор: NikitOS9 4.6.2010, 14:28
так данное приложение требует, в WEB-INF\classes\flexModel\ лежат классы для серилизации и обратно, java <-> as3 объектов.
в ejb тоже нужно иметь доступ к этим классам для преобразования в доменные классы и тд..

оффтоп конечно, вообще связи могут быть какие угодно, кто сказал что только однонаправленные..  
да и вопрос как в glassfish v3 обойти данную непонятную проблему

Автор: powerOn 4.6.2010, 15:35
можно попробовать следующим образом: 
переместить классы flexModel\** в архив  domainModel.jar 
или
вынести зависимости в отдельную либу, потом настроить их подгрузку через (<library-directory> настройка в application.xml)
или
попробовать загружать модули в определенном порядке (<initialize-in-order> настройка в application.xml)

Цитата(NikitOS9 @  4.6.2010,  15:28 Найти цитируемый пост)
вообще связи могут быть какие угодно, кто сказал что только однонаправленные..  

принципы объектно-ориентированного дизайна говорят: http://c2.com/cgi/wiki?CouplingAndCohesion.

Автор: NikitOS9 4.6.2010, 16:32
эт похоже изменения в v3
вот тут такая же история

http://forums.java.net/jive/thread.jspa?threadID=68567
http://forums.java.net/jive/message.jspa?messageID=375093

решение перепаковывать по другому ear, или asadmin deploy --property compatibility=v2 foo.ear

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)