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&amp;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" 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&amp;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
=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]>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:borut.bolcina@gmail.**com <[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]
> http://blog.nanthrax.net
> Talend - http://www.talend.com
>

Reply via email to