The way that you did work too ;)
I would prefer a better separation (the Camel route should use a service
reference to the datasource).
Regards
JB
On 04/16/2012 03:17 PM, Borut Bolčina wrote:
OK, to make a first step which doesn't involve creating a separate
bundle for datasource, but instead adding a datasource configuration
directly to my Camel route bundle's blueprint.xml:
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
xsi:schemaLocation="
... ">
<cm:property-placeholder persistent-id="WeatherCurrent"
update-strategy="reload">
<cm:default-properties>
<cm:property name="sourceUrl"
value="http://meteo.arso.gov.si/uploads/probase/www/observ/surface/text/sl/observation_si_latest.xml"
/>
<cm:property name="weatherDbConnectionUrl"
value="jdbc:mysql://my.company.com:3306/weather?useUnicode=yes&characterEncoding=UTF-8
<http://my.company.com:3306/weather?useUnicode=yes&characterEncoding=UTF-8>"
/>
<cm:property name="weatherDbUser" value="testUser" />
<cm:property name="weatherDbPassword" value="testPass" />
</cm:default-properties>
</cm:property-placeholder>
<bean id="dataSource" class="com.mysql.jdbc.jdbc2.optional.MysqlDataSource">
<property name="url" value="${weatherDbConnectionUrl}"/>
<property name="user" value="${weatherDbUser}"/>
<property name="password" value="${weatherDbPassword}"/>
</bean>
<service interface="javax.sql.DataSource" ref="dataSource">
<service-properties>
<entry key="osgi.jndi.service.name <http://osgi.jndi.service.name>"
value="jdbc/mysqlds"/>
</service-properties>
</service>
<bean id="weatherCurrentRouteBuilder"
class="com.mycompany.route.weather.WeatherCurrentRouteBuilder"
init-method="refresh">
<property name="sourceUrl" value="${sourceUrl}"></property>
</bean>
<camelContext id="weather-forecast"
xmlns="http://camel.apache.org/schema/blueprint">
<routeBuilder ref="weatherCurrentRouteBuilder" />
</camelContext>
</blueprint>
and the configuration file weather.cfg
sourceUrl=http://meteo.arso.gov.si/uploads/probase/www/observ/surface/text/sl/observation_si_latest.xml
weatherDbConnectionUrl=jdbc:mysql://my.comapny.com:3306/weather?useUnicode=yes&characterEncoding=UTF-8
<http://my.comapny.com:3306/weather?useUnicode=yes&characterEncoding=UTF-8>
weatherDbUser=testUser
weatherDbPassword=testPass
and the persistence.xml
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="1.0">
<persistence-unit name="weather" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name
<http://osgi.jndi.service.name>=jdbc/mysqlds)</jta-data-source>
<class>my.company.model.entities.weather.WeatherCurrent</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
and features bundle which installs configuration and drivers besides my
camel route:
<?xml version="1.0" encoding="UTF-8"?>
<features xmlns="http://karaf.apache.org/xmlns/features/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.0.0
http://karaf.apache.org/xmlns/features/v1.0.0">
<feature name="weather" version="${pom.version}">
<bundle>mvn:mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.stax-api-1.0/1.9.0</bundle>
<bundle>mvn:mvn:mysql/mysql-connector-java/5.1.18</bundle>
<bundle>mvn:my.company/route-weather-current/${pom.version}</bundle>
<configfile
finalname="/etc/weather.cfg">mvn:my.company/features-weather/${pom.version}/cfg</configfile>
</feature>
</features>
Am I heading the right way or am I on the Titanic's route?
Cheers,
borut
Dne 16. april 2012 14:51 je Jean-Baptiste Onofré <[email protected]
<mailto:[email protected]>> napisal/-a:
Username/password/URL could be in <cm:properties/> and so handle in
the "application" config oriented file in etc.
Regards
JB
On 04/16/2012 02:47 PM, Christian Schneider wrote:
I would simply deploy the blueprint xml by hand. Just treat it
like a
config file you would have to add.
This is of course not everyone´s favorite style.
The problem with adding the blueprint to the feature is that it
would
have to be in the maven repo. As the username and password are
in this
file this is not recommended.
So another way to achieve what I did is separate the things that
should
be configured per server or stage from the things that keep the
same like
driver class name. You could use the config admin service in the
blueprint file to move the username / password to a separate
config file.
This would make the whole thing a bit more complex though but
you could
then safely put the blueprint file into a feature.
Christian
2012/4/16 Borut Bolčina <[email protected]
<mailto:[email protected]>
<mailto:borut.bolcina@gmail.__com <mailto:[email protected]>>>
Hello,
my first post here, so bare with me please - newbie on board.
I am trying to deploy my first camel route to Karaf and this
route
must be configurable (html address) and must persist some
data with
jpa component. This route is happily persisting in my test
(outside
osgi container).
Now I am reading
https://github.com/cschneider/__Karaf-Tutorial/blob/master/db/__datasource/datasource-mysql.__xml
<https://github.com/cschneider/Karaf-Tutorial/blob/master/db/datasource/datasource-mysql.xml>
where
it says I should copy the file to Karaf's deploy folder.
And the question: What is the practice of deploying data
sources?
Should I create a features project which includes a
blueprint for my
route's data source?
Let's say my route needs connection to mysql database, so the
feature project would include features.xml
<?xml version="1.0" encoding="UTF-8"?>
<features xmlns="http://karaf.apache.__org/xmlns/features/v1.0.0
<http://karaf.apache.org/xmlns/features/v1.0.0>"
xmlns:xsi="http://www.w3.org/__2001/XMLSchema-instance
<http://www.w3.org/2001/XMLSchema-instance>"
xsi:schemaLocation="http://__karaf.apache.org/xmlns/__features/v1.0.0
<http://karaf.apache.org/xmlns/features/v1.0.0>
http://karaf.apache.org/xmlns/__features/v1.0.0
<http://karaf.apache.org/xmlns/features/v1.0.0>">
<feature name="weather" version="${pom.version}">
<bundle>mvn:mvn:org.apache.__servicemix.specs/org.apache.__servicemix.specs.stax-api-1.0/__1.9.0</bundle>
<bundle>mvn:mvn:mysql/mysql-__connector-java/5.1.18</bundle>
<bundle>mvn:my.company/route-__weather-current/${pom.version}__</bundle>
*<bundle>my datasource blueprint</bundle>*
<configfile
finalname="/etc/weather.cfg">__mvn:my.company/features-__weather/${pom.version}/cfg</__configfile>
</feature>
</features>
I guess then the only command to install my Camel route to Karaf
would then be feature:install and all the dependencies including
datasource and configuration would be installed before. And
how to
package the "my datasource blueprint"?
Or is there some other practice?
Thanks,
borut
--
Jean-Baptiste Onofré
[email protected] <mailto:[email protected]>
http://blog.nanthrax.net
Talend - http://www.talend.com
--
Jean-Baptiste Onofré
[email protected]
http://blog.nanthrax.net
Talend - http://www.talend.com