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