-
15. Re: Jboss Fuse - Fab resolver failing (at bundle install)
gertv Aug 1, 2013 12:14 PM (in response to lalit.manchanda)Hi Lalit,
Yeah, I think the bug still makes sense and I would even suggest we take it one step further: if a package is provided by the system bundle, FAB should default to ignoring that package for the purpose of resolving dependencies. Things like JTA or JAXP are very often part of the transitive dependency tree, but hardly ever need to be included in a FAB. We obviously need to make this configurable so people can override things if necessary, but most of the time, a user will not want/need to override packages like javax.transaction or the XML stuff.
Wdyt?
Gert
-
16. Re: Jboss Fuse - Fab resolver failing (at bundle install)
lalit.manchanda Aug 1, 2013 6:45 PM (in response to gertv)Hi Gert,
I agree, and if we don't want to do this silently as you suggested, we should indicate in logs clearly and let end user take the decision.
Meanwhile I am hit with an earlier problem again in this FAB, due to which I had to include all the packages in import list. Its like the following:
org/w3c/dom/Node is not part of osgi:headers, though exists as part of system bundles, seems like a transitive dependency and when I start the bundle with a route which executes a part of the code, it fails giving following dump,
03:47:02,659 | ERROR | a-0.1.0-thread-1 | BlueprintContainerImpl | 14 - org.apache.aries.blueprint.core - 1.0.1.redhat-60024 | Unable to start blueprint container for bundle manchanda.lalit.TestJpa
org.osgi.service.blueprint.container.ComponentDefinitionException: Unable to instantiate components
at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:671)[14:org.apache.aries.blueprint.core:1.0.1.redhat-60024]
at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:370)[14:org.apache.aries.blueprint.core:1.0.1.redhat-60024]
at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:261)[14:org.apache.aries.blueprint.core:1.0.1.redhat-60024]
at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:270)[14:org.apache.aries.blueprint.core:1.0.1.redhat-60024]
at org.apache.aries.blueprint.container.BlueprintExtender.modifiedBundle(BlueprintExtender.java:233)[14:org.apache.aries.blueprint.core:1.0.1.redhat-60024]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:500)[13:org.apache.aries.util:1.0.1.redhat-60024]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:433)[13:org.apache.aries.util:1.0.1.redhat-60024]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$AbstractTracked.track(BundleHookBundleTracker.java:725)[13:org.apache.aries.util:1.0.1.redhat-60024]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.bundleChanged(BundleHookBundleTracker.java:463)[13:org.apache.aries.util:1.0.1.redhat-60024]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$BundleEventHook.event(BundleHookBundleTracker.java:422)[13:org.apache.aries.util:1.0.1.redhat-60024]
at org.apache.felix.framework.util.SecureAction.invokeBundleEventHook(SecureAction.java:1103)[org.apache.felix.framework-4.0.3.redhat-60024.jar:]
at org.apache.felix.framework.util.EventDispatcher.createWhitelistFromHooks(EventDispatcher.java:696)[org.apache.felix.framework-4.0.3.redhat-60024.jar:]
at org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:484)[org.apache.felix.framework-4.0.3.redhat-60024.jar:]
at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4580)[org.apache.felix.framework-4.0.3.redhat-60024.jar:]
at org.apache.felix.framework.Felix$4.run(Felix.java:2115)[org.apache.felix.framework-4.0.3.redhat-60024.jar:]
at org.apache.felix.framework.Felix$5.run(Felix.java:2159)[org.apache.felix.framework-4.0.3.redhat-60024.jar:]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)[:1.6.0_43]
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)[:1.6.0_43]
at java.util.concurrent.FutureTask.run(FutureTask.java:138)[:1.6.0_43]
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)[:1.6.0_43]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)[:1.6.0_43]
at java.lang.Thread.run(Thread.java:662)[:1.6.0_43]
Caused by: java.lang.NoClassDefFoundError: org/w3c/dom/Node
at java.lang.Class.getDeclaredConstructors0(Native Method)[:1.6.0_43]
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2398)[:1.6.0_43]
at java.lang.Class.getConstructors(Class.java:1461)[:1.6.0_43]
at org.apache.aries.blueprint.container.BeanRecipe.findMatchingConstructors(BeanRecipe.java:509)
at org.apache.aries.blueprint.container.BeanRecipe.getInstance(BeanRecipe.java:327)
at org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:806)
at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:787)
at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)[:1.6.0_43]
at java.util.concurrent.FutureTask.run(FutureTask.java:138)[:1.6.0_43]
at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88)[14:org.apache.aries.blueprint.core:1.0.1.redhat-60024]
at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:245)[14:org.apache.aries.blueprint.core:1.0.1.redhat-60024]
at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:183)[14:org.apache.aries.blueprint.core:1.0.1.redhat-60024]
at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:667)[14:org.apache.aries.blueprint.core:1.0.1.redhat-60024]
... 21 more
Caused by: java.lang.ClassNotFoundException: org.w3c.dom.Node not found by manchanda.lalit.TestJpa [1092]
at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1532)
at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75)
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1955)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)[:1.6.0_43]
my pom.xml is same as earlier as below
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>manchanda.lalit</groupId>
<artifactId>TestJpa</artifactId>
<packaging>jar</packaging>
<version>0.1</version>
<name>A Camel Blueprint Route</name>
<url>http://www.myorganization.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<repositories>
<repository>
<id>release.fusesource.org</id>
<name>FuseSource Release Repository</name>
<url>http://repo.fusesource.com/nexus/content/repositories/releases</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
<repository>
<id>snapshot.fusesource.org</id>
<name>FuseSource Snapshot Repository</name>
<url>http://repo.fusesource.com/nexus/content/repositories/snapshots</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>false</enabled>
</releases>
</repository>
<repository>
<id>codelds</id>
<url>https://code.lds.org/nexus/content/groups/main-repo</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>release.fusesource.org</id>
<name>FuseSource Release Repository</name>
<url>http://repo.fusesource.com/nexus/content/repositories/releases</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</pluginRepository>
<pluginRepository>
<id>snapshot.fusesource.org</id>
<name>FuseSource Snapshot Repository</name>
<url>http://repo.fusesource.com/nexus/content/repositories/snapshots</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>false</enabled>
</releases>
</pluginRepository>
</pluginRepositories>
<dependencies>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
<version>2.10.0.redhat-60024</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-blueprint</artifactId>
<version>2.10.0.redhat-60024</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jpa</artifactId>
<version>2.10.0.redhat-60024</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
<scope>provided</scope>
</dependency>
<!-- OpenJPA -->
<dependency>
<groupId>org.apache.openjpa</groupId>
<artifactId>openjpa</artifactId>
<version>2.2.0</version>
</dependency>
<!-- Postgres Database -->
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901.jdbc4</version>
</dependency>
<!-- Oracle Database -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version>
</dependency>
<!-- MySql Database -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!-- Smooks -->
<dependency>
<groupId>org.milyn</groupId>
<artifactId>milyn-smooks-javabean</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.servicemix.bundles</groupId>
<artifactId>org.apache.servicemix.bundles.hsqldb</artifactId>
<version>[1.8.0.7_1,3.0.0]</version>
</dependency>
<dependency>
<groupId>org.milyn</groupId>
<artifactId>milyn-smooks-csv</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>org.milyn</groupId>
<artifactId>milyn-smooks-persistence</artifactId>
<version>1.5.1</version>
<exclusions>
<exclusion>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.milyn</groupId>
<artifactId>milyn-scribe-jpa</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.1.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<!--
<dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>1.3.04</version>
<scope>provided</scope>
</dependency>
-->
<!-- logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.6</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.6</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.6.6</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<scope>test</scope>
</dependency>
<!-- testing -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-test-blueprint</artifactId>
<version>2.10.0.redhat-60024</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<defaultGoal>install</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.3</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<index>true</index>
<Private-Package></Private-Package>
<Import-Package>
org.w3c.dom.Node;resolution:="optional"
</Import-Package>
<Export-Package></Export-Package>
<Meta-Persistence>META-INF/persistence.xml</Meta-Persistence>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>
Yo solve this If I include this class in the Import-Package as below
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<index>true</index>
<Private-Package></Private-Package>
<Import-Package>
org.w3c.dom.Node;resolution:="optional"
</Import-Package>
<Export-Package></Export-Package>
<Meta-Persistence>META-INF/persistence.xml</Meta-Persistence>
</manifestEntries>
</archive>
</configuration>
</plugin>
In osgi:headers, I just get the following, which does not make sense
Import-Package =
org.w3c.dom.Node;resolution:=optional
Export-Package =
manchanda.lalit.TestJpa,
OSGI-INF.blueprint,
OSGI-INF
Adding wildcard,
<Import-Package>
org.w3c.dom.Node;resolution:="optional",
*
</Import-Package>
Makes every dependency mandatory in osgi:headers and some transitive ones as unresolved as below:
Import-Package =
com.bea.xml.stream,
com.mchange.v2.c3p0,
com.sun.jdi,
com.sun.jdi.connect,
com.sun.jdi.event,
com.sun.jdi.request,
com.sun.org.apache.xml.internal.utils,
com.sun.org.apache.xpath.internal,
com.sun.org.apache.xpath.internal.objects,
com.sun.security.auth.module,
com.wutka.dtd,
javax.crypto,
javax.crypto.spec,
javax.el,
javax.management,
javax.naming,
javax.naming.directory,
javax.naming.spi,
javax.net,
javax.net.ssl,
javax.persistence;version="[1.0.2,2)",
javax.resource,
javax.resource.spi,
javax.resource.spi.endpoint,
javax.resource.spi.security,
javax.security.auth,
javax.security.auth.callback,
javax.security.auth.kerberos,
javax.security.auth.login,
javax.security.cert,
javax.servlet,
javax.servlet.http,
javax.servlet.jsp,
javax.servlet.jsp.el,
javax.servlet.jsp.tagext,
javax.sql,
javax.sql.rowset,
javax.sql.rowset.spi,
javax.swing,
javax.swing.border,
javax.swing.event,
javax.swing.plaf,
javax.swing.table,
javax.swing.tree,
javax.transaction;version="[1.1.0,2)",
javax.transaction.xa;version="[1.1.0,2)",
javax.xml.datatype,
javax.xml.namespace,
javax.xml.parsers,
javax.xml.stream;version="[1.0.0.2,2)",
javax.xml.transform,
javax.xml.transform.dom,
javax.xml.transform.sax,
javax.xml.transform.stax,
javax.xml.transform.stream,
javax.xml.validation,
javax.xml.xpath,
net.sf.cglib.proxy,
nu.xom,
oracle.i18n.text,
oracle.i18n.text.converter,
oracle.ons,
oracle.security.pki,
oracle.xdb,
oracle.xml.parser.v2,
org.apache.camel,
org.apache.camel.component.jpa,
org.apache.camel.spring.spi,
org.apache.commons.logging,
org.apache.log,
org.apache.log4j,
org.apache.tools.ant,
org.apache.tools.ant.taskdefs,
org.apache.xalan.extensions;version="[2.7.1,3)",
org.apache.xalan.templates;version="[2.7.1,3)",
org.apache.xml.utils;version="[2.7.1,3)",
org.apache.xpath;version="[2.7.1,3)",
org.apache.xpath.objects;version="[2.7.1,3)",
org.codehaus.jettison,
org.codehaus.jettison.mapped,
org.dom4j,
org.dom4j.io,
org.dom4j.tree,
org.ietf.jgss,
org.jboss.resource.adapter.jdbc,
org.jboss.resource.adapter.jdbc.vendor,
org.jdom,
org.jdom.input,
org.jdom.output,
org.joda.time,
org.joda.time.format,
org.kxml2.io,
org.mozilla.javascript,
org.objectweb.asm,
org.osgi.service.blueprint;version="[1.0.0,2.0.0)",
org.python.core,
org.python.util,
org.springframework.transaction.jta,
org.w3c.dom.Node;resolution:=optional,
org.w3c.dom.ls,
org.w3c.dom.traversal,
org.xml.sax,
org.xml.sax.ext,
org.xml.sax.helpers,
org.zeroturnaround.javarebel,
sun.misc,
sun.reflect,
sun.security.action,
sun.security.krb5,
sun.security.krb5.internal,
sun.security.util,
Kindly help, as this makes FAB practically unusable for me
Regds
Lalit
-
17. Re: Jboss Fuse - Fab resolver failing (at bundle install)
gertv Aug 2, 2013 10:05 AM (in response to lalit.manchanda)Hi Lalit,
You should also be able to use the optional directive with the wildcard, so something like this should fix the problem:
org.w3c.dom.Node;resolution:="optional",
*;resolution:="optional"
Regards,
Gert
-
18. Re: Jboss Fuse - Fab resolver failing (at bundle install)
lalit.manchanda Aug 2, 2013 3:43 PM (in response to gertv)Thanks, Gert, this solves the problem, I will mark other open question also as answered and give reference to this answer.