2015-12-03 2 views
1

У меня развернутое ухо, которое я развертываю на сервере приложений JBoss. Я занимаюсь рефакторингом своего кода, чтобы мои классы сущностей были объявлены в отдельной библиотеке jar, которые могут совместно использоваться различными модулями в ухе.На сервере приложений JBoss, как я могу убедиться, что все модули в развертывании используют один и тот же загрузчик классов для библиотеки jar?

Однако, сейчас я получаю следующее сообщение об ошибке:

java.lang.ClassCastException: model.project.Project cannot be cast to model.EntityBase 

EntityBase является публичным абстрактным классом. Project - открытый класс, который распространяется на EntityBase. Оба класса были перенесены в мою новую библиотеку jar. Эта ошибка приводит меня к выводу, что есть проблема с загрузчиком классов.

Мое ухо структурирована следующим образом:

myapp.ear 
| 
|--- webportal.war 
|--- restapi.war 
|--- dal.jar 

Мои объекты были определены в dal.jar, который используется в военных библиотек, доступ к своей базе данных. Теперь я удалил объекты из dal.jar и поместил их в отдельную model.jar. Я перечислил model.jar как зависимость в pom.xml для myapp.ear. Он также указан как зависимость в файлах pom.xml для webportal.war, restapi.war и dal.jar. В результате model.jar теперь развернут в каталоге lib в myapp.ear.

Правильно ли я понимаю причину исключения ClassCastException? Если да, как мне упаковать приложение, чтобы все классы в model.jar были загружены одним и тем же загрузчиком классов?

ответ

1

Оказалось, что это относительно простое решение. Я модифицировал файлы pom.xml для webportal.war, restapi.war и dal.jar, добавив scope тег со значением provided для модели зависимости:

<dependency> 
    <groupId>myproject</groupId> 
    <artifactiId>model</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <scope>provided</scope> 
</dependency> 

Затем я изменил pom.xml для myapp.ear, добавив зависимость к model.jar без тега области (это даст зависимость по умолчанию, которая, по моему мнению, равна compile):

<dependency> 
    <groupId>myproject</groupId> 
    <artifactiId>model</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
</dependency>