Matteo,

If you add MySQL connector into the OSGi bundle as a bundle classpath, you should not define it in the Import-Package definition.

The Import-Package definition takes the lead on the bundle classpath. So Felix OSGi framework tries to resolve com.mysql.jdbc.* bundle first (and so ignore the bundle classpath).

Could you try to remove com.mysql.jdbc from your Import-Package definition ?

Regards
JB

Matteo Redaelli wrote:
Many thanks for your usefull suggestions. I like very much the possibility to
use maven dependences (as in jbi packaging)

BUT i doesn't work. can you do it starting from my zip sample?

I changed my pom.xml adding (initially only one and finally all your
suggestions)
                <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.0.8</version>
                </dependency>
                ...
                    <instructions>
<Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
                        <Bundle-ClassPath>
                            .,{maven-dependencies}
                        </Bundle-ClassPath>
<Include-Resource>{maven-resources}</Include-Resource> <Embed-Dependency>mysql-connector-java:scope=runtime|compile</Embed-Dependency> <Import-Package>
                            javax.jws,
                            javax.wsdl,
                            javax.xml.bind,
                            javax.xml.bind.annotation,
                                        javax.xml.namespace,
                                        javax.xml.ws,
                                        META-INF.cxf,
                            META-INF.cxf.osgi,
                            org.apache.cxf.bus,
                            org.apache.cxf.bus.spring,
                            org.apache.cxf.bus.resource,
                            org.apache.cxf.configuration.spring,
                            org.apache.cxf.resource,
                            org.apache.cxf.jaxws,
                            org.apache.servicemix.cxf.transport.http_osgi,
                            org.springframework.beans.factory.config,
                            org.springframework.jdbc.datasource,
                            com.mysql.jdbc, *

then
  mvn clean install

But I get
 | Deploying:
/usr/local/apache-servicemix-4.0.0/deploy/test-wsdl-first-osgi-1.0-SNAPSHOT.jar
10:39:46,788 | WARN  | Timer-1          | FileMonitor                      |
x.kernel.filemonitor.FileMonitor  552 | Failed to start bundle:
test-wsdl-first-osgi [305]. Reason: org.osgi.framework.BundleException:
Unresolved constraint in bundle 305: package; (package=com.mysql.jdbc)
org.osgi.framework.BundleException: Unresolved constraint in bundle 305:
package; (package=com.mysql.jdbc)
        at org.apache.felix.framework.Felix.resolveBundle(Felix.java:3059)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:1439)
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:770)
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:751)
        at
org.apache.servicemix.kernel.filemonitor.FileMonitor.refreshPackagesAndStartOrUpdateBundles(FileMonitor.java:549)
        at
org.apache.servicemix.kernel.filemonitor.FileMonitor.onFilesChanged(FileMonitor.java:299)
        at
org.apache.servicemix.kernel.filemonitor.FileMonitor$1.filesChanged(FileMonitor.java:151)
        at
org.apache.servicemix.kernel.filemonitor.Scanner.reportBulkChanges(Scanner.java:431)
        at
org.apache.servicemix.kernel.filemonitor.Scanner.reportDifferences(Scanner.java:327)
        at 
org.apache.servicemix.kernel.filemonitor.Scanner.scan(Scanner.java:261)
        at 
org.apache.servicemix.kernel.filemonitor.Scanner$1.run(Scanner.java:221)
        at java.util.TimerThread.mainLoop(Timer.java:512)
        at java.util.TimerThread.run(Timer.java:462)


my osgi/list

[ 259] [Active     ] [Started] [   60] Apache ServiceMix CXF Transport for
OSGi (4.0.0)
[ 272] [Active     ] [       ] [   60] mvn:mysql/mysql-connector-java/5.0.8
[ 305] [Installed  ] [       ] [   60] A CXF WSDL First OSGi Project
(1.0.0.SNAPSHOT)

what's wrong?

