Aggelos
[ I'm happy to discuss this here, unless anyone else objects to the
discussion happening on the OSGi mailing list. ]
...
I do not see a getImportedServiceNames() method that returns a
String[] of service names.
protected String[] getImportedServiceNames() {
return new String[] {
servicetype1.class.getName(),
servicetype2.class.getName(),
servicetype3.class.getName()
};
}
Without that, your getservicetype1() methods are probably returning
null. I am assuming that getservicetype1() is something like:
private servicetype1 getservicetype1() {
return (servicetype1)
getImportedService(servicetype1.class.getName());
}
This worried me too:
> protected void createExportedServices(type BCObject) {
>
> String[] names = new String[] {
> mplampla, mplampla
> };
> addExportedServices(names, BCObject, null);
>
> }
The names must be fully qualified type names. I guess "mplampla" is
just your pseudo-code.
>>Furthermore, if the deactivator is called (for any reason), is the
>>service facility going to be destructed, or the previous instance will
>>be used?
After returning from deactivate(), SAT will automatically unregister
all registered services for your. You would only need deactivate() if
MyserviceType needed some sort of clean up, for example:
protected void activate() {
...
MyserviceType service = new MyserviceType(...);
service.start();
...
}
protected void deactivate() {
...
MyserviceType service =
getExportedService(MyserviceType,class.getName());
service.stop();
...
}
I hope this helps.
Simon
*Aggelos Mpimpoudis <[EMAIL PROTECTED]>*
Sent by: [EMAIL PROTECTED]
07/30/2007 12:12 PM
Please respond to
OSGi Developer Mail List <[email protected]>
To
OSGi Developer Mail List <[email protected]>
cc
Subject
Re: [osgi-dev] Service Tracking Matter
Something like, plus the appropriate private service getters methods.
> package ...
>
> imports ...
>
> public class Activator extends BaseBundleActivator {
> private type1 var1;
> private type2 var2;
>
>
>
> protected void activate() {
> var1 = getservicetype1();
> var2 = getservicetype2();
> var3 = getservicetype2();
>
> try {
> MyserviceType service = new MyserviceType (var1,
>
var2,
>
var3,
>
var4);
> createExportedServices(service);
> } catch (... e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> }
>
> }
>
> public void start (){
>
> System.out.println("Init Bootstrap");
> }
>
>
> protected void createExportedServices(type BCObject) {
>
> String[] names = new String[] {
> mplampla, mplampla
> };
> addExportedServices(names, BCObject, null);
>
> }
>
>
> protected void deactivate() {
> // TODO Implement deactivate()
> }
>
>
> }
Although the required bundles are up, I still cannot see results from a
println call..... :(
Furthermore, if the deactivator is called (for any reason), is the
service facility going to be destructed, or the previous instance will
be used?
Thx,
Aggelos
Simon J Archer wrote:
>
> Aggelos
>
> The BaseBundleActivator's activate() method is only called when the
> activator has acquired ALL of the service it requires, as described by
> the getImportedServices() method. Remember that the required services
> either may or may not be available when the bundle activator starts,
> so the activate()/deactivate() methods are often called asynchronously
> as a result of events published by OSGi. In some cases the activate()
> method WILL get called as the bundle activator starts, but not
> necessarily. The goal here is to make sure that there are no start-up
> order dependencies between the bundles.
>
> The activate()/deactivate() methods always execute in pairs, meaning
> that deactivate() only happens after an activate(), and the activate()
> can be re-executed after a deactivate(). As services are
> acquired/released the activate()/deactivate() methods will get called.
>
> If you show me the activator code you have that might help.
>
> Good luck,
>
> Simon
>
>
>
> *Aggelos Mpimpoudis <[EMAIL PROTECTED]>*
> Sent by: [EMAIL PROTECTED]
>
> 07/30/2007 10:47 AM
> Please respond to
> OSGi Developer Mail List <[email protected]>
>
>
>
> To
> OSGi Developer Mail List <[email protected]>
> cc
>
> Subject
> Re: [osgi-dev] Service Tracking Matter
>
>
>
>
>
>
>
>
>
> Quick question: what the following question means?
> /
> Hook Method:/ You have been activated. This method is implemented by
> bundles that wish to execute *domain specific activation*
>
> Even if I have implemented my activate() method, I think that it doesn't
> execute it's code at all (when the bundle is started).
>
> Thx,
> Aggelos.
>
> Simon J Archer wrote:
> >
> > Hi Aggelos
> >
> > The SAT Bundle Activator Wizard behaves much like the Java Class
> > Wizard in that by default it only offer types that are on the
> > project's classpath. While using the Import/Export page of the wizard
> > you can actually make it see types visible to the workspace, rather
> > than simply those on the project's classpath... Use the "Edit Type
> > Scope..." button. Of course, if you deviate from the project
> > classpath then you'll need to update the classpath to ensure that your
> > Activator will compile. See the following page of the documentation:
> >
> >
> >
>
http://www.vanderleiindustries.com/sat/help/topic/org.eclipse.soda.sat.plugin.activator.doc/books/tooling/activator/wizard-page-02.html
>
> >
> >
> > Please give it another try. If you continue to have trouble, please
> > reply with the steps you are taking; the clearer the better, since
> > this way I can help get you back on track.
> >
> > Let me know how it goes,
> >
> > Simon
> >
> >
> >
> > *Aggelos Mpimpoudis <[EMAIL PROTECTED]>*
> > Sent by: [EMAIL PROTECTED]
> >
> > 07/27/2007 10:10 AM
> > Please respond to
> > OSGi Developer Mail List <[email protected]>
> >
> >
> >
> > To
> > OSGi Developer Mail List <[email protected]>
> > cc
> >
> > Subject
> > Re: [osgi-dev] Service Tracking Matter
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > Xmm....Today was an OSGi day. I try several hours now to get along
with
> > SAT usage and I think I am getting along with it up until now. One
> > little query though. Using the toolkit of SAT package, I try to import
> > services through the Bundle Activator Wizard, but I cannot-it does not
> > show me my project's packages. How does this works? I have a project
> > with multiple packages (manifest files are constructed with ant
> > directives and saved at a resource directory at project's root). I
have
> > scanned through SAT's documents but I didn't find a solution.
> >
> >
> > Thank you,
> > Aggelos Mpimpoudis
> >
> > Simon J Archer wrote:
> > >
> > > Seriously, SAT is easier than the ServiceTracker. I encourage
you to
> > > try both and find out for yourself.
> > >
> > > I'm happy to help where I can,
> > >
> > > Simon
> > >
> > >
> > >
> > > *Aggelos Mpimpoudis <[EMAIL PROTECTED]>*
> > >
> > > 07/26/2007 05:17 PM
> > >
> > >
> > > To
> > > Simon J Archer/Raleigh/[EMAIL PROTECTED]
> > > cc
> > >
> > > Subject
> > > Re: [osgi-dev] Service Tracking Matter
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > Mr Archer in the past we have spoked in private about SAT and
> eclipsecon
> > > that took place in March ;-) (remember me?)
> > > I find ServiceTracker a bit easier....Well. I will reconsider it
> > > tonight, after a little time with me vs SAT (again)
> > > I have all the appropriate material.
> > >
> > > I will answer at this mail, prividing my final decision. Thank u
> all!!!
> > >
> > > Thx,
> > > Aggelos Mpimpoudis
> > >
> > > Simon J Archer wrote:
> > > >
> > > > Hello Agellos
> > > >
> > > > When you say, "only when 3 other services are added" I presume you
> > > > mean 3 distinct services, right. This is EASY to do with SAT....
> > > > Here's what you'd need:
> > > >
> > > > *public* *class* Activator *extends* BaseBundleActivator {
> > > > *protected* *void* activate() {
> > > > ConfigurationAdmin cm = getConfigurationAdmin();
> > > > LogService ls = getLogService();
> > > > PackageAdmin pa = getPackageAdmin();
> > > >
> > > > FooService service = *new* Foo(cm, ls, pa);
> > > > addExportedService(FooService.*class*.getName(),
> > > > service, *null*);
> > > > }
> > > >
> > > > *private* ConfigurationAdmin getConfigurationAdmin() {
> > > > *return* (ConfigurationAdmin)
> > > > getImportedService(ConfigurationAdmin.*class*.getName());
> > > > }
> > > >
> > > > *protected* String[] getImportedServiceNames() {
> > > > *return* *new* String[] {
> > > > ConfigurationAdmin.*class*.getName(),
> > > > LogService.*class*.getName(),
> > > > PackageAdmin.*class*.getName()
> > > > };
> > > > }
> > > >
> > > > *private* LogService getLogService() {
> > > > *return* (LogService)
> > > > getImportedService(LogService.*class*.getName());
> > > > }
> > > >
> > > > *private* PackageAdmin getPackageAdmin() {
> > > > *return* (PackageAdmin)
> > > > getImportedService(PackageAdmin.*class*.getName());
> > > > }
> > > > }
> > > >
> > > > I am assuming that you need three distinct services:
> > > > ConfigurationAdmin, LogService and PackageAdmin service.
When, and
> > > > ONLY WHEN, you have all three will activate() execute. When you
> lose
> > > > ANY ONE of the three services then deactivate() gets called. In
> this
> > > > case deactivate() is the inherited no-op implementation from the
> > > > superclass. When and ONLY WHEN, you have re-acquired all three
> > > > services activate() will re-execute.
> > > >
> > > > Easy.
> > > >
> > > > Simon
> > > >
> > > > http://eclipse-sat.blogspot.com/
> > > >
> > > >
> > > >
> > > > *Aggelos Mpimpoudis <[EMAIL PROTECTED]>*
> > > > Sent by: [EMAIL PROTECTED]
> > > >
> > > > 07/26/2007 02:30 PM
> > > > Please respond to
> > > > OSGi Developer Mail List <[email protected]>
> > > >
> > > >
> > > >
> > > > To
> > > > OSGi Developer Mail List <[email protected]>
> > > > cc
> > > >
> > > > Subject
> > > > [osgi-dev] Service Tracking Matter
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > Hello, OSGi community.
> > > >
> > > > Here is my question. I have an OSGi service, that I want to
> initialize
> > > > it's facilities only when 3 other services are added to the
> > framework. I
> > > > construct 3 service trackers (each one for every needed
> service). How
> > > > can I proceed after obtaining the knowledge that the 3
services are
> > > > ready? I am thinking of keeping a map maintained and at every
> add and
> > > > remove of service to check map's size and only if it is of size
> 3, to
> > > > proceed with the thread's execution. Is this practice very
naive? Is
> > > > there something more obvious that I am missing?
> > > >
> > > > Thank you!
> > > >
> > > > My Best Regards,
> > > > Aggelos Mpimpoudis
> > > > --
> > > > Dept. of Informatics & Telecommunications, University of Athens
> > > > Athens, Greece
> > > > Gsm: +306942075153 / Skype: aggelos.mpimpoudis
> > > > email: a.mpimpoydhs [at] di.uoa.gr
> > > > _______________________________________________
> > > > OSGi Developer Mail List
> > > > [email protected]
> > > > http://www2.osgi.org/mailman/listinfo/osgi-dev
> > > >
> > >
> > >
> > > --
> > > Dept. of Informatics & Telecommunications, University of Athens
> > > Athens, Greece
> > > Gsm: +306942075153 / Skype: aggelos.mpimpoudis
> > > email: a.mpimpoydhs [at] di.uoa.gr
> > >
> >
> >
> > --
> > Dept. of Informatics & Telecommunications, University of Athens
> > Athens, Greece
> > Gsm: +306942075153 / Skype: aggelos.mpimpoudis
> > email: a.mpimpoydhs [at] di.uoa.gr
> > _______________________________________________
> > OSGi Developer Mail List
> > [email protected]
> > http://www2.osgi.org/mailman/listinfo/osgi-dev
> >
> >
------------------------------------------------------------------------
> >
> > _______________________________________________
> > OSGi Developer Mail List
> > [email protected]
> > http://www2.osgi.org/mailman/listinfo/osgi-dev
>
>
> --
> Dept. of Informatics & Telecommunications, University of Athens
> Athens, Greece
> Gsm: +306942075153 / Skype: aggelos.mpimpoudis
> email: a.mpimpoydhs [at] di.uoa.gr
> _______________________________________________
> OSGi Developer Mail List
> [email protected]
> http://www2.osgi.org/mailman/listinfo/osgi-dev
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> OSGi Developer Mail List
> [email protected]
> http://www2.osgi.org/mailman/listinfo/osgi-dev
--
Dept. of Informatics & Telecommunications, University of Athens
Athens, Greece
Gsm: +306942075153 / Skype: aggelos.mpimpoudis
email: a.mpimpoydhs [at] di.uoa.gr
_______________________________________________
OSGi Developer Mail List
[email protected]
http://www2.osgi.org/mailman/listinfo/osgi-dev
------------------------------------------------------------------------
_______________________________________________
OSGi Developer Mail List
[email protected]
http://www2.osgi.org/mailman/listinfo/osgi-dev