После удаления моего кода, который зависит от «org.apache.servicemix.bundles.drools/5.5.0.Final_1» и затем установить узелок снова, течет слюна зависимый код, который работал ранее в настоящее время выбрасывания IllegalStateException «Bundle деинсталлируется» сообщение, но только на конкретный код Drools, например, когда я пытаюсь создать новую сессию:OSGi: java.lang.IllegalStateException: Пакет удаляется (org.apache.servicemix.bundles.drools)
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
Если я удалите org.apache.servicemix.bundles.drools, а затем повторно установите проблему, но я не думаю, что это правильное решение. Существуют другие пучки, зависящие от слюни, и это может нарушить их функциональность.
Вот полный трассировки стека:
java.lang.IllegalStateException: Bundle is uninstalled
at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1832)
at org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:937)
at org.springframework.osgi.util.BundleDelegatingClassLoader.findClass(BundleDelegatingClassLoader.java:99)
at org.springframework.osgi.util.BundleDelegatingClassLoader.loadClass(BundleDelegatingClassLoader.java:156)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.drools.util.CompositeClassLoader$DefaultLoader.load(CompositeClassLoader.java:204)
at org.drools.util.CompositeClassLoader$DefaultLoader.load(CompositeClassLoader.java:187)
at org.drools.util.CompositeClassLoader.loadClass(CompositeClassLoader.java:88)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.drools.SessionConfiguration.newTimerService(SessionConfiguration.java:441)
at org.drools.time.TimerServiceFactory.getTimerService(TimerServiceFactory.java:27)
at org.drools.common.AbstractWorkingMemory.<init>(AbstractWorkingMemory.java:315)
at org.drools.common.AbstractWorkingMemory.<init>(AbstractWorkingMemory.java:246)
at org.drools.common.AbstractWorkingMemory.<init>(AbstractWorkingMemory.java:212)
at org.drools.reteoo.ReteooWorkingMemory.<init>(ReteooWorkingMemory.java:103)
at org.drools.reteoo.ReteooStatefulSession.<init>(ReteooStatefulSession.java:81)
at org.drools.reteoo.ReteooRuleBase.newStatefulSession(ReteooRuleBase.java:402)
at org.drools.reteoo.ReteooRuleBase.newStatefulSession(ReteooRuleBase.java:387)
at org.drools.impl.KnowledgeBaseImpl.newStatefulKnowledgeSession(KnowledgeBaseImpl.java:175)
at org.drools.impl.KnowledgeBaseImpl.newStatefulKnowledgeSession(KnowledgeBaseImpl.java:162)
at com.example.drools.ReportingRules.run(ReportingRules.java:78)
at com.example.uimetadata.viewknowledge.builder.ReportViewKnowledgeBuilder.build(ReportViewKnowledgeBuilder.java:38)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:390)
at org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:277)
at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:250)
at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:161)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:73)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:91)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
at org.apache.camel.fabric.FabricTraceProcessor.process(FabricTraceProcessor.java:81)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:334)
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:220)
at org.apache.camel.processor.interceptor.StreamCachingInterceptor.process(StreamCachingInterceptor.java:52)
at org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:46)
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
at org.apache.camel.processor.interceptor.DefaultChannel.process(DefaultChannel.java:308)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:117)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
at org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:46)
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
at org.apache.camel.processor.UnitOfWorkProcessor.processAsync(UnitOfWorkProcessor.java:150)
at org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:117)
at org.apache.camel.processor.RouteInflightRepositoryProcessor.processNext(RouteInflightRepositoryProcessor.java:48)
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:73)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
at org.apache.camel.component.seda.SedaConsumer.sendToConsumers(SedaConsumer.java:275)
at org.apache.camel.component.seda.SedaConsumer.doRun(SedaConsumer.java:183)
at org.apache.camel.component.seda.SedaConsumer.run(SedaConsumer.java:139)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Вот мой Drools код:
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.*;
import org.drools.io.ResourceFactory;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.rule.FactHandle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public final class ReportingRules {
private static Logger logger = LoggerFactory.getLogger(ReportingRules.class);
private KnowledgeBase kbase;
private ReportingRules() {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("com/example/drools/reports/reportRender.drl"), ResourceType.DRL);
KnowledgeBuilderErrors errors = kbuilder.getErrors();
if (errors.size() > 0) {
for (KnowledgeBuilderError error: errors) {
logger.error(error.getMessage());
}
throw new ReportRulesException("ReportRules: " + error.getMessage());
}
kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
}
public void run(ReportViewKnowledge reportViewKnowledge) {
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
FactHandle factHandle = ksession.insert(reportViewKnowledge);
ksession.fireAllRules();
}
Спасибо, Арье, ты определенно ведешь меня в правильном направлении. Что мне нужно было сделать после удаления, мы должны были вызвать osgi: обновить «Apache ServiceMix :: Bundles :: drools». –