Hi all,
after having run along the classical Felix tutorials (creating bundles
through maven), i was quite interested by the promises of OSGi, but a
little worried by the way dependencies were resolved. Fortunatly, my
eye felt on iPOJO. I can say I was quite pleased by the promise of IoC
between plugins (what seems to offer iPOJO) especially using
annotations, which may be a fad, but are to my mind very useful.

Before all, I must confess I'm a converted maven user, which may alter
some of my points of view.

So, I've tried to do the maven tutorial
(http://felix.apache.org/site/ipojo-hello-word-maven-based-tutorial.html)
using a well-known maven way : a superpom containing my poms basic
definitions and one module for each feature : a hello-service module,
and a hello-client one. Before all, I have to say I used this
architecture for classical Felix tutorials, and it perfectly worked.
So, my modules pom were quite light, and so were my classes.
In these classes, I defined the HelloService interface, a HelloImpl
provider (with @Component and @Provides) annotation, and a HelloClient
using @Requires annotation, as well as @Validates one to start the
hello world code.
Having done so, it seemed to me I didn't had to create a metada.xml
file, since all informations were in these annotations. Was I
theorically right ?
Well, in the facts, i was wrong since :
 - my jars METADATA.INF don't contain any of the data defined by both
parent and module maven-bundle-plugin configuration
 - the maven log don't reveal any maven-bundle-plugin execution (which
may be the reason for the lack of METADATA.INF) ... well, this one was
found and resolved : my modules didn't packaged themselves as "bundle"
... stupid of me !
 - once the above is corrected, my METADA.INF were created, my bundles
had their correct names set in felix, but the @Validate method of my
client was never called. FTR, here is my full hello client :

@Component(name="Da Hello Klient")
public class HelloClient {
        private static final Logger logger = Logger.getLogger(HelloClient.class
                        .getName());

        @Requires
        private HelloService service;
        
        private String user = System.getProperty("user.name");
        
        @Validate
        public void hello() {
                logger.info(service.sayHello(user));
        }
        
        @Invalidate
        public void goodbye() {
                logger.info(service.sayGoodbye(user));
        }
}

And the associated METADATA.INF

Manifest-Version: 1.0
Export-Package: com.mycompany.hello.api
Built-By: ndx
Tool: Bnd-0.0.238
Bundle-Name: com.mycompany.hello
Created-By: Apache Maven Bundle Plugin
Bundle-Vendor: Perigee
Build-Jdk: 1.6.0_16
Bundle-Version: 0.0.1.SNAPSHOT
Bnd-LastModified: 1270632257171
Bundle-ManifestVersion: 2
Bundle-Description: Dis bonjour au monde !
Import-Package: com.mycompany.hello.api
Bundle-SymbolicName: com.mycompany.hello-service
Bundle-DocURL: http://www.mycompany.fr

So, here are my questions :
 - Do I absolutely need a metada.xml file ?
 - Is the validate method really called once all dependencies have
been resolved and my iPOJO can be started ?

Thanks

-- 
Nicolas Delsaux

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to