ich eine Datenquelle Funktion haben, die eine Datenquelle als OSGi Service exportiert:Karaf verfügen installieren Anforderung osgi.service fehlt aber es ist da
> services -p 2038
OPS4J Pax JDBC Config (2038) provides:
--------------------------------------
objectClass = [org.osgi.service.cm.ManagedServiceFactory]
service.bundleid = 2038
service.id = 211
service.pid = org.ops4j.datasource
service.scope = singleton
----
databaseName = foobar
dataSourceName = fooDatasource
felix.fileinstall.filename = file:/home/foousr/apache-karaf-4.0.6/etc/org.ops4j.datasource-foo.cfg
objectClass = [javax.sql.DataSource]
osgi.jndi.service.name = fooDatasource
service.bundleid = 2038
service.factoryPid = org.ops4j.datasource
service.id = 251
service.pid = org.ops4j.datasource.b3020619-71b9-4876-94c3-477f3e4a503d
service.scope = singleton
url = jdbc:oracle:thin:@dbserver:99999/foo
user = FOOUSR
Im Rahmen der ds-Funktion, die diese Datenquelle-Dienst erstellt und registriert es enthält auch einen Ping-ds-Bundle, das ich die Datenquelle testen kann:
> jdbc:ping-ds fooDatasource
Ping from localhost(127.0.0.1) as FOOUSR to schema FOOUSR on dbserver/foo
ich habe einen Plan Bündel, das verwendet diese Datenquelle:
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camel="http://camel.apache.org/schema/blueprint"
xsi:schemaLocation="
http://www.osgi.org/xmlns/blueprint/v1.0.0
http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
http://camel.apache.org/schema/blueprint
http://camel.apache.org/schema/blueprint/camel-blueprint.xsd
http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0
http://svn.apache.org/repos/asf/aries/trunk/blueprint/blueprint-cm/src/main/resources/org/apache/aries/blueprint/compendium/cm/blueprint-cm-1.1.0.xsd">
<reference id="ds" interface="javax.sql.DataSource" filter="(dataSourceName=fooDatasource)"/>
<camelContext id="fooDatasourceTestContext" trace="true" xmlns="http://camel.apache.org/schema/blueprint">
<route id="fooDatasourceTest">
<from uri="timer:/fooDatasourceTest?fixedRate=true&repeatCount=1"/>
<setBody>
<simple>
select * from FOOUSR.FOOTABLE
</simple>
</setBody>
<to uri="jdbc:ds" />
<to uri="log:fooDatasourceTest?showBody=true"/>
</route>
</camelContext>
</blueprint>
Wenn ich eine feature:install foo-datasource-test-feature
mache, erhalte ich einen Fehler, den Datenquellenservice nicht finden zu können - aber sein dort und ich kann es gerade gut mit meinem ping-ds cmd erreichen.
Error executing command: Unable to resolve root: missing requirement [root] osgi.identity;
osgi.identity=foo-datasource-test-feature; type=karaf.feature; version="[0.0.1.SNAPSHOT,0.0.1.SNAPSHOT]";
filter:="(&(osgi.identity=foo-datasource-test-feature)(type=karaf.feature)(version>=0.0.1.SNAPSHOT)(version<=0.0.1.SNAPSHOT))"
[caused by: Unable to resolve foo-datasource-test-feature/0.0.1.SNAPSHOT: missing requirement
[foo-datasource-test-feature/0.0.1.SNAPSHOT] osgi.identity; osgi.identity=com.company.project.foo-datasource-test;
type=osgi.bundle; version="[0.0.1.SNAPSHOT,0.0.1.SNAPSHOT]"; resolution:=mandatory [caused by: Unable to resolve
com.company.project.foo-datasource-test/0.0.1.SNAPSHOT: missing requirement
[com.company.project.foo-datasource-test/0.0.1.SNAPSHOT] osgi.service; effective:=active;
filter:="(&(objectClass=javax.sql.DataSource)(dataSourceName=fooDatasource))"]]
Es scheint, beschweren sich, dass es nicht die OSGi-Service der Datenquelle finden, das installiert wird:
osgi.service; effective:=active;
filter:="(&(objectClass=javax.sql.DataSource)(dataSourceName=fooDatasource))"]]
Was seltsam ist, neben der Tatsache, dass der Ping-ds Kommando I funktioniert gut geschrieben, Ist das, wenn ich gerade das Testbündel installiere, das in der Funktion ist, über die es klagt, es funktioniert gut. Dies bedeutet, dass dies ein Problem mit dem Feature ist: Installationsprozess selbst.
In der foo-Datenquelle-Test-Funktion Funktion, schließe ich eine foo-Core-Funktion, die die ds-Funktion verweist:
foo-Datenquelle-Test-feature.xml:
<?xml version="1.0" encoding="utf-8"?>
<features name="foo-datasource-test" xmlns="http://karaf.apache.org/xmlns/features/v1.4.0">
<feature name="foo-datasource-test-feature" version="${project.version}">
<feature>foo-core-feature</feature>
<bundle>mvn:com.company.project/foo-datasource-test/${project.version}</bundle>
</feature>
</features
foo-Core-feature.xml:
<?xml version="1.0" encoding="utf-8"?>
<features name="foo-core" xmlns="http://karaf.apache.org/xmlns/features/v1.4.0">
<feature name="foo-core-feature" version="${project.version}">
<feature>ds-feature</feature>
...
</feature>
</features>
ds-Features.xml:
<?xml version="1.0" encoding="UTF-8"?>
<features name="ds-features" xmlns="http://karaf.apache.org/xmlns/features/v1.0.0">
<feature name="ds-feature" version="${project.version}" >
<feature>pax-jdbc-config</feature>
...
<bundle start-level="86">mvn:com.company.commons/foo-datasource/${project.version}</bundle>
</feature>
<feature name="ds-ping-datasource" version="${project.version}" >
<bundle start-level="80">mvn:com.company.commons/foo-ping-datasource/${project.version}</bundle>
<feature>pax-jdbc-config</feature>
</feature>
</features>
Würde dies ein Problem verursachen? Wenn ja, da die foo-Datenquelle-Test-Funktion von dem Datenquellen-Service abhängt, der bereits installiert wird, wie würde dann diese Abhängigkeit in meinen Funktionen beschrieben?
Verwendung:
Karaf Version 4.0.6
Camel-Version 2.16.5
UPDATE
bemerkte ich aus dem Hinweis auf die Funktion Kern, so dass nur das Bündel in die war Test-Funktion und es klagt immer noch. Das hat also nichts mit der Eigenschaft zu tun, Abhängigkeiten aufzuweisen.
Ich werde Karaf Version 4.1.0 versuchen.
UPDATE
Keine Freude am 4.1.0. Als Randnotiz hatte noch mehr Probleme, da ActiveMQ-Client 5.14.4 noch nicht gebaut ist.
activemq-Client-Fix wurde für 5.14.4 heute gebaut (https://repository.apache.org/content/repositories/releases/org/apache/activemq/activemq-client/5.14.4/), also wechselte ich zurück zur Verwendung von Karaf 4.1.0 und verwende die folgenden Versionen: activemq.version = 5.14.4 camel.version = 2.18.2 spring.version = 4.3.5.RELEASE – bmcdonald
Ich habe gerade das gleiche Problem, nur mit Require-Capability-Header, der automatisch in Paketen mit Persistenzeinheit generiert wird. Interessanterweise funktionierte es bereits und dann "plötzlich" gestoppt. Leider gibt es in Karaf viele Dinge, die schrecklich geschrieben sind. –