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&amp;characterEncoding=UTF-8
<http://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 <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&amp;characterEncoding=UTF-8
<http://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
<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

Reply via email to