[hibernate-dev] OSGI manifests for hibernate-orm
Steve Ebersole
steve at hibernate.org
Thu Aug 16 10:36:03 EDT 2012
Guys, lets move this discussion to the Jira. Thats the best way to
capture all these points...
On Thu 16 Aug 2012 09:25:58 AM CDT, Scott Marlow wrote:
> Does the Bundle-Activator really belong in the Hibernate core project?
> Or should it be in the external OSGI container? Or perhaps someone
> may want to maintain an external project that generates the "ready to
> be used" Hibernate Bundle-Activator.
>
>
> On 08/16/2012 05:58 AM, mailing at bibbernet.org wrote:
>> Hi Steve,
>>
>>> Not being well-versed in OSGi, could you explain what 'blueprint.xml'
>>> is?
>>> I guess the purpose is the same/similar to
>>> /META-INF/services/javax.persistence.spi.PersistenceProvider defined by
>>> JPA, yet OSGi specific?
>>
>> Ok, to give some background information, I will cite a section of the
>> "OSGI Service Platform Release 4, Enterprise Specification Version 4.2":
>>
>> <cite>
>> 127.5.1 Managed Model
>>
>> A JPA Provider that supports running in managed mode should register a
>> specific service for the Java EE Containers: the Persistence Provider
>> service. The interface is the standard JPA PersistenceProvider
>> interface.
>> See Dependencies on page 402 for the issues around the multiple versions
>> that this specification supports.
>> The service must be registered with the following service property:
>>
>> javax.persistence.provider – The JPA Provider implementation class
>> name, a
>> documented name for all JPA Providers.
>>
>> The Persistence Provider service enables a Java EE Container to find a
>> particular JPA Provider. This service is intended for containers
>> only, not
>> for Client Bundles because there are implicit assumptions
>> in the JPA Providers about the Java EE environment. A Java EE Container
>> must obey the life cycle of the Persistence Provider service. If this
>> service is unregistered then it must close all connections and
>> clean up the corresponding resources.
>> </cite>
>>
>> This means we need to generate a service which announces the
>> existence of
>> a new persistence provider. There are in general two ways:
>>
>> The programmatic way:
>> - Create a BundleActivator.class which generates the service.
>> - Add the Bundle-Activator (needed) and Export-Service (only informative
>> nature) manifest headers
>>
>> A non complete example could be:
>> --------------------------
>> package org.hibernate.ejb.osgi;
>>
>> import java.util.Properties;
>> import javax.persistence.spi.PersistenceProvider;
>>
>> import org.hibernate.ejb.HibernatePersistence;
>> import org.osgi.framework.BundleActivator;
>> import org.osgi.framework.BundleContext;
>>
>> public class PersistenceProviderActivator implements BundleActivator {
>>
>> public void start(final BundleContext context) throws Exception {
>> Properties properties = new Properties();
>> properties.put("javax.persistence.provider",
>> HibernatePersistence.class.getName());
>> context.registerService(PersistenceProvider.class.getName(),
>> HibernatePersistence.class.newInstance(), properties);
>> }
>>
>> public void stop(final BundleContext context) throws Exception {
>> }
>> }
>>
>> +
>> Bundle-Activator: org.hibernate.ejb.osgi.PersistenceProviderActivator
>> --------------------------
>>
>>
>> The descriptive way:
>> - Create a blueprint.xml file to describe and announce the service (See
>> OSGI Enterprise Specification Version 4.2 - Section 121 for more
>> information about blueprint)
>> - The file must be located under OSGI-INF/blueprint
>> - Add the Export-Service manifest headers (only informative nature)
>>
>> Some background about blueprint bundles:
>>
>> <cite>
>> 121.3 Blueprint Life-Cycle
>>
>> A bundle is a Blueprint bundle if it contains one or more blueprint XML
>> definition resources in the OSGI-INF/blueprint directory or it contains
>> the Bundle-Blueprint manifest header referring to existing resources.
>> </cite>
>>
>> A non complete Example could be:
>> --------------------------
>> <?xml version="1.0" encoding="UTF-8"?>
>>
>> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xsi:schemaLocation="
>> http://www.osgi.org/xmlns/blueprint/v1.0.0
>> http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
>>
>> <bean id="hibernateJpaProvider"
>> class="org.hibernate.ejb.HibernatePersistence" />
>> <service ref="hibernateJpaProvider"
>> interface="javax.persistence.spi.PersistenceProvider">
>> <service-properties>
>> <entry key="javax.persistence.provider"
>> value="org.hibernate.ejb.HibernatePersistence" />
>> </service-properties>
>> </service>
>> </blueprint>
>> --------------------------
>>
>> I prefere the descriptive way - but I am open for discussions.
>>
>>
>>> I'd much rather see this in 5.0 which is slated as the next release
>>> atm,
>>> or 4.2 if we end up needing a JPA 2.1 specific release.
>>
>> Working against master is not a problem for me. It was one of the main
>> purposses of my post to clarify the surrounding conditions for my
>> work :)
>>
>> We should narrow down the target versions for
>> hibernate-commons-annotation
>> and the other needed bundles too.
>>
>>
>> regards
>> Martin Neimeier
>>
>>
>>
>> _______________________________________________
>> hibernate-dev mailing list
>> hibernate-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>>
>
>
--
steve at hibernate.org
http://hibernate.org
More information about the hibernate-dev
mailing list