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@6888b for > 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&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 > > > > > > > > >
