如何解决“WebSphere API类不可用”?

时间:2016-03-09 20:45:54

标签: java eclipse spring datasource websphere-liberty

我安装了带有WAS Liberty的Eclipse Mars,并在运行时尝试设置数据源。这是我得到的错误:

“无法初始化WebSphereDataSourceAdapter,因为WebSphere API类不可用:java.lang.ClassNotFoundException:com.ibm.websphere.rsadapter.WSDataSource”

我在我的server.xml中有这个

<featureManager>
    <feature>javaee-7.0</feature>
    <feature>localConnector-1.0</feature>
    <feature>jdbc-4.1</feature>
    <feature>webProfile-7.0</feature>
</featureManager>

其他SO引用了一个瘦客户端jar文件,但我的wasruntime / lib目录中没有,也没有任何346个jar文件。还有其他想法吗?

这是我的春季宣言。

 <bean id="myDataSource" class="org.springframework.jdbc.datasource.WebSphereDataSourceAdapter">
   <property name="targetDataSource">
     <bean class="org.springframework.jndi.JndiObjectFactoryBean">
       <property name="jndiName" value="jdbc/db2"/>
     </bean>
   </property>
 </bean>

1 个答案:

答案 0 :(得分:3)

WebSphere Liberty中不存在类com.ibm.websphere.rsadapter.WSDataSource。它确实存在于传统WebSphere中,这可能是混乱的来源。

如果您可以控制指定类名,则只需将其更新为正确的名称即可。

如果你无法控制它,这听起来像是Spring Framework的一个bug。在此期间,您可以通过将javax.sql.DataSource指定为proxyInterface属性的值来解决此问题。

将您的弹簧声明更改为以下内容:

<bean id="myDatasource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="jdbc/db2"/>
    <property name="proxyInterface"  value="javax.sql.DataSource" />
</bean>

(注意:我还消除了1层不必要的嵌套配置)

次要旁注:
您发布的功能列表中包含一些额外的内容。 jdbc-4.1webProfile-7.0功能已包含在整体javaee-7.0功能中,因此您只需将功能管理器更改为:

<featureManager>
    <feature>javaee-7.0</feature>
    <feature>localConnector-1.0</feature>
</featureManager>