2017-07-05 9 views
0

私はoptaplanner 6.5.0をosgi環境で動作させようとしています。 は、私はすべての依存関係が解決を取得するには、以下のバンドルをインストールする必要がありました:osgiのOptaplanner

OptaPlanner coreorg.optaplanner.core               6.5.0.201610181310 
XStream Corexstream                    1.4.9 
Apache Commons Mathorg.apache.commons.math3              3.4.1 
Drools :: Compilerorg.drools.compiler               6.5.0.201610181300 
Drools :: Coreorg.drools.core                 6.5.0.201610181300 
KIE :: Public APIorg.kie.api                 6.5.0.201610181259 
KIE :: Internalorg.kie.internalapi                6.5.0.201610181259 
Protocol Buffer Java APIcom.google.protobuf              2.6.0 
mvel2org.mvel2                     2.2.8.Final 
Apache ServiceMix :: Bundles :: javax.injectorg.apache.servicemix.bundles.javax-inject   1.0.0.2 
XML Pull Parsing APIorg.xmlpull.v1                1.1.4.redhat-1 
Apache ServiceMix :: Bundles :: xpp3org.apache.servicemix.bundles.xpp3       1.1.4.c 
Apache ServiceMix :: Specs :: Activation API 1.4org.apache.servicemix.specs.activation-api-1.1 2.0.0 
Apache ServiceMix :: Bundles :: jaxb-xjcorg.apache.servicemix.bundles.jaxb-xjc     2.2.4.1 
Apache ServiceMix :: Specs :: JAXB API 2.2org.apache.servicemix.specs.jaxb-api-2.2    2.9.0 
Apache ServiceMix :: Specs :: Stax API 1.0org.apache.servicemix.specs.stax-api-1.0    2.9.0 
Apache ServiceMix :: Bundles :: jaxb-implorg.apache.servicemix.bundles.jaxb-impl    2.2.11.1 
Apache ServiceMix :: Bundles :: reflectionsorg.apache.servicemix.bundles.reflections   0.9.11.1 
OptaPlanner persistence commonorg.optaplanner.persistence.common        6.5.0.201610181310 
Sling Metrics :: CQ Fragmentcom.github.digital-wonderland.sling-metrics.cq-metrics-fragment  0.1.0 
Guava: Google Core Libraries for Javacom.google.guava           18.0.0 

JUnitテストを通じて働いてしまった簡単な例を、テストするとき、私はエラーを以下の取得:

