Just realized that when looking at the log messages that you sent, there
was one warning and a lot of traces but no error. What exactly does not
work for your right now? Do you get an exception or error log?

/Bengt

2012/4/27 Bengt Rodehav <[email protected]>

> 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