Thanks a lot Tommy for the detailed suggestion. It helps in a lot for me to
understand few things. As I am new to OSGi world so little bit confuse now..
Let us talk about this example now by which if I am able to solve the
problem then I would be able to solve my other problems too.. Below is my
code in which I am able to start the OSGi framework and then I am trying to
install GoldenlseyeStorageService bundle. And as soon as I try to install
the bundle, I always get the exception as I told you in my previous email .
*Unresolved constraint in bundle GoldenlseyeStorageService [1]: Unable to
resolve 1.0: missing requirement [1.0] osgi.wiring.package;
(&(osgi.wiring.package=com.host.kernel.logger)(version>=1.19.0)(!(version>=2.0.0)))
*
*
*
Below is the code:-
*
*
public class TestOSGi {
public static void main(String[] args) {
try {
FileUtils.deleteDirectory(new File("felix-cache"));
FrameworkFactory frameworkFactory =
ServiceLoader.load(FrameworkFactory.class).iterator().next();
Framework framework = frameworkFactory.newFramework(new
HashMap<String, String>());
framework.start();
final BundleContext bundleContext = framework.getBundleContext();
final List<Bundle> installedBundles = new LinkedList<Bundle>();
BundleActivator b = new org.ops4j.pax.url.mvn.internal.Activator();
b.start(bundleContext);
String localFilename =
"file:C:\\Storage\\GoldenlseyeStorageService-1.0.0.jar";
installedBundles.add(bundleContext.installBundle(localFilename));
for (Bundle bundle : installedBundles) {
bundle.start(); // this line throws me an exception
}
} catch (IOException e) {
e.printStackTrace();
} catch (BundleException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Now as you mention that the error mean is - the package the bundle wants to
import is not being exported by *any other bundle (which bundle are we
talking about here?)*, and thus cannot be imported. So here what I am
supposed to do? What should I do here to fix the problem?
Bcoz, I am installing only one bundle here which is bringing other
dependencies and I am not sure what I should do here to fix this problem.
As I am supposed to use lot of our company specific dependencies in my
pom.xml file..
The bundle (*GoldenlseyeStorageService *) that I am trying to install
depends on this maven dependency in its pom.xml file
<dependency>
<groupId>com.host.soa</groupId>
<artifactId>soaMerged</artifactId>
<scope>compile</scope>
<exclusions>
<exclusion>
<artifactId>axis2</artifactId>
<groupId>org.apache</groupId>
</exclusion>
</exclusions>
</dependency>
And the above maven dependency is bringing in kernelMerged dependency in
which this package is there- *com.host.kernel.logger. *
*
*
And I am supposed to use this package in my code..
Now I believe the suggestions you gave me is-
1) I should install kernelMerged jar as a Bundle before installing *
GoldenlseyeStorageService* , to solve this problem? Right?
Below is my full pom.xml file for *GoldenlseyeStorageService *bundle which
is what I am trying to install..
<?xml version="1.0" encoding="UTF-8"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.host.personalize.goldeneye</groupId>
<artifactId>GoldeneyeStorageService</artifactId>
<version>1.0.0</version>
<packaging>bundle</packaging>
<name>GoldeneyeStorageService</name>
<properties>
<singlePom>true</singlePom>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.host.soa</groupId>
<artifactId>soaMerged</artifactId>
<scope>compile</scope>
<exclusions>
<exclusion>
<artifactId>axis2</artifactId>
<groupId>org.apache</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<testSourceDirectory>test</testSourceDirectory>
<outputDirectory>build/classes</outputDirectory>
<testOutputDirectory>build/classes</testOutputDirectory>
<resources>
<resource>
<directory>gen-meta-src</directory>
</resource>
<resource>
<directory>meta-src</directory>
</resource>
<resource>
<directory>src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
<resource>
<filtering>true</filtering>
<directory>src/main/filtered-resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>test</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</testResource>
</testResources>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>src</source>
<source>gen-src/client</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<manifestLocation>src/main/resources/META-INF</manifestLocation>
<instructions>
<Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
<Bundle-Name>${pom.artifactId}</Bundle-Name>
<Export-Package>{local-packages}</Export-Package>
<Import-Package>*</Import-Package>
<Include-Resource>{maven-resources},build/classes/buildinfo.properties</Include-Resource>
<X-Raptor-Pipeline-Handler></X-Raptor-Pipeline-Handler>
</instructions>
<executions>
<execution>
<id>default-bundle</id>
<phase>compile</phase>
<goals>
<goal>bundle</goal>
</goals>
</execution>
</executions>
</configuration>
</plugin>
</plugins>
</build>
</project>
If you can guide me step by step then it will be great for me to fix this
problem.. Thanks for your time and help.
*Raihan Jamal*
On Sun, Aug 25, 2013 at 8:36 AM, Tommy Svensson <[email protected]> wrote:
> Hello Jamal,
>
> Both your mails seems to be the same thing.
>
> The following import:
>
> Import-Package: com.host.kernel.logger;version="[1.19,2)",...
>
> means that this package is not available in the bundle being started and
> needs to be imported from another bundle exporting this package.
>
> The following error message:
>
> Unresolved constraint in bundle GoldenlseyeStorageService [1]:
> Unable
> to resolve 1.0: missing requirement [1.0] osgi.wiring.package;
>
> (&(osgi.wiring.package=com.host.kernel.logger)(version>=1.19.0)(!(version>=2.0.0)))
>
> says the the package the bundle wants to import is not being exported by
> any other bundle, and thus cannot be imported.
>
> There are 2 ways to solve this:
>
> 1) Another bundle exporting this package needs to be deployed.
>
> 2) A jar containing this package needs to be included/embeded within the
> bundle instead of being imported from other bundle.
>
> Also note that a mismatch in version number of imported package and
> exported package will not resolve!
>
> From the pom in your other mail I see you have several dependencies. Only
> one of them have a scope specified (compile), but if I remember correctly
> no scope specification is the same as "compile". I'm also unsure what the
> defaults are for the "maven-bundle-plugin", you only specify the following
> instructions:
>
>
> <Bundle-SymbolicName>GoldeneyeModellingFramework</Bundle-SymbolicName>
>
> <Bundle-Activator>com.host.personalize.goldeneye.framework.activator.Activator</Bundle-Activator>
>
> I always specify:
>
> <Embed-Dependency>*;scope=compile</Embed-Dependency>
>
> which will embed all jars with compile scope. Those I don't want embedded
> but import instead I specify with
>
> <scope>provided</scope>
>
> Again, I don't know the default behavior if your dependencies gets sucked
> into your bundle or not. In my experience when you have dependencies on
> frameworks the framework jars can contain dependencies to things you don't
> use and don't need, but an "Import" will be generated by the
> maven-bundle-plugin. I have found no good way to handle those cases other
> than not use the maven-bundle-plugin more than once and then edit an manage
> the MANIFEST.MF manually.
>
> Also note that if your dependencies are included in your bundle, you also
> need to specify them in the "Bundle-Classpath". Example:
>
> …
> <archive>
> <manifestEntries>
>
> <Bundle-ClassPath>.,lib/GoldeneyeStorageService-1.0.0.jar,...</Bundle-ClassPath>
> </manifestEntries>
> </archive>
> …
>
> The maven-bundle-plugin (or underlaying BND) will try to import any
> referenced package not part of the bundle internal classpath. I see no
> Bundle-ClassPath specifications in your examples.
>
> In either case **you have dependencies that the server (felix) does not
> know about.**, or possible have not been deployed yet, i.e things are
> deployed in the wrong order. I have not used Felix directly, I use it
> through glassfish. Glassfish does a reasonable good resolve of startup
> order and redeploy later on failure. If that is a feature of Glassfish or
> Felix I don't know.
>
> Regards,
> Tommy Svensson
>
>
> 24 aug 2013 kl. 10:52 skrev Raihan Jamal <[email protected]>:
>
> > I have successfullly started an OSGi framework (Apache Felix). Now I was
> > trying to start and install and OSGi bundle. But as soon as I try
> starting
> > the OSGI bundle, I always get this below exception-
> >
> > * Unresolved constraint in bundle GoldenlseyeStorageService [1]:
> Unable
> > to resolve 1.0: missing requirement [1.0] osgi.wiring.package;
> >
> (&(osgi.wiring.package=com.host.kernel.logger)(version>=1.19.0)(!(version>=2.0.0)))
> > *
> >
> > The company that I am working for they have made there own logger code
> > which is extending Apache Log4j. And this package
> `com.host.kernel.logger`
> > is coming from there jar file. Meaning my bundle is depending on this jar
> > maven dependency somehow. And I am not sure how can I fix the above
> > exception as it might be possible, I might need to depend on some other
> > maven dependency of our company specific that is stored in our own
> > repository.
> > Below is my simple code which is starting the OSGi framewok and then
> > trying to install/start the bundle-
> >
> > import java.io.File;
> >
> > import org.apache.tomcat.util.http.fileupload.FileUtils;
> > import org.osgi.framework.Bundle;
> > import org.osgi.framework.BundleActivator;
> > import org.osgi.framework.BundleContext;
> > import org.osgi.framework.BundleException;
> > import org.osgi.framework.launch.Framework;
> > import org.osgi.framework.launch.FrameworkFactory;
> >
> > public class TestOSGi {
> >
> > public static void main(String[] args) {
> >
> > try {
> > FileUtils.deleteDirectory(new File("felix-cache"));
> > FrameworkFactory frameworkFactory =
> > ServiceLoader.load(FrameworkFactory.class).iterator().next();
> >
> > Framework framework = frameworkFactory.newFramework(new
> HashMap<String,
> > String>());
> > framework.start();
> >
> > final BundleContext bundleContext = framework.getBundleContext();
> > final List<Bundle> installedBundles = new LinkedList<Bundle>();
> >
> > BundleActivator b = new org.ops4j.pax.url.mvn.internal.Activator();
> > b.start(bundleContext);
> >
> > String localFilename =
> > "file:C:\\Storage\\GoldenlseyeStorageService-1.0.0.jar";
> >
> > installedBundles.add(bundleContext.installBundle(localFilename));
> >
> > for (Bundle bundle : installedBundles) {
> > bundle.start();
> > }
> >
> > } catch (IOException e) {
> > e.printStackTrace();
> > } catch (BundleException e) {
> > e.printStackTrace();
> > } catch (Exception e) {
> > e.printStackTrace();
> > }
> >
> > }
> > }
> > Below is the manifest file for my `GoldenlseyeStorageService` bundle
> that I
> > am trying to install-
> >
> > Manifest-Version: 1.0
> > Bnd-LastModified: 1377333824248
> > Build-Jdk: 1.6.0_26
> > Built-By: rjamal
> > Bundle-Description: Managed dependencies and plugins across all
> Raptor a
> > pplications.
> > Bundle-ManifestVersion: 2
> > Bundle-Name: GoldenlseyeStorageService
> > Bundle-SymbolicName: GoldenlseyeStorageService
> > Bundle-Version: 1.0.0
> > Created-By: Apache Maven Bundle Plugin
> > Export-Package: com.host.domain.sharedpersonalize.storageservice;use
> >
> s:="com.host.soaframework.common.exceptions,com.host.marketplace.servic
> > es.storageservice,com.host.personalize.services.storage.consumer.ge
> > n,com.host.personalize.services.storage.consumer,com.host.soaframew
> >
> ork.sif.service,com.host.marketplace.services,com.host.kernel.logger";v
> >
> ersion="1.0.0",com.host.marketplace.services.storageservice;uses:="java
> >
> x.xml.bind.annotation,com.host.marketplace.services,javax.activation";v
> > ersion="1.0.0",com.host.personalize.services.storage.consumer;uses:
> > ="javax.xml.ws
> ,com.host.marketplace.services.storageservice";version="1
> > .0.0",com.host.personalize.services.storage.consumer.gen;uses:="com
> > .host.soaframework.common.exceptions,com.host.personalize.services.
> >
> storage.consumer,com.host.soaframework.sif.impl.internal.service,com.eb
> > ay.soaframework.sif.service,javax.xml.ws
> ,com.host.marketplace.services.
> >
> storageservice,com.host.soaframework.common.types,com.host.soaframework
> >
> .common.impl.internal.schema,javax.xml.namespace,com.host.soaframework.
> > common.registration";version="1.0.0"
> > Import-Package:
> com.host.kernel.logger;version="[1.19,2)",com.host.marke
> >
> tplace.services;version="[1.7,2)",com.host.soaframework.common.exceptio
> >
> ns;version="[1.4,2)",com.host.soaframework.common.impl.internal.schema;
> >
> version="[1.4,2)",com.host.soaframework.common.registration;version="[1
> > .4,2)",com.host.soaframework.common.types;version="[1.4,2)",
> com.host.so
> >
> aframework.sif.impl.internal.service;version="[1.4,2)",com.host.soafram
> >
> ework.sif.service;version="[1.4,2)",javax.activation,javax.xml.bind.ann
> > otation,javax.xml.namespace,javax.xml.ws
> > ServicesURLStrategyVersion: 1.0.0-RELEASE
> > Tool: Bnd-1.50.0
> > X-Raptor-Source-Dir:
> > S:\GitViews\GoldenlseyeStream\GoldenlseyeStorageServic
> >
> >
> e/src/main/webapp,S:\GitViews\GoldenlseyeStream\GoldenlseyeStorageService/
> >
> >
> src/main/resources,S:\GitViews\GoldenlseyeStream\GoldenlseyeStorageService
> >
> >
> > Can anyone help me with this?
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>