私が気づい何
java.lang.NoClassDefFoundError: com/google/common/base/Predicate 
    at org.optaplanner.core.config.domain.ScanAnnotatedClassesConfig.buildSolutionDescriptor(ScanAnnotatedClassesConfig.java:69) 
    at org.optaplanner.core.config.solver.SolverConfig.buildSolutionDescriptor(SolverConfig.java:278) 
    at org.optaplanner.core.config.solver.SolverConfig.buildSolver(SolverConfig.java:229) 
    at org.optaplanner.core.impl.solver.AbstractSolverFactory.buildSolver(AbstractSolverFactory.java:52) 
    at com.bekaert.handling.allocation.optimizer.impl.OptimizerTest.before(OptimizerTest.java:55) 
    at com.bekaert.handling.allocation.optimizer.impl.TestAllocationOptimizerImpl.activate(TestAllocationOptimizerImpl.java:14) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.8.0_25] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)[:1.8.0_25] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)[:1.8.0_25] 
    at java.lang.reflect.Method.invoke(Unknown Source)[:1.8.0_25] 
    at org.apache.felix.scr.impl.helper.BaseMethod.invokeMethod(BaseMethod.java:231)[4:org.apache.felix.scr:1.8.2] 
    at org.apache.felix.scr.impl.helper.BaseMethod.access$500(BaseMethod.java:39)[4:org.apache.felix.scr:1.8.2] 
    at org.apache.felix.scr.impl.helper.BaseMethod$Resolved.invoke(BaseMethod.java:624) 
    at org.apache.felix.scr.impl.helper.BaseMethod.invoke(BaseMethod.java:508)[4:org.apache.felix.scr:1.8.2] 
    at org.apache.felix.scr.impl.helper.ActivateMethod.invoke(ActivateMethod.java:149)[4:org.apache.felix.scr:1.8.2] 
    at org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:315)[4:org.apache.felix.scr:1.8.2] 
    at org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:127)[4:org.apache.felix.scr:1.8.2] 
    at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:871)[4:org.apache.felix.scr:1.8.2] 
    at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:838)[4:org.apache.felix.scr:1.8.2] 
    at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:850)[4:org.apache.felix.scr:1.8.2] 
    at org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:419)[4:org.apache.felix.scr:1.8.2] 
    at org.apache.felix.scr.impl.config.ConfigurableComponentHolder.enableComponents(ConfigurableComponentHolder.java:376)[4:org.apache.felix.scr:1.8.2] 
    at org.apache.felix.scr.impl.BundleComponentActivator.initialize(BundleComponentActivator.java:172)[4:org.apache.felix.scr:1.8.2] 
    at org.apache.felix.scr.impl.BundleComponentActivator.<init>(BundleComponentActivator.java:120)[4:org.apache.felix.scr:1.8.2] 
    at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:258)[4:org.apache.felix.scr:1.8.2] 
    at org.apache.felix.scr.impl.Activator.access$000(Activator.java:45)[4:org.apache.felix.scr:1.8.2] 
    at org.apache.felix.scr.impl.Activator$ScrExtension.start(Activator.java:185)[4:org.apache.felix.scr:1.8.2] 
    at org.apache.felix.utils.extender.AbstractExtender.createExtension(AbstractExtender.java:259)[4:org.apache.felix.scr:1.8.2] 
    at org.apache.felix.utils.extender.AbstractExtender.modifiedBundle(AbstractExtender.java:232)[4:org.apache.felix.scr:1.8.2] 
    at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:479)[4:org.apache.felix.scr:1.8.2] 
    at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:414)[4:org.apache.felix.scr:1.8.2] 
    at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232)[4:org.apache.felix.scr:1.8.2] 
    at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:443)[4:org.apache.felix.scr:1.8.2] 
    at org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:869)[org.apache.felix.framework-4.4.1.jar:] 
    at org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:790)[org.apache.felix.framework-4.4.1.jar:] 
    at org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:515)[org.apache.felix.framework-4.4.1.jar:] 
    at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4429)[org.apache.felix.framework-4.4.1.jar:] 
    at org.apache.felix.framework.Felix.startBundle(Felix.java:2100)[org.apache.felix.framework-4.4.1.jar:] 
    at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:976)[org.apache.felix.framework-4.4.1.jar:] 
    at aQute.launcher.Launcher.update(Launcher.java:436)[biz.aQute.launcher-latest.jar:] 
    at aQute.launcher.Launcher$1.run(Launcher.java:194)[biz.aQute.launcher-latest.jar:] 
    at java.util.TimerThread.mainLoop(Unknown Source)[:1.8.0_25] 
    at java.util.TimerThread.run(Unknown Source)[:1.8.0_25] 
Caused by: java.lang.ClassNotFoundException: com.google.common.base.Predicate not found by org.apache.servicemix.bundles.reflections [205] 
    at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1556)[org.apache.felix.framework-4.4.1.jar:] 
    at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:77)[org.apache.felix.framework-4.4.1.jar:] 
    at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1993)[org.apache.felix.framework-4.4.1.jar:] 
    at java.lang.ClassLoader.loadClass(Unknown Source)[:1.8.0_25] 
    ... 43 more 

org.apache.servicemix.bundles.reflectionsバンドル内のimport-package com.google.common.baseはオプションです。 これはそのパッケージがなくても動作するはずですか? com.guavaバンドルはorg.optaplanner.coreバンドルに必要ですので、削除できません。

これを行うには他に何かできますか?他の誰でもosgi環境でoptaplannerを使用することができましたか?理論的には

敬具、 SIGI

+0

OSGiについてのoptaplannerのドキュメントの章の統合で説明されているosgi features.xmlを使用していますか? –

答えて

1

What I noticed is that in the org.apache.servicemix.bundles.reflections bundle the import-package com.google.common.base is optional. This means it should even be able to work without that package?

