Я работаю с плагинами OSGi, и у меня возникают проблемы с десериализацией.Проблема десериализации в OSGi
Скажем, есть два плагина A и B. Плагин A является общим и будет использоваться во многих приложениях, в то время как плагин B относится только к одному приложению. Плагин A в основном является основой для всех приложений. Плагин B использует API плагина A для сохранения информации о состоянии. Таким образом, плагин B зависит от A, но A не зависит от B.
Чтобы сделать его простым, предположим, что я храню информацию в HashMap плагина A. Класс X, который реализует Serializable, присутствует внутри плагина B. Плагин A сериализует его и сохраняет. Во время процесса десериализации плагин А не может найти класс X, и он терпит неудачу. Я не могу добавить класс X в плагин A, поскольку плагин A является общим и не имеет смысла в A.
Класс X доступен во время работы. Каков правильный и чистый способ решения этой проблемы?
Заранее спасибо.
Это нетривиальная, чтобы получить API, который не ClassLoader известно для расслоения B, но я думаю, что это может быть возможным благодаря реализации кэша в качестве службы завода а затем создание нового экземпляра службы для каждого пакета * X *, запрашивающего кеш. Завод-изготовитель получает ссылку на каждый Bundle, запрашивающий услугу, поэтому вы можете обернуть «loadClass» Bundle в свой собственный ClassLoader impl, который затем перейдет к EHCache. – JBert