2. Apache Aries – Project Overview
Agenda
History
Community
Content
Consumers
Future
2
3. Apache Aries – Project Overview
History
“Aries” created as a new Apache incubator project in Sep 2009
focused on:
• the programming model aspects of OSGi applications in an
enterprise environment
• building a broad development community to encourage
implementation and adoption of EEG specs
• providing an environment to collaborate and experiment with
new technologies to inform further EEG standards.
Independent of
• OSGi framework provider and integration/server runtime
Initial contribution included the Blueprint container implementation
developed originally by the Apache Geronimo community.
Web Site for all resources and documentation:
http://incubator.apache.org/aries/
3
4. Apache Aries – Project Overview
Community
In a short space of time a community of 43 committers
has been formed involving contributors from
Ericsson, IBM, JBoss, LinkedIn, Progress, ProSyst, SAP
and individuals
• http://incubator.apache.org/aries/people.html
Creation of community is one of the primary goals of the
Apache Incubator:
• To demonstrate that there is a broad community of interest
• To help newcomers to Apache learn the ropes.
4
6. Apache Aries – Project Overview
Aries Blueprint Container
A DI container standardizing established Spring conventions
XML Blueprint definition describes component configuration and scope
• Optionally publish and consume components to/from OSGi service registry.
Simplifies unit test outside either Java EE or OSGi r/t.
The Aries BP container implementation is
Managed beans
highly extensible:
• Namespace handlers supported to extend
publishes consumes
service the Blueprint definitions
service
• Bean interceptors can be registered by
OSGI-INF/blueprint/ handlers
A static blueprint.xml
assembly and
configuration of
Other Aries components contribute handlers –
components
(POJOs)
Blueprint bundle “jpa” and “jta” handlers.
Some other Aries components are
implemented as Blueprint bundles themselves
• e.g. JPA container
6
7. Apache Aries – Project Overview
Aries JPA Container – Application Managed PUs
Persistence bundle Managed EntityManagerFactory
Provides support for “Application Registered on behalf of the
Bundle Manifest
managed” JPA. …
persistence bundle
Each persistence bundle has its Meta-Persistence:
OSGI-INF/persistence.xml
standard JPA metadata located
through the Meta-Persistence OSGI-INF/
Entities
bundle header. persistence.xml Registers
EntityManagerFactory
JPA Container locates a JPA service per PU
Provider which can service the PU Uses
and registers a Provider-created org.apache.aries.jpa.container
EntityManagerFactory service for
each PU in each persistence Uses Used to build the
bundle EntityManagerFactory
• EMF service lifecyce follows
the persistence bundle createContainerEMF
(PersistenceUnitInfo)
lifecycle JPA Provider
JPA Provider gets persistence
javax.persistence.spi.
bundle classloader from PUInfo. PersistenceProvider
service
7
8. Apache Aries – Project Overview
Aries JPA Container – Blueprint Integration
The Aries JPA container context Example blueprint with JPA resource
bundle provides a blueprint injection and container-managed
namespace for dependency injection transactions:
of managed JPA resources.
Managed persistence units <blueprint
(EntityManagerFactory objects) can xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:jta="http://aries.apache.org/xmlns/transactions/v1.0.0"
be injected with or without a JTA xmlns:jpa="http://aries.apache.org/xmlns/jpa/v1.0.0">
Transaction Services
<bean id=“appMgd“ class=“com.acme.AppManaged”>
implementation. <jpa:unit property="emf" unitname="myUnit" />
</bean>
Managed persistence contexts
(EntityManager objects) are only <bean id="containerMgd“ class=“com.acme.Container”>
<jpa:context property="em" unitname=“myUnit“/>
available with a JTA Transaction <jta:transaction method=“*" value=“Required" />
Services implementation. </bean>
Both managed persistence units and </blueprint>
managed persistence contexts
behave as per the JPA specification.
8
9. Apache Aries – Project Overview
Aries JTA integration
Apache Aries integrates the OSGi Transaction Service
Reference Implementation (Apache Geronimo
Transaction Manager).
Also: transaction-
blueprint bundle
registers a “jta”
Blueprint namespace
handler to provide
container-managed
transactions for BP
components
9
10. Apache Aries – Project Overview
Aries JMX Integration
Implementation of OSGi JMX specification.
Aries JMX bundle automatically registers the JMX
MBeans into any javax.management.MBeanServer
service in the OSGi Service Registry.
<<MBean>> <<MBean>> <<MBean>>
Fram ework Bund le State Blue print
MB ean MB ean MB ean
Framework MBeans
<<MBean>> PermissionAdmin
Permis sion
Compendium MBeans Ad min MB ean
MBean Server
JMX OSGi <<MBean>> Configur ation Admin
Additional Aries MBeans Manager Co nfiguratio n
Ad min MB ean
<<MBean>> Provisioning Service
Provisi onin g
ServiceMBean
<<MBean>> <<MBean>> <<MBean>> User Admin
Service St ate Package St ate User Adm in
MB ean MB ean MB ean
10
11. Apache Aries – Project Overview
Aries JNDI integration
Provides JNDI-based access to OSGi Service Registry
<blueprint xmlns=...>
<bean id="bloggingServiceComponent"
class="org.apache.aries.BloggingServiceImpl">
</bean>
<service ref="bloggingServiceComponent"
interface="org.apache.aries.samples.blog.api.BloggingService"/>
...
</blueprint>
registerService
A way for a Web component to access a
OSGi Blueprint component
Service Registry
getService
InitialContext ic = new InitialContext();
BloggingService blog= ic.lookup("osgi:services/"
JNDI Context + BloggingService.class.getName());
11
12. Apache Aries – Project Overview
Aries Application Assembly and Deploy
The “application” project provides pluggable infrastructure to support
deployment of an application consisting of a collection of bundles as a
logical unit from an enterprise bundle archive (archive with .eba extn).
• An “Enterprise OSGi Application”.
Constituent bundles may be contained (“by-value”) in the .eba archive
or referenced in APPLICATION.MF
Only explicitly declared Services are exposed from the application.
Config by exception - absence of APPLICATION.MF means:
• application content is the set of bundles contained by-value plus any
repository-hosted dependencies identified during deployment.
Bundle Repository
Bundle Repository
Application Manifest
Enumerates constituent bundles
blog-persistence.jar
json4j.jar Declares Application “externals”
blog.jar
blog.eba blog-servlet.jar
12
13. Apache Aries – Project Overview
Aries Application Assembly and Deploy
Pluggable
ApplicationResolver
- NoOpResolver
Aries Application = - OBRAriesResolver
createApplication(eba)
org.apache.aries.application.management
Pluggable BundleConverters
- WabConverterService
Manifest-Version: 1.0
Manifest-Version: 1.0 Deployment-ManifestVersion: 1.0
Application-ManifestVersion: 1.0 Application-Name: Blog Application
Application-Name: Blog Application Application-SymbolicName: aries.sample.blog
Application-SymbolicName: aries.sample.blog Application-Version: 1.0
Application-Version: 1.0 Deployed-Content:
Application-Content: aries.sample.blog; version=1.0.0,
aries.sample.blog; version="[1.0.0,1.1.0)", aries.sample.blog-api; version=1.0.0,
aries.sample.blog-api; version="1.0.0", aries.sample.blog-persistence; version=1.0.0,
aries.sample.blog-persistence; version="1.0.0", aries.sample.blog-servlet; version=1.0.0,
aries.sample.blog-servlet; version="[1.0.0,1.0.0]” com.ibm.json.java; version=1.0.0
Application Manifest (developer/assembler authored artefact) Deployment Manifest (generated during createApplication)
Enumerates constituent bundles and allowable version ranges Transitively closed description of all bundles resolved at
Declares Application “externals” specific versions to “freeze-dry” the application.
13
14. Apache Aries – Project Overview
Aries META-INF/services SPI handler
Common Java SE pattern for loading service provider interfaces:
config file in META-INF/services containing class name of provider
implementation. For example JPA defines:
META-INF/services/javax.persistence.spi.PersistenceProvider
• Problematic pattern for OSGi where a client import of
META-INF/services gets resolved to one provider.
Aries SPI-Fly project provides a generic solution
Service Provider bundle
org.apache.aries.spifly reads
Bundle Manifest
…
SPI-Provider:
Registers service with property
spi.provider.url = URL to the associated
resource in OSGI-INF/services
OSGI-INF/services
“org.acme.impl.class”
14
15. Apache Aries – Project Overview
Aries Samples
AriesTrader – Apache Geronimo DayTrader Java EE
benchmark application converted to OSGi Application
using web and blueprint components
• Objective is to demonstrate best practices
• Performance benchmarking
Blog Sample – New application to demonstrate Aries
features
The Samples illustrate how to run Aries applications on a
standard OSGi f/w (e.g. Equinox) + Aries +
dependencies (Derby DB, PaxWeb servlet container).
http://incubator.apache.org/aries/samples.html
15
16. Apache Aries – Project Overview
Example “Blog” Application Architecture
blog.eba
blog-api
Web application bundle
JNDI EM
WEB-INF/ Blogging OSGI-INF/
Blog
web.xml Service OSGI-INF/blueprint/ persistence.xml
blueprint.xml Persistence
Service
blog-servlet OSGI-INF/blueprint/
blog blueprint.xml
blog-persistence
16
17. Apache Aries – Project Overview
Current Aries Consumers
Aries SNAPSHOT builds available right now
Aries 0.1 Release content under discussion and will be
available soon.
Aries components are currently used by:
• Apache Geronimo
• Apache Felix Karaf
• JBossOSGi
• WebSphere Application Server
17
18. Apache Aries – Project Overview
Futures
There are many new application-centric features that
Aries may develop including:
• message-driven blueprint components and services
• declarative role-based security for blueprint components
• annotation-based alternative to XML configuration
• resource-reference metadata and bindings
(Original Proposal: http://wiki.apache.org/incubator/AriesProposal)
Interested in getting involved?
• http://incubator.apache.org/aries/gettinginvolved.html
18