、これは本当です。しかし通常は、インポートされたパッケージのためresolution:=optionalを見たとき、それが何を意味するのか一つ以上である:ツールによって生成された

  • これと私は本当にそれがこのパッケージだけで
  • をやっていたかどうか確認しませんでしたいくつかのコードパスで使用されますが、実際にはオプションではありません。これらのコードパスのいずれかがダウンすると、実行時に爆発するだけです。
  • 私のバンドルを簡単に解決したいと思っていて、パッケージが実際に必要であることを理解できませんでした。

あなたが見ている問題からは、これはパッケージの一部のコードパスでのみ必要なケースだと思います。

What other things can I try to make this work? Anyone else already managed to get optaplanner working in an osgi environment?

スタックからあなたが壊れて機能を回避することにより、問題を回避設定することができるかもしれので、これは設定時に失敗しているかのように見えるトレース。オプションのインポートを満たす実際にcom.google.common.baseを提供するバンドルをインストールすることもできます。

別の方法は、ライブラリを完全に再パッケージ化して、OSGiメタデータが正しいことを確認することです。この再パッケージ化されたバンドルに他のライブラリ(またはライブラリの一部)を埋め込んで、インポートされたパッケージのセットを制限したり、リフレクションクラスの読み込みで問題が発生する場所を回避したりすることもできます。

+0

optaplannerのOSGi設定は、https://github.com/kiegroup/optaplanner/blob/master/optaplanner-core/pomで定義されています。xml#L95 –

0

私は私たちのために働いています。私はすべてのバイナリを1つのバンドルにラップし、いくつかのインポートをオプションにしました。

私たちはBndToolsを使用します。 .bndファイルは次のようになります。

Bundle-Version: 6.5.0.${tstamp} 
Service-Component: \ 
    * 
Export-Package: \ 
    org.optaplanner.core.api.*,\ 
    org.optaplanner.core.impl.*,\ 
    org.optaplanner.core.config.*; 
Include-Resource: \ 
    @binaries/annotations-2.0.1.jar,\ 
    @binaries/antlr-runtime-3.5.jar,\ 
    @binaries/commons-codec-1.4.jar,\ 
    @binaries/commons-io-2.1.jar,\ 
    @binaries/commons-lang3-3.1.jar,\ 
    @binaries/commons-math3-3.4.1.jar,\ 
    @binaries/drools-compiler-6.5.0.Final.jar,\ 
    @binaries/drools-core-6.5.0.Final.jar,\ 
    @binaries/ecj-4.4.2.jar,\ 
    @binaries/freemarker-2.3.19.jar,\ 
    @binaries/guava-13.0.1.jar,\ 
    @binaries/javassist-3.18.1-GA.jar,\ 
    @binaries/jcommon-1.0.23.jar,\ 
    @binaries/jfreechart-1.0.19.jar,\ 
    @binaries/kie-api-6.5.0.Final.jar,\ 
    @binaries/kie-internal-6.5.0.Final.jar,\ 
    @binaries/mvel2-2.2.8.Final.jar,\ 
    @binaries/optaplanner-benchmark-6.5.0.Final.jar,\ 
    @binaries/optaplanner-core-6.5.0.Final.jar,\ 
    @binaries/optaplanner-persistence-common-6.5.0.Final.jar,\ 
    @binaries/optaplanner-persistence-xstream-6.5.0.Final.jar,\ 
    @binaries/protobuf-java-2.6.0.jar,\ 
    @binaries/reflections-0.9.10.jar,\ 
    @binaries/slf4j-api-1.7.2.jar,\ 
    @binaries/xmlpull-1.1.3.1.jar,\ 
    @binaries/xpp3_min-1.1.4c.jar,\ 
    @binaries/xstream-1.4.9.jar 

