You are loading the class from two different class loaders, thus they
are not compatible with each other.
You cannot "import" packages from bundles when you are on the outside of
the framework, such as you are trying to do by moving your client to the
outside.
The only way you can get this to work is to put the packages you want to
share on the outside too and then export them into the framework via the
system bundle (see org.osgi.framework.system.packages.extra config
property).
Any classes you want to share between bundles and outside code must be
on the class path and shared into the framework...we have a whole
chapter on launching and embedding frameworks in the OSGi in Action book
if you want a more detailed explanation...
-> richard
p.s. Technically, you could also use reflection in the client instead of
using the classes directly, but I assume you don't want to do that.
On 2/12/13 13:56 , Imóveis Nacionais wrote:
I have 2 bundles, one that supplys a service and the other that calls the
service. When both are installed and started in felix framework everything
works.
Now, I would like to drop/forget the client bundle and create a console app
to launch felix, install server bundle and call the service.
Here the structure of server bundle (MyBundleServer):
Src
com.mycompany.mybundleserver package
Activator.java
upnpImpl.java
com.mycompany.mybundleserver.serviceinterface
upnp.java -> the interface
For the console client, I created a java application, I added the
org.apache.felix.framework-2.0.0.jar and wrote the following code in main()
function
FrameworkFactory frameworkFactory =
ServiceLoader.load(FrameworkFactory.class).iterator().next();
Map<String, String> config = new HashMap<String, String>();
Framework framework = frameworkFactory.newFramework(config);
framework.start();
BundleContext context = framework.getBundleContext();
Bundle y=
context.installBundle("file:/C:/OSGi/felix-framework-4.0.3/MyBundleServer-1.0-SNAPSHOT.jar"
); //the server bundle
y.start();
ServiceReference sr = context.getServiceReference(upnp.class.getName());
if(sr != null)
{
upnp x = (upnp)context.getService(sr); //interface type
if(x != null)
{
int n=x.GetNumber();
context.ungetService(sr);
}
}
When running, line
upnp x = (upnp)context.getService(sr);
generates:
Exception in thread "main" java.lang.ClassCastException:
com.mycompany.mybundleserver.upnpImpl cannot be cast to
com.mycompany.mybundleserver.serviceinterface.upnp
at mystandaloneclient.MyStandAloneClient.main(MyStandAloneClient.java:65)
So, if upnpImpl implements upnp interface and upnp is the interface why can
not JVM cast this stuff?
Thanks a lot
Alex
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@felix.apache.org
For additional commands, e-mail: users-h...@felix.apache.org