felix-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Nicolas Delsaux <nicolas.dels...@gmail.com>
Subject iPOJO annotations with a maven project
Date Wed, 07 Apr 2010 09:33:44 GMT
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: users-unsubscribe@felix.apache.org
For additional commands, e-mail: users-help@felix.apache.org


Mime
View raw message