Import-Package: \ 
    com.bea.xml.stream;resolution:=optional,\ 
    com.google.gson;resolution:=optional,\ 
    com.sun.codemodel;resolution:=optional,\ 
    com.sun.jdi;resolution:=optional,\ 
    com.sun.jdi.connect;resolution:=optional,\ 
    com.sun.jdi.event;resolution:=optional,\ 
    com.sun.jdi.request;resolution:=optional,\ 
    com.sun.org.apache.xml.internal.utils;resolution:=optional,\ 
    com.sun.org.apache.xpath.internal;resolution:=optional,\ 
    com.sun.org.apache.xpath.internal.objects;resolution:=optional,\ 
    com.sun.tools.xjc;resolution:=optional,\ 
    com.sun.tools.xjc.model;resolution:=optional,\ 
    com.sun.tools.xjc.outline;resolution:=optional,\ 
    javax.el;resolution:=optional,\ 
    javax.enterprise.context;resolution:=optional,\ 
    javax.enterprise.context.spi;resolution:=optional,\ 
    javax.enterprise.event;resolution:=optional,\ 
    javax.enterprise.inject;resolution:=optional,\ 
    javax.enterprise.inject.spi;resolution:=optional,\ 
    javax.inject;resolution:=optional,\ 
    javax.enterprise.util;resolution:=optional,\ 
    javax.servlet.jsp;resolution:=optional,\ 
    javax.servlet.jsp.el;resolution:=optional,\ 
    javax.servlet.jsp.tagext;resolution:=optional,\ 
    net.sf.cglib.proxy;resolution:=optional,\ 
    nu.xom;resolution:=optional,\ 
    org.antlr.stringtemplate;resolution:=optional,\ 
    org.apache.commons.vfs2;resolution:=optional,\ 
    org.apache.log;resolution:=optional,\ 
    org.apache.tools.ant;resolution:=optional,\ 
    org.apache.tools.ant.taskdefs;resolution:=optional,\ 
    org.apache.tools.ant.taskdefs.compilers;resolution:=optional,\ 
    org.apache.tools.ant.types;resolution:=optional,\ 
    org.apache.tools.ant.util;resolution:=optional,\ 
    org.apache.xml.utils;resolution:=optional,\ 
    org.apache.xpath;resolution:=optional,\ 
    org.apache.xpath.objects;resolution:=optional,\ 
    org.codehaus.janino;resolution:=optional,\ 
    org.codehaus.janino.util;resolution:=optional,\ 
    org.codehaus.janino.util.enumerator;resolution:=optional,\ 
    org.codehaus.janino.util.resource;resolution:=optional,\ 
    org.codehaus.jettison;resolution:=optional,\ 
    org.codehaus.jettison.mapped;resolution:=optional,\ 
    org.dom4j;resolution:=optional,\ 
    org.dom4j.io;resolution:=optional,\ 
    org.dom4j.tree;resolution:=optional,\ 
    org.eclipse.jdt.core.index;resolution:=optional,\ 
    org.eclipse.jdt.core.util;resolution:=optional,\ 
    org.jaxen;resolution:=optional,\ 
    org.jaxen.dom;resolution:=optional,\ 
    org.jaxen.dom4j;resolution:=optional,\ 
    org.jaxen.jdom;resolution:=optional,\ 
    org.jdom;resolution:=optional,\ 
    org.jdom.input;resolution:=optional,\ 
    org.jdom.output;resolution:=optional,\ 
    org.jdom2;resolution:=optional,\ 
    org.jdom2.input;resolution:=optional,\ 
    org.joda.time;resolution:=optional,\ 
    org.joda.time.format;resolution:=optional,\ 
    org.kxml2.io;resolution:=optional,\ 
    org.mozilla.javascript;resolution:=optional,\ 
    org.python.core;resolution:=optional,\ 
    org.python.util;resolution:=optional,\ 
    org.slf4j.impl;resolution:=optional,\ 
    org.w3c.dom.traversal;resolution:=optional,\ 
    org.zeroturnaround.javarebel;resolution:=optional,\ 
    sun.misc;resolution:=optional,\ 
    * 

おそらく、これを行う最良の方法ではありません。しかし、私たちはosgi環境でこのバンドルを使用することができ、車両ルーティングの問題は期待通りに解決されています。

+0

これは適切なアプローチですが、その数のオプションのインポートを通常はお勧めできません。あなたは、 '-conditionalpackage'命令を見て、必要なものだけをパッケージ化し、必要のないImportsを除外するべきです。そうすれば、より一貫して行動するものが得られます。 –

関連する問題