c3p0 com.mchange.v2.lang.VersionUtils: java.version ''1.6.0_03-p4'' could not be parsed. Defaulting to JDK 1.1
When playing with JForum I have noticed a small annoyance in the log:
(This problem has also been reported on some Russian forum).
I have four JDK's installed on my machine:
FreeBSD JDK 1.5 compiled from source:
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_13-p7-root_03_dec_2007_00_10)
Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_13-p7-root_03_dec_2007_00_10, mixed mode)
Diablo FreeBSD JDK 1.5 binary:
Java(TM) 2 Runtime Environment, Standard Edition (build diablo-1.5.0-b01)
Java HotSpot(TM) 64-Bit Server VM (build diablo-1.5.0_07-b01, mixed mode)
FreeBSD JDK 1.6 compiled from source:
Java(TM) SE Runtime Environment (build 1.6.0_03-p4-saper_24_feb_2008_06_54-b00)
Java HotSpot(TM) 64-Bit Server VM (build 1.6.0_03-p4-saper_24_feb_2008_06_54-b00, mixed mode)
and the Linux Sun JDK 1.5 running under Linux ABI emulation for the FreeBSD:
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_15-b04)
Java HotSpot(TM) Server VM (build 1.5.0_15-b04, mixed mode)
As the J2SE SDK/JRE Version String Naming Convention specification says, all non-FCS (First Customer Shipment) i.e. unofficial or patched builds should contain the identifier after a dash and it does not have to be numeric.
The FreeBSD port is using this to determine which Java2 patchset has been applied to the original source when compiling.
Therefore I would suggest a small patch to com.mchange.v2.lang.VersionUtils class (this one can be applied to the source code of c3p0 0.9.1.2 version):
+++ b/src/classes/com/mchange/v2/lang/VersionUtils.java Fri Jul 25 17:44:44 2008 +0200
@@ -49,7 +49,7 @@
}
else
{
- try { v = extractVersionNumberArray( vstr, "._" ); }
+ try { v = extractVersionNumberArray( vstr ); }
catch ( NumberFormatException e )
{
if (logger.isLoggable( MLevel.WARNING ))
@@ -137,11 +137,20 @@
public static boolean isAtLeastJavaVersion15()
{ return (JDK_VERSION >= 15); }
- public static int[] extractVersionNumberArray(String versionString, String delims)
+ private static String upTo(String s, char delimiter) {
+ int k = s.indexOf(delimiter);
+ if (k >= 0) {
+ return s.substring(0, k);
+ } else {
+ return s;
+ }
+ }
+
+ public static int[] extractVersionNumberArray(String versionString)
throws NumberFormatException
{
- String[] intStrs = StringTokenizerUtils.tokenizeToArray( versionString, delims, false );
- int len = intStrs.length;
+ String[] intStrs = StringTokenizerUtils.tokenizeToArray( upTo(versionString, '-'), "._", false );
+ int len = intStrs.length;
int[] out = new int[ len ];
for (int i = 0; i < len; ++i)
out[i] = Integer.parseInt( intStrs[i] );
@@ -179,4 +188,4 @@
else
return 0;
}
And a small test case in Jython (don't forget to put the c3p0 jar file on your classpath):
import java, jarray
from jarray import array
for (v, expected) in [ ("1.3.0", [1, 3, 0]),
("1.3beta", None),
("1.3.1beta", None),
("1.3.1-beta", [1, 3, 1]),
("1.3.1_05-ea", [1, 3, 1, 5]),
("1.4.2", [1, 4, 2]),
("1.5.0", [1, 5, 0]),
("1.5.0_13-p7", [1, 5, 0, 13]),
("1.6.0", [1, 6, 0]),
("1.6.0_02", [1, 6, 0, 2]),
("1.6.0_03-p4", [1, 6, 0, 3])
]:
if expected:
expected = array(expected, 'i')
try:
result = VersionUtils.extractVersionNumberArray(v)
except java.lang.NumberFormatException:
result = None
if result == expected:
print "OK %s: %s" % (v, result)
else:
print "FAILED %s: got %s expected %s" % (v, result, expected)
Odpowiedzi
What's your java version string?
Can you provide your java version string?
Thanks Marcin, this small
Thanks Marcin, this small annoyance is giving me lots of headache.
219301 2008-12-23 03:51:34,674 ERROR [AbstractStep.java:215] Encountered an error executing the step: class java.lang.NullPointerException: com/mchange/v2/l ang/VersionUtils
219302 java.lang.NullPointerException: com/mchange/v2/lang/VersionUtils
219303 at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:104)
219304 at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65)
219305 at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:62)
219306 at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:531)
219307 at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
219308 at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:82)
219309 at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423)
219310 at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
219311 at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:139)
219312 at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1547)
219313 at org.hibernate.loader.Loader.doQuery(Loader.java:673)
219314 at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
219315 at org.hibernate.loader.Loader.doList(Loader.java:2213)
219316 at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
219317 at org.hibernate.loader.Loader.list(Loader.java:2099)
219318 at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
219319 at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
219320 at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
219321 at org.hibernate.impl.CriteriaImpl.uniqueResult(CriteriaImpl.java:305)
219322 at uk.co.shopzilla.sem.sputnik.structurizer.dao.hibernate.HibernateBaseDao.findUniqueByProperty(HibernateBaseDao.java:89)
219323 at uk.co.shopzilla.sem.sputnik.structurizer.dao.hibernate.HibernateCampaignDAO.findCampaignName(HibernateCampaignDAO.java:26)
219324 at uk.co.shopzilla.sem.sputnik.structurizer.namer.NameFinder.findCampaignName(NameFinder.java:185)
219325 at uk.co.shopzilla.sem.sputnik.structurizer.account.AccountCreator.createAccount(AccountCreator.java:143)
219326 at uk.co.shopzilla.sem.sputnik.structurizer.AccountFitterItemReader.read(AccountFitterItemReader.java:127)
219327 at uk.co.shopzilla.sem.sputnik.structurizer.AccountFitterItemReader.read(AccountFitterItemReader.java:40)
219328 at org.springframework.batch.core.step.item.AbstractItemOrientedTasklet.doRead(AbstractItemOrientedTasklet.java:71)
219329 at org.springframework.batch.core.step.item.SimpleChunkOrientedTasklet$1.doInIteration(SimpleChunkOrientedTasklet.java:46)
219330 at org.springframework.batch.repeat.support.RepeatTemplate.getNextResult(RepeatTemplate.java:352)
219331 at org.springframework.batch.repeat.support.RepeatTemplate.executeInternal(RepeatTemplate.java:212)
219332 at org.springframework.batch.repeat.support.RepeatTemplate.iterate(RepeatTemplate.java:143)
219333 at org.springframework.batch.core.step.item.SimpleChunkOrientedTasklet.execute(SimpleChunkOrientedTasklet.java:43)
219334 at org.springframework.batch.core.step.tasklet.TaskletStep$2.doInIteration(TaskletStep.java:261)
219335 at org.springframework.batch.repeat.support.RepeatTemplate.getNextResult(RepeatTemplate.java:352)
219336 at org.springframework.batch.repeat.support.RepeatTemplate.executeInternal(RepeatTemplate.java:212)
219337 at org.springframework.batch.repeat.support.RepeatTemplate.iterate(RepeatTemplate.java:143)
219338 at org.springframework.batch.core.step.tasklet.TaskletStep.doExecute(TaskletStep.java:232)
219339 at org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:193)
219340 at org.springframework.batch.core.job.SimpleJob.handleSteps(SimpleJob.java:160)
219341 at org.springframework.batch.core.job.SimpleJob.execute(SimpleJob.java:70)
219342 at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:101)
219343 at org.springframework.scheduling.timer.DelegatingTimerTask.run(DelegatingTimerTask.java:66)
219344 at java.util.TimerThread.mainLoop(Timer.java:512)
219335 at org.springframework.batch.repeat.support.RepeatTemplate.getNextResult(RepeatTemplate.java:352)
219336 at org.springframework.batch.repeat.support.RepeatTemplate.executeInternal(RepeatTemplate.java:212)
219337 at org.springframework.batch.repeat.support.RepeatTemplate.iterate(RepeatTemplate.java:143)
219338 at org.springframework.batch.core.step.tasklet.TaskletStep.doExecute(TaskletStep.java:232)
219339 at org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:193)
219340 at org.springframework.batch.core.job.SimpleJob.handleSteps(SimpleJob.java:160)
219341 at org.springframework.batch.core.job.SimpleJob.execute(SimpleJob.java:70)
219342 at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:101)
219343 at org.springframework.scheduling.timer.DelegatingTimerTask.run(DelegatingTimerTask.java:66)
219344 at java.util.TimerThread.mainLoop(Timer.java:512)
219345 at java.util.TimerThread.run(Timer.java:462)
Dodaj nową odpowiedź