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&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 >>>>>>>>> > >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> >
