To discuss, lets define some package names:

package mybean contains MyBean
package myservice contains MyService

The export for package myservice must have a uses constraint on mybean 
since a type in mybean appears in the signature of a type in myservice.

Bundle C must import both package mybean and myservice since it uses types 
from both. When you update the package exporting mybean, you will need to 
refresh all the bundles which import mybean in order for them to 
re-resolve to the updated package. So Bundle C must be stopped, 
re-resolved and restarted. This cannot be avoided.

-- 

BJ Hargrave
Senior Technical Staff Member, IBM
OSGi Fellow and CTO of the OSGi Alliance
[email protected]

office: +1 386 848 1781
mobile: +1 386 848 3788





From:   "matteo rulli" <[email protected]>
To:     <[email protected]>, 
Date:   2013/01/30 11:47
Subject:        [equinox-dev] bundles wiring and redeployment issues - 
hotswap
Sent by:        [email protected]



I'm facing the following issue under OSGi environment: let's say I have a 
bundle A exporting com.mybiz.example package. This package, in its 1.0.0 
version, contains a bean class MyBean so that
 
    public class MyBean {
     int var;
     public MyBean() { }
     public int getVar() { return var; }
     public void setVar(int v) { var = v; }
    }
 
Bundle B exports an interface MyService which uses MyBean:
 
    public interface MyService {
     public MyBean getMyBean();
    }
 
Note: in our architecture, MyBean must be a class and not an interface.
 
Bundle C uses MyService as a declarative service in this way:
 
    private AtomicReference<MyService> _serv = new 
AtomicReference<MyService>();
    public void addMyService(MyService serv) {
     //this method is the one called by declarative services when Bundle B 
is started
     _serv.set(serv);
    }
 
    public void run() {
     ...
 
     MyBean x = _serv.getMyBean();
     //use x ...
    }
 
Now the problem arises if I need to do a hot fix on MyBean class. 
Let's say I need to add a field and some methods.
Then, I've got a running OSGi environment where bundles A,B,C are 
deployed. 
 
My requirement is that I cannot stop any bundle.
 
So, under these hypotheses, I deploy a new version of my bundle A, say 
A_1.1.0.jar. Now I'm not able to make bundle C to use the new version of 
MyBean class contained in A_1.1.0.jar.
 
How can I do it?
 
Thank you very much!
 
Best regards,
matteo_______________________________________________
equinox-dev mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/equinox-dev

_______________________________________________
equinox-dev mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/equinox-dev

Reply via email to