J'essaye de configurer le framework Akka dans Apache Felix. Je l'ai utilisé étapes ci-dessous:Impossible de configurer le framework Akka dans Apache Felix
J'ai inclus ci-dessous les fichiers jar de paquet dans mon paquet de projets
- -akka actor_2.11-2.4.11_1.0.0.jar
- -akka cluster- tools_2.11-2.4.11_1.0.0.jar
- -akka stream_2.11-2.4.11_1.0.0.jar
- config-1.3.0.jar
- scala-bibliothèque-2.11.8.jar
est en dessous du code source, je me sers dans mon Activator pour créer le ActorSystem:
public class Activator extends DependencyActivatorBase { private static Logger logger = Logger.getLogger("COMMON"); private static final String propertyPath = "config/"; private ActorSystem actorSystem; public synchronized void init(BundleContext context, DependencyManager dependencyManager) throws Exception { InputStream is = new FileInputStream(new File(propertyPath+"sourcemodel.log4j.properties")); PropertyConfigurator.configure(is); logger.info("Bundle Activator Start"); actorSystem = ActorSystem.create("myname"); Properties filterProps = new Properties(); filterProps.put("pattern","/sourcemodel/.*"); dependencyManager.add(createComponent() .setInterface(Filter.class.getName(), filterProps) .setImplementation(LoggingFilter.class)); ... } }
à
actorSystem = ActorSystem.create("myname");
Je reçois ci-dessous Exception:Caused by: java.lang.NoClassDefFoundError: scala/collection/Iterable
// Modifier
public class Activator extends DependencyActivatorBase {
private static Logger logger = Logger.getLogger("COMMON");
private static final String propertyPath = "config/";
private ActorSystem actorSystem;
@Override
public synchronized void init(BundleContext context,
DependencyManager dependencyManager) throws Exception {
InputStream is = new FileInputStream(new File(propertyPath+"sourcemodel.log4j.properties"));
PropertyConfigurator.configure(is);
logger.info("Bundle Activator Start");
try {
Config myConfig = ConfigFactory.parseFile(new File(propertyPath + "reference.config"));
Config regularConfig = ConfigFactory.load();
Config combined = myConfig.withFallback(regularConfig);
Config complete = ConfigFactory.load(combined);
actorSystem = ActorSystem.create("myname",complete);
}
catch(Exception e) {
e.printStackTrace();
}
Properties filterProps = new Properties();
filterProps.put("pattern","/sourcemodel/.*");
dependencyManager.add(createComponent()
.setInterface(Filter.class.getName(), filterProps)
.setImplementation(LoggingFilter.class));
Après avoir modifié le code que je reçois ci-dessous exception:
java.lang.ClassNotFoundException: akka.event.DefaultLoggingFilter
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at akka.actor.ReflectiveDynamicAccess$$anonfun$getClassFor$1.apply(ReflectiveDynamicAccess.scala:21)
at akka.actor.ReflectiveDynamicAccess$$anonfun$getClassFor$1.apply(ReflectiveDynamicAccess.scala:20)
at scala.util.Try$.apply(Try.scala:192)
at akka.actor.ReflectiveDynamicAccess.getClassFor(ReflectiveDynamicAccess.scala:20)
at akka.actor.ReflectiveDynamicAccess.createInstanceFor(ReflectiveDynamicAccess.scala:38)
at akka.actor.ActorSystemImpl.<init>(ActorSystem.scala:605)
at akka.actor.ActorSystem$.apply(ActorSystem.scala:142)
at akka.actor.ActorSystem$.apply(ActorSystem.scala:119)
at akka.actor.ActorSystem$.create(ActorSystem.scala:67)
at akka.actor.ActorSystem.create(ActorSystem.scala)
at com.bitwise.tdm.sourcemodel.internal.Activator.init(Activator.java:79)
at org.apache.felix.dm.DependencyActivatorBase.start(DependencyActivatorBase.java:75)
at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:697)
at org.apache.felix.framework.Felix.activateBundle(Felix.java:2220)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2138)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:977)
at aQute.launcher.Launcher.update(Launcher.java:457)
at aQute.launcher.Launcher.activate(Launcher.java:354)
at aQute.launcher.Launcher.run(Launcher.java:238)
at aQute.launcher.Launcher.main(Launcher.java:87)
Pouvez-vous essayer d'installer les paquets dont vous dépendez en faisceaux au lieu de les intégrer? –
Oui, j'ai utilisé les jarres bundles du framework Akka dont je dépends. Après l'exécution de l'application, je suis également en mesure de voir les paquets sont en état actif sur gogo shell. 62 | Actif | 1 | akka-actor_2.11-2.4.11_1.0.0 (1.0.0) 63 | Actif | 1 | akka-cluster-tools_2.11-2.4.11 (1.0.0) 64 | Actif | 1 | akka-stream_2.11-2.4.11 (1.0.0) 65 | Active | 1 | com.typesafe.config (1.3.0) 66 | Actif | 1 | org.scala-lang.scala-library –
afaik Akka utilise beaucoup Reflection et Classloader Magic, donc je crains que certaines de ses parties ne fonctionnent pas bien avec un environnement OSGi et ses isolations de classloader. –