Доступ к Drools Guvnor из пакета OSGI

Я использую следующий код для доступа к Drools Guvnor:

KnowledgeAgentConfiguration kaconf = KnowledgeAgentFactory.newKnowledgeAgentConfiguration();
KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent("MyAgent", kaconf);
kagent.applyChangeSet(ResourceFactory.newClassPathResource("drools/change-set.xml"));
StatefulKnowledgeSession ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();

К сожалению, класс KnowledgeAgentFactory, похоже, не готов к OSGI, поскольку он использует Class.forName() для загрузки провайдера агента. KnowledgeAgentFactory находится в пакете Knowledge-API, а реализация провайдера — в пакете drools-core. Очевидно, что Knowledge-API не видит drools-core в контейнере OSGI. В результате я получаю следующее исключение:

Caused by: java.lang.RuntimeException: Provider org.drools.agent.impl.KnowledgeAgentProviderImpl could not be set.
    at org.drools.agent.KnowledgeAgentFactory.loadProvider(KnowledgeAgentFactory.java:191)[162:org.drools.api:5.5.0.Final]
    at org.drools.agent.KnowledgeAgentFactory.getKnowledgeAgentProvider(KnowledgeAgentFactory.java:178)[162:org.drools.api:5.5.0.Final]
    at org.drools.agent.KnowledgeAgentFactory.newKnowledgeAgentConfiguration(KnowledgeAgentFactory.java:129)[162:org.drools.api:5.5.0.Final]

Есть ли обходной путь для этой проблемы?


person hoaz    schedule 28.12.2012    source источник


Ответы (1)


Вы можете помочь себе с записью манифеста require-bundle, поскольку она не работает правильно с этим импортом, и я бы сказал, что в этот момент, вероятно, лучше всего заставить ее работать таким образом.

Require-Bundle, как определено в вики osgi

person Achim Nierbeck    schedule 29.12.2012
comment
Кажется, здесь помогают и Require-Bundle, и Import-Bundle. - person hoaz; 30.12.2012