WebSphereのjava.util.ConcurrentModificationExceptionを引き起こすBasicDataSource
問題
Springでは、データソースを “org.apache.commons.dbcp.BasicDataSource`”と宣言します。 WebSphereにデプロイすると、すべてが完全に機能します。
File:spring-datasource.xml
<?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-2.5.xsd "> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location"> <value>classpath:config/database/database.properties</value> </property> </bean> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> </beans>
ただし、WebSphereでWebアプリケーションを再起動すると、次の例外が発生します。
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [config/database/spring/spring-datasource.xml]: Instantiation of bean failed; ...... 原因:java.lang.ExceptionInInitializerError java.lang.J9VMInternals.initialize(J9VMInternals.java:222) sun.reflect.NativeConstructorAccessorImpl.newInstance0(ネイティブメソッド) ... 114もっと見る 原因:java.util.ConcurrentModificationException java.util.AbstractListで$ SimpleListIterator.next(不明なソース) java.sql.DriverManager.getDrivers(Unknown Source) org.apache.commons.dbcp.BasicDataSource。<clinit>(BasicDataSource.java:57) java.lang.J9VMInternals.initializeImpl(ネイティブメソッド) java.lang.J9VMInternals.initialize(J9VMInternals.java:200) ... 121もっと見る
データソース(BasicDataSource)が原因であるように見える
“java.util.ConcurrentModificationException`”
===解決策
WebSphereデータ・ソースを使用する必要があります。
“` org.apache.commons.dbcp.BasicDataSource` “それを修正するには、
WebSphereのデータ・ソース、および「
jdbc/anythingDS
」のようなjndi名を入力します。に
Springはjdniデータソースを次のように宣言します:
File:spring-datasource.xml
<?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-2.5.xsd "> <bean id = "dataSource" class = "org.springframework.jndi.JndiObjectFactoryBean">プロパティ名= "jndiName"値= "jdbc/anythingDS"/> <property name = "lookupOnStartup" value = "false"/> <プロパティ名= "cache" value = "true"/> <property name = "proxyInterface" value = "javax.sql.DataSource"/> </bean> </beans>
WebSphereの開発では、WebSphereのやり方に従わなければなりません
もの。