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