2016-07-26 37 views
0

Ich versuche eine Kamelroute mit einer SQL Server-Datenbank als Endpunkt zu erstellen. Ich habe verstanden, dass die gängige Methode zur Integration von Datenquellen in OSGi darin besteht, sie als OSGi-Dienste zu exportieren.Export sqljdbc4 als OSGi-Dienst

Für Test- und Entwicklungszwecke habe ich eine H2 In-Memory-Datenbank verwendet und erfolgreich als Dienst exportiert. Als ich versuchte, dasselbe mit SQL Server zu tun, stieß ich jedoch auf einige Probleme.

ich die SQL Server JDBC-Treiber heruntergeladen und die .jar zu meiner lokalen Maven-Repository als solche hinzugefügt:

$ mvn install:install-file -Dpath=<path-to-jar> 
    -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.0.2206 
    -Dpackaging=jar 

Ich ging zu wickeln die .jar in einem OSGi-Bündel dann durch einen pom.xml Schaffung so wie:

<?xml version="1.0" encoding="utf-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.microsoft</groupId> 
    <artifactId>sqljdbc4-osgi-bundle</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <name>SQL Server JDBC Driver</name> 
    <packaging>bundle</packaging> 
    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.felix</groupId> 
       <artifactId>maven-bundle-plugin</artifactId> 
       <version>2.3.7</version> 
       <extensions>true</extensions> 
       <configuration> 
        <instructions> 
         <Embed-Dependency>*</Embed-Dependency> 
         <_exportcontents> 
          com.microsoft.sqlserver.jdbc.* 
          , microsoft.sql.* 
         </_exportcontents> 
        </instructions> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
    <dependencies> 
     <dependency> 
      <groupId>com.microsoft.sqlserver</groupId> 
      <artifactId>sqljdbc4</artifactId> 
      <version>4.0.2206</version> 
     </dependency> 
    </dependencies> 
</project> 

ich in der Lage war, um erfolgreich das Bündel in Karaf zu installieren, damit dann ging ich weiter meinen Dienst Plan zu erstellen:

Nun, wenn ich den Blueprint nach/deploy nichts passiert passiert, wird kein Bündel installiert und nichts im Protokoll. Wenn ich dasselbe für die H2-Datenquelle gemacht habe, wurde ein Bündel installiert.

Ich verwende JBoss Fuse 6.2.1, Kamel-Version 2.15.1 und 2.4.0 Karaf

würde ich sehr dankbar über jede Hilfe zu diesem Thema.

+0

Sehen Sie die Blueprint.xml als Bündel in Karaf? –

+0

@ChristianSchneider, Für die H2 Datenquelle, ja, aber nicht der SQL Server. Ich denke, ich hätte es vermasselt, den Treiber korrekt zu verpacken, aber ich bin mir nicht sicher. – noMad17

+0

Versuchen Sie, den ursprünglichen Treiber mit dem Umbruch zu installieren: mvn: protocol –

Antwort

1

Nachdem ich es zur Arbeit gebracht habe, schlage ich vor, dass Sie sich pax-jdbc ansehen.

https://ops4j1.jira.com/wiki/display/PAXJDBC/Create+DataSource+from+config https://ops4j1.jira.com/wiki/display/PAXJDBC/Pooling+and+XA+support+for+DataSourceFactory

Es nutzt die DataSourceFactory von den OSGi-Spezifikationen Datenbanken in einer universellen Weise zuzugreifen. Es gibt auch eine Karaf-Funktion zum Anpassen von mssql namens pax-jdbc-mssql.

Grundsätzlich erlaubt es, eine DataSource für mssql mit nur einer Konfigurationsdatei zu erstellen. Sie müssen dafür keinen Blueprint erstellen.