首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将sqljdbc4导出为OSGi服务

将sqljdbc4导出为OSGi服务
EN

Stack Overflow用户
提问于 2016-07-26 21:33:35
回答 1查看 924关注 0票数 0

我正在尝试使用sqlserver-database作为端点来创建一个camel路由。我逐渐了解到,在OSGi中集成数据源的常见方法是将它们导出为OSGi服务。

出于测试和开发的目的,我使用了一个H2内存数据库,并成功地将其导出为服务。然而,当我尝试用SQL Server做同样的事情时,我遇到了一些问题。

我下载了SQL Server JDBC驱动程序,并将.jar添加到本地Maven存储库:

代码语言:javascript
复制
$ mvn install:install-file -Dpath=<path-to-jar> 
    -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.0.2206
    -Dpackaging=jar

然后,我通过创建如下所示的pom.xml,将.jar包装在一个osgi-bundle中:

代码语言:javascript
复制
<?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>

我能够成功地在Karaf中安装该包,因此我继续创建我的服务蓝图:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/1.0.0">
    <bean id="dataSource" class="com.microsoft.sqlserver.jdbc.SQLServerDataSource">
        <property name="URL" value=<db-connectionString> />
        <property name="user" value=<username> />
        <property name="password" value=<pw> />
    </bean>
    <service id="dataSourceService" ref="dataSource" interface="javax.sql.DataSource">
        <service-properties>
            <entry key="osgi.jndi.service.name" value="jdbc/myDb" />
        </service-properties>
    </service>
</blueprint>

现在,当我将蓝图复制到/deploy时,没有发生任何事情,没有安装任何包,日志中也没有任何内容。当我对H2数据源执行同样的操作时,安装了一个包。

我使用的是JBoss Fuse6.2.1、camel-版本2.15.1和Karaf2.4.0

我将非常感谢在这件事上的任何帮助。

EN

回答 1

Stack Overflow用户

发布于 2016-07-27 15:47:08

在让它正常工作之后,我建议您看一看pax-jdbc。

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

它使用OSGi规范中的DataSourceFactory以通用的方式访问数据库。还有一个用于适应mssql的karaf特性,称为pax-jdbc-mssql。

基本上,它只允许使用一个配置文件为mssql创建一个DataSource。您不必为其创建蓝图。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38591361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档