OK - I didn't realize that you were using JPA 1.0. I've only used JPA 2.0.
What version of OpenJPA do you use then?

About the validator. Note that it is not enough to verify that the
validator works outside of OSGi since you cannot use an ordinary validator
implementation in OSGi - it will not be found. In the ServiceMix project
they provide an OSGi'ified version of Hibernate's reference implementation
that you can use in OSGi. The problem is that java's standard way of
finding resources does not work in OSGi.

What validator (and version) implementation do you use?

/Bengt

2012/4/26 Borut Bolcina <[email protected]>

> A minute later after sending the email below, I saw I was using jpa 1.0
> persistence.xml, god knows where I copied/pasted the template from.
>
> I have validator installed, so this is not a problem. I need it as I am
> using some annotations on my model pojo to validate incoming values from
> xml input source.
>
> Right now I am clueless.
>
> Borut
>
> Sent from my iPad
>
> On 26. apr. 2012, at 15:06, Bengt Rodehav <[email protected]> wrote:
>
> Hello again,
>
> The Warning is know at OpenJPA. I think it is reported in JIRA. It turns
> up now and then but noone seems to know exactly what triggers it. I've had
> it too but it doesn't seem to be a problem.
>
> About validation - I should have though of that...
>
> I also have this line in my persistence.xml:
>
> *    <validation-mode>NONE</validation-mode>*
>
> This tells OpenJPA not to validate. Otherwise you must also deploy a
> validation provider. I've used the reference implementation from Hibernate
> for this but normally I turn it off with the above line.
>
> /Bengt
>
> 2012/4/26 Borut Bolčina <[email protected]>
>
>> I modified the model bundle to include properties section in
>> persistence.xml
>>
>> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence";
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>>  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
>> http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd";>
>>
>> <persistence-unit name="weather" transaction-type="JTA">
>>
>> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
>> <jta-data-source>osgi:service/javax.sql.DataSource/(
>> osgi.jndi.service.name=jdbc/mysqlds)</jta-data-source>
>>  <class>si.najdi.weather.entities.WeatherCurrent</class>
>> <exclude-unlisted-classes>true</exclude-unlisted-classes>
>>
>> <properties>
>> <property name="openjpa.ConnectionFactoryMode" value="managed" />
>>  <property name="openjpa.jdbc.DBDictionary"
>> value="mysql(TableType=innodb)" />
>>  <property name="openjpa.Log" value="DefaultLevel=INFO, Tool=INFO" />
>> </properties>
>>
>> </persistence-unit>
>> </persistence>
>>
>> and reinstalled all my bundles, but it makes no difference.
>>
>> I notices this in my console when the route is started:
>>
>> 20  WARN   [Blueprint Extender: 2] openjpa.Runtime - The configuration
>> property named "openjpa.Id" was not recognized and will be ignored,
>> although the name closely matches a valid property called "openjpa.Id".
>>
>> With the TRACE level enabled, I see:
>>
>> karaf@root> osgi:install -s
>> mvn:com.mycompany/weather-model/1.0.5-SNAPSHOT
>> 35  weather  TRACE  [Thread-10] openjpa.Runtime - Setting the following
>> properties from "?" into configuration:
>> {openjpa.ConnectionFactory=org.apache.aries.jpa.container.unit.impl.DelayedLookupDataSource@92b,
>> openjpa.ConnectionFactoryMode=managed,
>> javax.persistence.validation.mode=AUTO,
>> javax.persistence.provider=org.apache.openjpa.persistence.PersistenceProviderImpl,
>> openjpa.TransactionMode=managed,
>> openjpa.MetaDataFactory=jpa(Types=com.mycompany.weather.entities.WeatherCurrent),
>> openjpa.ClassResolver=org.apache.openjpa.persistence.PersistenceUnitInfoImpl$ClassResolverImpl@ee7fac,
>> javax.persistence.sharedCache.mode=UNSPECIFIED,
>> openjpa.Log=DefaultLevel=TRACE, Tool=INFO,
>> openjpa.jdbc.DBDictionary=mysql(TableType=innodb), PersistenceVersion=1.0,
>> openjpa.Id=weather}
>> 58  weather  TRACE  [Thread-10] openjpa.Runtime - No cache marshaller
>> found for id org.apache.openjpa.conf.MetaDataCacheMaintenance.
>> 104  weather  TRACE  [Thread-10] openjpa.MetaData - Scanning resource
>> "META-INF/orm.xml" for persistent types.
>> 105  weather  TRACE  [Thread-10] openjpa.MetaData - The persistent unit
>> root url is "null"
>> 105  weather  TRACE  [Thread-10] openjpa.MetaData -
>> parsePersistentTypeNames() found
>> [com.mycompany.weather.entities.WeatherCurrent].
>> 106  weather  TRACE  [Thread-10] openjpa.MetaData - Found 1 classes with
>> metadata in 48 milliseconds.
>> 1  weather  TRACE  [Thread-10] openjpa.Runtime - Setting the following
>> properties from "?" into configuration: {openjpa.BrokerFactory=jdbc,
>> javax.persistence.provider=org.apache.openjpa.persistence.PersistenceProviderImpl,
>> javax.persistence.sharedCache.mode=UNSPECIFIED, PersistenceVersion=1.0,
>> openjpa.jdbc.DBDictionary=mysql(TableType=innodb),
>> openjpa.Log=DefaultLevel=TRACE, Tool=INFO, openjpa.Id=weather,
>> openjpa.ConnectionFactoryMode=managed,
>> openjpa.ConnectionFactory=org.apache.aries.jpa.container.unit.impl.DelayedLookupDataSource@92b,
>> javax.persistence.validation.mode=AUTO, openjpa.TransactionMode=managed,
>> openjpa.MetaDataFactory=jpa(Types=com.mycompany.weather.entities.WeatherCurrent),
>> openjpa.BrokerImpl=non-finalizing,
>> openjpa.ClassResolver=org.apache.openjpa.persistence.PersistenceUnitInfoImpl$ClassResolverImpl@ee7fac
>> }
>> 1  weather  TRACE  [Thread-10] openjpa.Runtime - Not creating a
>> ValidatorImpl because this app is using the JPA 1.0 Spec
>> 1  weather  TRACE  [Thread-10] openjpa.Runtime -
>> org.apache.openjpa.persistence.PersistenceProviderImpl@1ad69f1 creating
>> container org.apache.openjpa.persistence.EntityManagerFactoryImpl@6888bfor 
>> PU weather.
>> Bundle ID: 137
>>
>>
>> Certanly this look strange:
>> Not creating a ValidatorImpl because this app is using the JPA 1.0 Spec
>>
>> Digging...
>>
>>
>>
>>
>> Dne 26. april 2012 12:57 je Bengt Rodehav <[email protected]> napisal/-a:
>>
>> Then I guess OpenJPA can't find or does not try to find your datasource
>>> service. Looking at my different persistence.xml's I usually have a few
>>> OpenJPA properties defined, like this:
>>>
>>> *<properties>*
>>> *      <property name="openjpa.ConnectionFactoryMode" value="managed" />
>>> *
>>> *      <property name="openjpa.jdbc.SynchronizeMappings"
>>> value="buildSchema(ForeignKeys=true)" />*
>>> *      <property name="openjpa.jdbc.DBDictionary"
>>> value="org.apache.openjpa.jdbc.sql.SQLServerDictionary" />*
>>> *      <property name="openjpa.jdbc.UpdateManager"
>>> value="operation-order" />*
>>> *      <property name="openjpa.Log" value="DefaultLevel=INFO,
>>> Tool=INFO" />*
>>> *<!--      <property name="openjpa.Log" value="DefaultLevel=TRACE,
>>> Tool=INFO" />-->*
>>> *    </properties>*
>>>
>>> One idea is to enable TRACE logging to see what OpenJPA complains about.
>>> Another one is that maybe the first property (the ConnectionFactoryMode)
>>> must be set to "managed" for this to work. I'm not sure but there is
>>> probably a reason why I always have that property defined.
>>>
>>> /Bengt
>>>
>>> 2012/4/26 Borut Bolčina <[email protected]>
>>>
>>>> Hello,
>>>>
>>>> yes I find this comments very useful!
>>>>
>>>> karaf@root> ls | grep -B 4 javax.sql.DataSource
>>>> org.apache.aries.jpa.container.context.PersistenceContextProvider
>>>>
>>>> weather-datasource (123) provides:
>>>> ----------------------------------
>>>> javax.sql.DataSource
>>>> karaf@root> ls 123
>>>>
>>>> weather-datasource (123) provides:
>>>> ----------------------------------
>>>> objectClass = javax.sql.DataSource
>>>> osgi.jndi.service.name = jdbc/mysqlds
>>>> osgi.service.blueprint.compname = weatherDataSource
>>>> service.id = 222
>>>> ----
>>>> objectClass = org.osgi.service.blueprint.container.BlueprintContainer
>>>> osgi.blueprint.container.symbolicname = weather-datasource
>>>> osgi.blueprint.container.version = 1.0.5.SNAPSHOT
>>>> service.id = 223
>>>>
>>>> I guess the datasource service is published correctly.
>>>>
>>>> Thanks,
>>>> borut
>>>>
>>>> Dne 26. april 2012 11:09 je Bengt Rodehav <[email protected]>napisal/-a:
>>>>
>>>> Hello there,
>>>>>
>>>>> I guess you should check that your datasource has been published as a
>>>>> service. I'm not the best Karaf guru but I would do something like this:
>>>>>
>>>>> Check what services provides datasources:
>>>>>
>>>>> *ls | grep -B 4 javax.sql.DataSource*
>>>>>
>>>>> This should identify what bundles provide datasources as services.
>>>>> Assume that one of the bundles had the bundle id 78, you could then look
>>>>> more closely at that bundles services with the following command:
>>>>>
>>>>> *ls 78*
>>>>> *
>>>>> *
>>>>> You will now see the services provided by this bundle and also its
>>>>> service properties. You should see a line similar to:
>>>>>
>>>>> *osgi.jndi.service.name = jdbc/mysqlds*
>>>>>
>>>>> Hope that helps,
>>>>>
>>>>> /Bengt
>>>>>
>>>>>
>>>>>
>>>>> 2012/4/26 Borut Bolčina <[email protected]>
>>>>>
>>>>>> Hello,
>>>>>>
>>>>>> thanks Bengt for your input, I really appreciate you took the time!
>>>>>>
>>>>>> My work on this is somehow sporadic, but now I have managed to get
>>>>>> the Camel route running in Karaf
>>>>>>
>>>>>> from("quartz://weather/currentWeatherSlovenia?cron=0+0/1+*+?+*+*")
>>>>>>  .log("Getting weather from: " + sourceUrl)
>>>>>> .to(sourceUrl)
>>>>>>  .split()
>>>>>> .tokenizeXML("metData")
>>>>>>  .unmarshal(jaxbDataFormat)
>>>>>>
>>>>>> .to("jpa:com.mycompany.weather.entities.WeatherCurrent?persistenceUnit=weather");
>>>>>>
>>>>>> with the exception of saving the data to the database which fails
>>>>>> with:
>>>>>>
>>>>>> Caused by: <openjpa-2.2.0-r422266:1244990 fatal user error>
>>>>>> org.apache.openjpa.persistence.ArgumentException: A JDBC Driver or
>>>>>> DataSource class name must be specified in
>>>>>> the ConnectionDriverName property. Available properties in
>>>>>> configuration are
>>>>>> "org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl@442ce698".
>>>>>>         at
>>>>>> org.apache.openjpa.jdbc.schema.DataSourceFactory.newDataSource(DataSourceFactory.java:72)[125:org.apache.openjpa:2.2.0]
>>>>>>         at
>>>>>> org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.createConnectionFactory(JDBCConfigurationImpl.java:844)[125:org.apache.openjpa:2.2.0]
>>>>>>         at
>>>>>> org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:602)[125:org.apache.openjpa:2.2.0]
>>>>>>         at
>>>>>> org.apache.openjpa.jdbc.meta.MappingRepository.endConfiguration(MappingRepository.java:1510)[125:org.apache.openjpa:2.2.0]
>>>>>>         at
>>>>>> org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:518)[125:org.apache.openjpa:2.2.0]
>>>>>> ....
>>>>>>
>>>>>> My datasource bundle is deployed in OSGi (later the username and
>>>>>> password will be configurable, that is - outside of the bundle)
>>>>>>
>>>>>> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";>
>>>>>>
>>>>>>  <bean id="weatherDataSource"
>>>>>> class="com.mysql.jdbc.jdbc2.optional.MysqlDataSource">
>>>>>> <property name="url"
>>>>>>  value="jdbc:mysql://
>>>>>> dev.mycompany.com:3306/weather?useUnicode=yes&amp;characterEncoding=UTF-8<http://dev.mycompany.com:3306/weather?useUnicode=yes&characterEncoding=UTF-8>"
>>>>>> />
>>>>>>  <property name="user" value="myUsername" />
>>>>>> <property name="password" value="myPassword" />
>>>>>>  </bean>
>>>>>>
>>>>>> <service interface="javax.sql.DataSource" ref="weatherDataSource">
>>>>>>  <service-properties>
>>>>>> <entry key="osgi.jndi.service.name" value="jdbc/mysqlds" />
>>>>>>  </service-properties>
>>>>>> </service>
>>>>>>  </blueprint>
>>>>>>
>>>>>> which is used by my model bundle's persistence.xml
>>>>>>
>>>>>> <persistence version="1.0" xmlns="
>>>>>> http://java.sun.com/xml/ns/persistence"; xmlns:xsi="
>>>>>> http://www.w3.org/2001/XMLSchema-instance";
>>>>>>  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
>>>>>> http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd";>
>>>>>>   <persistence-unit name="weather" transaction-type="JTA">
>>>>>>
>>>>>> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
>>>>>> <jta-data-source>osgi:service/javax.sql.DataSource/(
>>>>>> osgi.jndi.service.name=jdbc/mysqlds)</jta-data-source>
>>>>>>  <class>my.company.weather.entities.WeatherCurrent</class>
>>>>>> <exclude-unlisted-classes>true</exclude-unlisted-classes>
>>>>>>  </persistence-unit>
>>>>>> </persistence>
>>>>>>
>>>>>> I think the problem is that my model bundle is not seeing the
>>>>>> datasource service. How do I confirm that or how should my model's
>>>>>>  MANIFEST look like?
>>>>>>
>>>>>> Cheers,
>>>>>> borut
>>>>>>
>>>>>>
>>>>>> Dne 19. april 2012 20:35 je Bengt Rodehav <[email protected]>napisal/-a:
>>>>>>
>>>>>> A few years back Hibernate was my choice. The past two years I have
>>>>>>> moved to OpenJPA. The main reason is that OpenJPA works much better with
>>>>>>> OSGi. I did try EclipseLink as well but had OSGi problems. This was a 
>>>>>>> while
>>>>>>> back and has probably been improved by now.
>>>>>>>
>>>>>>> Another reason why I prefer OpenJPA to Hibernate is that the Apache
>>>>>>> community is so much better - much more open. I'm sure this is a matter 
>>>>>>> of
>>>>>>> taste but I would not go for Hibernate.
>>>>>>>
>>>>>>> That said, OpenJPA also has some classloading issues under OSGi. In
>>>>>>> normal situations it works though. A final compelling reason to use 
>>>>>>> OpenJPA
>>>>>>> is that it is much more common choice when using Apache Karaf (I think).
>>>>>>> It's normally easier to use different Apache projects together since
>>>>>>> someone else has always done it before.
>>>>>>>
>>>>>>> What I don't like is the way JPA uses the persistence.xml. I tend to
>>>>>>> go with the approach Christian recommended - to put the datasource in a
>>>>>>> separate bundle. It can then easily be switched. In practice, though, 
>>>>>>> it's
>>>>>>> hard to actually change database type (not just url) without having to
>>>>>>> affect the application.
>>>>>>>
>>>>>>> First, the JPA implementation is configured in persistence.xml. E g
>>>>>>> that's where you specify database dialect for OpenJPA. Ideally this 
>>>>>>> would
>>>>>>> be separated from the persistence.xml and possible to configure (e g 
>>>>>>> with
>>>>>>> OSGi's config admin).
>>>>>>>
>>>>>>> Second, at least when using JPA annotations (which I do), your
>>>>>>> source code becomes tailored for a certain database type. I often 
>>>>>>> startup
>>>>>>> with a simple Derby database for testing and then move  to SQLServer for
>>>>>>> production. In that process I often have to change some annotations to 
>>>>>>> make
>>>>>>> it work in SQLServer.
>>>>>>>
>>>>>>> Overall I'm quite content with the OpenJPA+Aries+Karaf combo though.
>>>>>>> I just wish that Aries could get their release process straightened out
>>>>>>> soon.
>>>>>>>
>>>>>>> /Bengt
>>>>>>>
>>>>>>>
>>>>>>> 2012/4/19 Borut Bolcina <[email protected]>
>>>>>>>
>>>>>>>> On 19. apr. 2012, at 16:11, Christian Schneider <
>>>>>>>> [email protected]> wrote:
>>>>>>>>
>>>>>>>> > I guess the suggested way is to not run hibernate :-) For me the
>>>>>>>> fact that they do not create bundles says that jboss does not care 
>>>>>>>> about
>>>>>>>> OSGi in hibernate. As they now have an OSGi server with JBoss 7 that 
>>>>>>>> may
>>>>>>>> change soon though.
>>>>>>>>
>>>>>>>> I just looked at JBoss website and their support is not even in
>>>>>>>> dipers. See https://issues.jboss.org/browse/JBOSGI-260.
>>>>>>>>
>>>>>>>> > I had some good experience with apache openjpa together with
>>>>>>>> apache aries jpa. Together they solve the classloading problem where 
>>>>>>>> the
>>>>>>>> jpa provider can not see the user classes. I have not built bigger
>>>>>>>> applications with it though.
>>>>>>>>
>>>>>>>> I will try with OpenJPA, but would really like to hear other
>>>>>>>> people's hibernate stories!
>>>>>>>>
>>>>>>>> >
>>>>>>>> > There is also Eclipselink. With their affiliation to Eclipse they
>>>>>>>> will surely have an eye on OSGi compatibility. The problem there was 
>>>>>>>> that
>>>>>>>> they did not put their jas into the maven central repo.
>>>>>>>> >
>>>>>>>> > So all in all I am not sure what to recommend. Perhaps others
>>>>>>>> already have experience with some jpa solution in bigger projects?
>>>>>>>>
>>>>>>>> Please share some stories to make my decision easier.
>>>>>>>>
>>>>>>>> Borut
>>>>>>>>
>>>>>>>> >
>>>>>>>> > Christian
>>>>>>>> >
>>>>>>>> > Am 19.04.2012 15:56, schrieb Borut Bolčina:
>>>>>>>> >> Thanks Christian,
>>>>>>>> >>
>>>>>>>> >> I understand now what you were suggesting. The database type
>>>>>>>> (vendor) will be the same in all environments (mysql), but with 
>>>>>>>> different
>>>>>>>> addresses, engine types, usernames and passwords, which brings another
>>>>>>>> topic up - configuration (I will probably ask this in days to come).
>>>>>>>> >>
>>>>>>>> >> I will be separating datasources, it is just the case that I
>>>>>>>> want a working solution and then smooth it out.
>>>>>>>> >>
>>>>>>>> >> For a begginer it is very hard to get a hibernate mysql combo to
>>>>>>>> work (mine still does not). There are examples for persistence, but I 
>>>>>>>> had
>>>>>>>> to read a lot until I found that Hibernate does not even has bundles,
>>>>>>>> therefore tricks has to be performed.
>>>>>>>> >>
>>>>>>>> >> Is there "an official Karaf Hibernate Feature"? If not, what is
>>>>>>>> the suggested way to run Hibernate in Karaf? I am planning to use 
>>>>>>>> Hibernate
>>>>>>>> Search, Solr and Lucene by using Camel components, so I have lots of 
>>>>>>>> ground
>>>>>>>> to cover.
>>>>>>>> >>
>>>>>>>> >> Cheers,
>>>>>>>> >> borut
>>>>>>>> >>
>>>>>>>> >
>>>>>>>> > --
>>>>>>>> > Christian Schneider
>>>>>>>> > http://www.liquid-reality.de
>>>>>>>> >
>>>>>>>> > Open Source Architect
>>>>>>>> > Talend Application Integration Division http://www.talend.com
>>>>>>>> >
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

Reply via email to