Караф версия 4.2.4.
Когда я развертываю пакеты в первый раз - все работает, как ожидалось, но если я удаляю пакеты (из каталога развертывания) и выполняю их развертывание снова (копировать в каталог развертывания), Я получу сообщение об ошибке "java .lang.ClassCastException: test.Test не может быть приведено к test.Test" во время выполнения и сбой контейнера проекта. Я предлагаю эту ошибку, вызванную использованием разных загрузчиков классов, но я не могу понять, как этого избежать? Может быть, мне нужно использовать специальные команды karaf для отмены / развертывания?
Основной вопрос - как повторно развернуть пакеты без остановки сервера?
Описание. У меня есть 3 комплекта:
- источник данных - используется для создания экземпляра DataSource и помещается в контейнер чертежей. Нет java кода - чертежа. xml только конфигурация
...
<service interface="javax.sql.DataSource" ref="dataSource" />
...
домен - внедряет источник данных и создает сервис, который использует mybatis mapper. POJO также описан здесь.
план. xml:
<reference id="datasource" interface="javax.sql.DataSource"/>
<bean id="managerimpl" class="test.TestManagerImpl">
<argument ref="datasource"/>
</bean>
<service id="testmanager" interface="test.TestManager" ref="managerimpl"/>
Класс обслуживания:
public class TestManagerImpl implements TestManager {
private final Mapper mapper;
private final DataSource dataSource;
public TestManagerImpl(DataSource dataSource) {
this.dataSource = dataSource;
this.mapper = MybatisSqlSessionGetter.getSqlSessionMapperInstance(dataSource, Mapper.class);
}
@Override
public Test getTestById(String id) {
return mapper.getById(id);
}
...
}
POJO:
public class Test {
private String id;
private String name;
...
}
зависимый - внедряет сервис из комплекта домена и использует его для получения POJO.
blueprint. xml:
<reference id="testmanager" interface="test.TestManager"/>
<bean id="dependentService" class="test.DependentService">
<argument ref="testmanager"/>
</bean>
...
Сервис:
public class DependentService {
private final TestManager manager;
public DependentService(TestManager manager) {
this.manager = manager;
Test testById = manager.getTestById("uuid"); // ClassCastException
}
}