2015-11-19 108 views
1

我将一个glassfish项目转换为IBM WAS Liberty,非常困难我目前遇到访问在Liberty中配置的连接池的问题(server.xml)利用jndi(jdbc/dataphile)。IBM WAS Liberty错误+缺失类型com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource

我周期性地得到一个缺少类型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 
+0

为什么你需要'WSJdbcDataSource',它是内部类,你不应该需要使用呢?附上您使用它的代码片段。 – Gas

+0

你可以发布你的堆栈跟踪和你在server.xml中启用的功能吗?正如Gas提到的那样,你是否试图以某种方式访问​​'WSJdbcDataSource'?或者你是从内部代码中看到的。 –

+0

请理解,我没有明确使用或调用WSJdbcDataSource,我只是在我的Liberty server.xml中声明了一个数据连接池。通过将我的应用程序部署到Liberty,该部署未能提供以下例外。 – Sergio

回答

0

我有足够的理论,为什么,但这是我如何从根本上如何解决我的问题:

原来,在我的春节,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" 

希望这帮助别人那里 感谢

0

我不是专家在这一点,但在这里报告了类似的问题:

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"/> 
+0

我也读过这篇文章。它不幸地要求你把这两行放在你的bean数据源bean定义(spring)中,但是我没有使用jndi.JndiObjectFactoryBean声明任何数据源bean。 – Sergio

+0

@Sergio应该声明一个使用jndi.JndiObjectFactoryBean的数据源bean吗? –

+0

@aguibert我没有必要在我的Glassfish项目版本中声明使用JndiObjectFactoryBean的bean。所以我不确定现在是否需要迁移到Liberty? – Sergio

相关问题