Jean-Baptiste Onofré wrote:
Hi Matteo,

In your case, you want more to add several dependencies into your OSGi bundle.

Using the felix bnd maven plugin, you can use:
- <Embed-Dependency/> notation. For example, you can use <Embed-Dependency>mysql-connector:scope=runtime|compile</Embed-Dependency> where mysql-connector is the artifactId. - for the <Bundle-Classpath/>, you can use directly the directory path (for example <Bundle-Classpath>.,{maven-dependencies}</Bundle-Classpath> - you can use <Include-Resource/> notation too, like this <Include-Resource>{maven-resources}</Include-Resource>

All is explained here: http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html

Regards
JB

Matteo Redaelli wrote:
Can "Bundle-Classpath" be used to add a folder where I can add the jars I
want to include?
Please can you show me how should I use it?

I tried with <Bundle-ClassPath>
                            .,/home/matteo/tmp/test-wsdl-first-osgi/lib,
                        </Bundle-ClassPath>

and in /home/matteo/tmp/test-wsdl-first-osgi/lib
I have
  mysql-connector-java-5.0.8.jar

but I get

[WARNING] Warning building bundle
com.yourcompany:test-wsdl-first-osgi:bundle:1.0-SNAPSHOT : No sub JAR or
directory /home/matteo/tmp/test-wsdl-first-osgi/lib
[WARNING] Warning building bundle
com.yourcompany:test-wsdl-first-osgi:bundle:1.0-SNAPSHOT : Bundle uses
Require Bundle, this can generate false errors because then not enough
information is available without the required bundles
[ERROR] Error building bundle
com.yourcompany:test-wsdl-first-osgi:bundle:1.0-SNAPSHOT : Cannot find a
file or directory for Bundle-Classpath entry:
/home/matteo/tmp/test-wsdl-first-osgi/lib

Regards
Matteo


Jean-Baptiste Onofré wrote:
Matteo,

another solution is to add required dependencies into the OSGi bundle
using:
Bundle-Classpath:
notation.

Regards
JB

Freeman Fang wrote:
Hi Matteo,
Which smx4 version are you using?
I tried with both Apache Servicemix 4.0 release and FUSE ESB 4.1
release with
osgi/install wrap:mvn:mysql/mysql-connector-java/5.0.8
But bundle status is
[ 158] [Resolved ] [ ] [ 60] wrap_mvn_mysql_mysql-connector-java_5.0.8 (0) which means it's not started, but from your mail, you mention your bundle can start like
[ 272] [Active ] [ ] [ 60] mvn:mysql/mysql-connector-java/5.0.8
I'm wondering how it could be.
You can use wrap your normal jar as osgi bundle, but you will have to have all dependent packages available as bundles in the container already, I don't think all mysql needed package already available as bundles.
Could you please tell me exactly your process?
Freeman

Matteo Redaelli wrote:
I use linux debian. In any case. here is my project in zip file

http://www.nabble.com/file/p23827756/test-wsdl-first-osgi.zip
test-wsdl-first-osgi.zip
Regards
Matteo



Freeman Fang wrote:
Hi,
Somehow I can't extract the test-wsdl-first-osgi.tgz you append on my linux box. I guess you are using Mac, right? Would you please append your testcase as zip file?
Freeman

Matteo Redaelli wrote:
Ciao

Thanks for you suggestions: I'll look deeply at the links you
suggested

But in any case I'd like to know howto create a service with
servicemix-osgi-cxf-wsdl-first-archetype that can get/put data in a
database.

what is wrong/missing in my package/smx4?

Thanks in advance
Matteo


Freeman Fang wrote:
Hi,
If you want to port cxf-wsdl-first(bc + se) example to osgi bundle in smx4, then you shouldn't use servicemix-osgi-cxf-wsdl-first-archetype, since this archetype generate cxf endpoint deployed in smx4 using osgi http service transport directly, which means in this case there's no cxf bc + se get involved at all, it's a cxf endpoint deployed in smx4 which can talk directly to outside client. To port smx3 cxf-wsdl-first example to osgi bundle in smx4, what you need do is change the JBI package style(SA+SU) to spring dm enabled osgi bundle package style, Gert already add a wiki[1] to demostrate how to do it with servicemix-bean endpoint, and I'm going to add an example for cxf-wsdl-frist using spring dm osgi bundle package very soon, [2] track this issue

[1]http://cwiki.apache.org/confluence/display/SMX4/Creating+an+OSGi+bundle+for+deploying+JBI+endpoints
[2]https://issues.apache.org/activemq/browse/SMX4-292

Freeman

Matteo Redaelli wrote
Hello

In smx4 I'm tring to convert the JBI example cxf-wsdl-first-jdbc
(http://matteoredaelli.wordpress.com/2009/05/30/connecting-to-a-database-with-a-webservice-cxf-deployed-jbi-in-servicemix/)
with a similar OSGI project.

I created a project using

 mvn archetype:create \
    -DarchetypeGroupId=org.apache.servicemix.tooling \
-DarchetypeArtifactId=servicemix-osgi-cxf-wsdl-first-archetype \
    -DarchetypeVersion=2008.01-SNAPSHOT \
    -DgroupId=com.yourcompany \
    -DartifactId=test-wsdl-first-osgi \
    -Dversion=1.0-SNAPSHOT \

-DremoteRepositories=http://people.apache.org/repo/m2-snapshot-repository/

Than I added osgi wraps for spring-jdnc and mysql with

osgi/install  wrap mvn:org.springframework/spring-jdbc/2.5.6
osgi/install  wrap mvn:mysql/mysql-connector-java/5.0.8

[ 181] [Active     ] [       ] [   60] Spring JDBC (2.5.6)
[ 272] [Active     ] [       ] [   60]
mvn:mysql/mysql-connector-java/5.0.8

MY changes in pom.xml are:

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.0.8</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>2.5.6</version>
        </dependency>
                ...
                 <Import-Package>
                            ...
                            org.springframework.jdbc.datasource,
                            com.mysql.jdbc, *
                  </Import-Package>
                  ...
                  <DynamicImport-Package>*</DynamicImport-Package>

MY beans.xml
         ...
<bean id="moodleDB" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/moodle" /> <property name="username" value="root" /> <property name="password" value="" /> </bean> ...


Questions:

1) how can load properly mysql jar in smx?

I have the error

s...@root:/> osgi/start 292
ERROR CommandLineExecutionFailed:
org.apache.geronimo.gshell.command.CommandException:
org.osgi.framework.BundleException: Unresolved constraint in
bundle
292:
package; (package=com.mysql.jdbc)

In a camel tutorial I found

    <feature name="jdbc-driver">
        ...
<bundle>mvn:com.mysql.jdbc/com.springsource.com.mysql.jdbc/5.1.6</bundle>
    </feature>

but osgi/install  wrap
mvn:com.mysql.jdbc/com.springsource.com.mysql.jdbc/5.1.6 doesn't
work


2) the file beans.xml generated by maven archetype is quite
different
from
the one of cxf-wsdl-first. where/how can I add the "property
datasource"
?

I see

    <jaxws:endpoint id="HTTPEndpoint"
implementor="org.apache.servicemix.samples.wsdl_first.PersonImpl"
        address="/PersonService"
        wsdlLocation="wsdl/person.wsdl"
        endpointName="e:soap"
        serviceName="s:PersonService"
        xmlns:e="http://servicemix.apache.org/samples/wsdl-first";
xmlns:s="http://servicemix.apache.org/samples/wsdl-first"/>

Thanks in advance
Matteo
--
Freeman Fang
------------------------
Open Source SOA: http://fusesource.com



--
Freeman Fang
------------------------
Open Source SOA: http://fusesource.com





Reply via email to