【问题标题】:IBM WAS Liberty Error + missing type com.ibm.ws.rsadapter.jdbc.WSJdbcDataSourceIBM WAS Liberty 错误 + 缺少类型 com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource
【发布时间】:2015-11-19 20:51:22
【问题描述】:

我正在将 glassfish 项目转换为 IBM WAS Liberty,但目前我在使用 jndi (jdbc/dataphile) 访问 Liberty (server.xml) 中配置的连接池时遇到问题。

我不断收到 missing type com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource 错误。

这里有一些更多的细节:

<library id="DB2JCC4Lib">
    <fileset dir="C:/MyApps/db2/jdbc" id="db-fileset" includes="db2jcc4-9.5.jar"/>
</library>

<dataSource id="dataSource" jndiName="jdbc/dataphile" type="javax.sql.DataSource">
    <jdbcDriver libraryRef="DB2JCC4Lib"/>
    <connectionManager minPoolSize="2" numConnectionsPerThreadLocal="10"/>
    <properties.db2.jcc databaseName="DUNDEEPD" id="DataphileProperties" password="username" portNumber="30001" serverName="xxx.xx.xxx.xxx" user="username"/>
</dataSource>

我的堆栈跟踪如下;

[ERROR   ] Context initialization failed 
Caused by: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException: warning can't determine modifiers of missing type com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource
 [Xlint:cantFindType]
    at org.aspectj.weaver.reflect.ReflectionWorld$ExceptionBasedMessageHandler.handleMessage(ReflectionWorld.java:129)
    at org.aspectj.weaver.Lint$Kind.signal(Lint.java:340)
    at org.aspectj.weaver.MissingResolvedTypeWithKnownSignature.raiseCantFindType(MissingResolvedTypeWithKnownSignature.java:232)
    at org.aspectj.weaver.MissingResolvedTypeWithKnownSignature.getModifiers(MissingResolvedTypeWithKnownSignature.java:104)
    at org.aspectj.weaver.ResolvedType.isInterface(ResolvedType.java:876)
    at org.aspectj.weaver.ResolvedType.getHierarchy(ResolvedType.java:355)
    at org.aspectj.weaver.patterns.KindedPointcut.fastMatch(KindedPointcut.java:126)
    at org.aspectj.weaver.internal.tools.PointcutExpressionImpl.couldMatchJoinPointsInType(PointcutExpressionImpl.java:84)
    at org.springframework.aop.aspectj.AspectJExpressionPointcut.matches(AspectJExpressionPointcut.java:238)
    at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:200)
    at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:254)
    at org.springframework.aop.support.AopUtils.findAdvisorsThatCanApply(AopUtils.java:286)
    at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findAdvisorsThatCanApply(AbstractAdvisorAutoProxyCreator.java:117)
    at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:87)
    at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:68)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:359)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:322)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:407)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.postProcessObjectFromFactoryBean(AbstractAutowireCapableBeanFactory.java:1561)
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:162)
    ... 58 more

【问题讨论】:

  • 你为什么需要WSJdbcDataSource,它是内部类,你不应该使用它?在您使用它的地方附加代码片段。
  • 您可以发布您在 server.xml 上启用的堆栈跟踪和功能吗?正如 Gas 所提到的,您是否真的试图以某种方式访问​​WSJdbcDataSource?还是您只是从内部代码中看到的。
  • 请理解,我没有明确使用或调用 WSJdbcDataSource,我只是在 Liberty server.xml 中声明了一个数据连接池。通过仅将我的应用程序部署到 Liberty,部署失败并出现以下异常。
  • 我的堆栈跟踪如下:引起:org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException:警告无法确定缺少类型的修饰符 com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource [ Xlint:cantFindType]
  • @Sergio 这只是异常原因,而不是完整的堆栈跟踪。此外,您需要使用有关部署过程的更多信息来更新您的原始帖子。您提供的信息不足以确定问题。

标签: spring jndi websphere-liberty


【解决方案1】:

我不是这方面的专家,但这里报告了一个类似的问题:

https://developer.ibm.com/answers/questions/9498/datasource-issue-on-liberty-in-spring-hibernate-application.html

解决方案需要将此添加到数据源:

<property name="resourceRef" value="true" />
<property name="expectedType" value="javax.sql.DataSource"/>

【讨论】:

  • 我也读过这篇文章。不幸的是,它要求您将这两行放在您的 bean 数据源 bean 定义(spring)中,但我没有使用 jndi.JndiObjectFactoryBean 声明任何数据源 bean。
  • @Sergio 你应该声明一个使用 jndi.JndiObjectFactoryBean 的数据源 bean 吗?
  • @aguibert 我不需要在我的 Glassfish 项目版本中声明任何使用 JndiObjectFactoryBean 的 bean。所以我不确定现在是否需要移植到 Liberty?
【解决方案2】:

尝试按照以下帖子中的说明创建 META-INF/aop.xml 文件:Why aspect j can't weave show Xlint cantFindType 并排除 com.ibm.ws.rsadapter.jdbc.* 类,或者更好的是,只包含您的应用程序类。

【讨论】:

    【解决方案3】:

    我确实有足够的理论来解释为什么,但这就是我从根本上解决问题的方法:

    最初,在我的 Spring XML 模式配置中,我有以下内容:

    <jee:jndi-lookup id="dataSource" jndi-name="jdbc/mydatasource" />
    

    但我必须将其转换为以下内容:

    <bean id="dataSource"  class="org.springframework.jndi.JndiObjectFactoryBean">
          <property name="jndiName" value="jdbc/mydatasource" />
          <property name="lookupOnStartup" value="false"/>
          <property name="cache" value="true" />
          <property name="proxyInterface"  value="javax.sql.DataSource" />
    </bean>
    

    所以基本上按照建议,我必须强制执行添加以下属性的配置更改:

    <property name="proxyInterface"  value="javax.sql.DataSource"
    

    希望能帮助其他人 谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2017-12-11
      • 2017-02-15
      • 2018-03-28
      • 2012-02-23
      相关资源
      最近更新 更多