java - 如何使用 Websphere Liberty Profile 8.5 中定义的数据源?

标签 java spring datasource jndi websphere-liberty

我正在使用 WebSphere 8.5.5 Liberty 配置文件来部署一个应用程序,该应用程序使用通过 jndi 定义和公开的数据源。但我无法使用我的应用程序中的数据源。我的 server.xml 如下所示:

<server description="new server">

    <!-- Enable features -->
    <featureManager>
        <feature>jsp-2.2</feature>
        <feature>jndi-1.0</feature>
        <feature>ejbLite-3.1</feature>
        <feature>jdbc-4.0</feature>
    </featureManager>

    <dataSource id="mssqlserver" jndiName="jdbc/sqlserver_prod" type="javax.sql.DataSource">
        <jdbcDriver libraryRef="MSJDBCLib"/>
        <connectionManager numConnectionsPerThreadLocal="10" id="ConnectionManager" minPoolSize="1"/>
        <properties.microsoft.sqlserver username="sa" password="" databaseName="PROD"
                                    serverName="10.211.55.4" portNumber="1433"/>
    </dataSource>

    <library id="MSJDBCLib">
        <fileset dir="/Users/alter/Devel/sqlserver" includes="sqljdbc4.jar"/>
    </library>

    <httpEndpoint id="defaultHttpEndpoint"
                  host="0.0.0.0"
                  httpPort="9080"
                  httpsPort="9443" />
    <application id="ee1" location="/Users/alter/Devel/xxxx/src/ear/target/ee1-ear.ear" name="ear_ear_exploded" type="ear" >
        <classloader delegation="parentLast" commonLibraryRef="MSJDBCLib" />
    </application>

    <application id="ee1-web" location="/Users/alter/Devel/xxxx/src/web/target/ee1-web" name="web_exploded" type="war" />
</server>

我使用这个 spring 配置文件来注入(inject)数据源:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


    <!-- START CONFIG DS -->

    <bean id="dataSourcePROD" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="jdbc/sqlserver_prod"/>
    </bean>

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSourcePROD"/>
        <property name="mapperLocations" value="classpath*:mappers/**/*.xml"/>
    </bean>

    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>

    <bean id="genericMapper" class="org.mybatis.spring.mapper.MapperFactoryBean" abstract="true">
        <property name="sqlSessionTemplate" ref="sqlSessionTemplate"/>
        <property name="addToConfig" value="true"/>
    </bean>
</beans>

Spring 能够从 JNDI 找到我的“数据源”对象,但它无法将传递的对象转换为 javax.sql.Datasource。 实际的异常是:

org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'com.ibm.ws.jdbc.DataSourceService' to required type 'javax.sql.DataSource' for property 'dataSource';

注1:我没有引用可部署工件(ear、wars 等...)中的 jdbc 驱动程序

我在 server.xml 中缺少数据源定义的一些配置参数??。

最佳答案

您可能想看看 Spring 帮助器类 WebSphereDataSourceAdapter。 IBM 擅长在服务中“包装”服务,但需要稍微“展开”才能使用。

看看this在 Spring API 文档中作为可能的尝试提示

关于java - 如何使用 Websphere Liberty Profile 8.5 中定义的数据源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17955485/

相关文章:

java - 如何将(Android)应用程序上下文传递给 Java 类?

sql - 在 Grails 2.3.x 中执行原始 SQL 查询时如何指定备用数据源?

spring - 如何从Spring Data REST产生的表示中删除超媒体元素?

java - LambdaMessageProcessor 无法识别 ConversionService 的负载类型

jakarta-ee - 如何高效地实现连接池?

java - Spring Boot JPA 设置自定义数据源

java - 错误类型不兼容 : Comparable<T> cannot be converted to T

java - 如何获取用户输入(来自扫描仪)并将整个输入转换为 ascii

java - findViewById() 可能会产生 NullPointerException

java - Spring Boot应用程序无法启动可能是由于依赖关系