Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Major
-
Resolution: Won't Fix
-
Affects Version/s: 2.4
-
Fix Version/s: None
-
Component/s: Maven Surefire Plugin
-
Labels:None
-
Complexity:Intermediate
-
Number of attachments :2
Description
here is the description reported on user list
This may not be a blocking bug but It is a regresion since 2.4 where
my Spring JpaDao with embedded Derby test fails . Other databases are fine.
The exception is producable with 2.5-SNAPSHOT ( build from source ),
2.4.1-SNAPSHOT( at apache snapshot repo).
surefire 2.3 and 2.3.1 are fine.
Any one else encounter this issue?
-D
-------------------------------------------------------------------------------
Test set: com.iplocks.user.dao.UserDaoJpaTest
-------------------------------------------------------------------------------
Tests run: 7, Failures: 0, Errors: 6, Skipped: 0, Time elapsed: 14.111
sec <<< FAILURE!
testNamedConstraint(com.iplocks.user.dao.UserDaoJpaTest) Time
elapsed: 0.281 sec <<< ERROR!
javax.persistence.PersistenceException:
org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:630)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:75)
at com.iplocks.jpa.GenericNameDaoJpa.getByName(GenericNameDaoJpa.java:54)
at com.iplocks.user.dao.UserDaoJpaTest.createUser(UserDaoJpaTest.java:35)
at com.iplocks.user.dao.UserDaoJpaTest.createDefaultUser(UserDaoJpaTest.java:56)
at com.iplocks.user.dao.UserDaoJpaTest.testNamedConstraint(UserDaoJpaTest.java:77)
Caused by: org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:2223)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:66)
... 38 more
Caused by: java.sql.SQLException: Cannot create an instance of
generated class
org.apache.derby.exe.ac12564092x0117xc31cx8752x00000020b5f01.
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown
Please run mvn test using the attached maven project. to run with different db, change resources.properties accordingly
-
Hide
- mytest-sources.jar
- 07/Feb/08 11:42 PM
- 13 kB
- Dan Tran
-
- META-INF/MANIFEST.MF 0.1 kB
- mytest/pom.xml 4 kB
- mytest/src/main/.../dao/ConfigDao.java 0.1 kB
- mytest/src/main/.../dao/ConfigDaoJpa.java 0.2 kB
- mytest/src/main/.../dao/GenericDao.java 2 kB
- mytest/src/main/.../dao/GenericDaoJpa.java 2 kB
- mytest/src/main/.../domain/BaseEntity.java 0.5 kB
- mytest/src/main/.../domain/Config.java 1 kB
- mytest/src/main/.../domain/Result.java 0.2 kB
- mytest/src/.../domain/ResultHistory.java 1 kB
- mytest/src/main/.../domain/ResultSet.java 0.7 kB
- mytest/.../applicationContext-mytest-datasource.xml 1.0 kB
- mytest/.../applicationContext-mytest-persistence.xml 2 kB
- mytest/.../applicationContext-mytest-resources.xml 0.6 kB
- mytest/src/.../applicationContext-mytest.xml 0.4 kB
- mytest/src/.../mycomp/resources.properties 0.7 kB
- mytest/src/main/.../META-INF/persistence.xml 0.7 kB
- mytest/src/.../mytest/ConfigDaoTest.java 0.9 kB
- mytest/target/.../resources.properties 0.7 kB
-
Hide
- mytest-sources-2.jar
- 10/Feb/08 2:30 AM
- 13 kB
- Dan Tran
-
- META-INF/MANIFEST.MF 0.1 kB
- mytest/pom.xml 4 kB
- mytest/src/main/.../dao/ConfigDao.java 0.1 kB
- mytest/src/main/.../dao/ConfigDaoJpa.java 0.2 kB
- mytest/src/main/.../dao/GenericDao.java 2 kB
- mytest/src/main/.../dao/GenericDaoJpa.java 2 kB
- mytest/src/main/.../domain/BaseEntity.java 0.5 kB
- mytest/src/main/.../domain/Config.java 1 kB
- mytest/src/main/.../domain/Result.java 0.2 kB
- mytest/src/.../domain/ResultHistory.java 1 kB
- mytest/src/main/.../domain/ResultSet.java 0.7 kB
- mytest/.../applicationContext-mytest-datasource.xml 1.0 kB
- mytest/.../applicationContext-mytest-persistence.xml 2 kB
- mytest/.../applicationContext-mytest-resources.xml 0.6 kB
- mytest/src/.../applicationContext-mytest.xml 0.4 kB
- mytest/src/.../mycomp/resources.properties 0.7 kB
- mytest/src/main/.../META-INF/persistence.xml 0.7 kB
- mytest/src/.../mytest/ConfigDaoTest.java 0.9 kB
Activity
The problem with this test has to do with the useSystemClassLoader configuration parameter. When I use Surefire 2.4.1 and -Dsurefire.useSystemClassLoader=false, the test passes; with =true (the default), the test fails.
One of the changes from Surefire 2.3 and Surefire 2.4 was to make useSystemClassLoader=true the default; previously the default was false. "useSystemClassLoader" sounds fancy, but it's really just the normal default way of launching java: your classes and dependencies are added to the classpath in an ordinary way.
When we don't use the system classloader, we do fancy stuff with "isolated" custom classloaders; this frequently had a destabilizing effect on the classes as they attempted to access the system classloader using java.lang.ClassLoader.getSystemClassLoader(). There are a bunch of bugs marked "Won't Fix" for 2.3 because the workaround is just to set useSystemClassLoader=true.
Since the system classloader mechanism is the "normal" way of launching code, we have to wonder: why does this test fail when launched in the "ordinary" way, but pass when launched in a special isolated classloader? I have no idea why, and I think it's beyond me to find out. There's more than a dozen dependencies in this project and a lot of tricky interactions possible between spring, hibernate, derby, and aspectj; to figure out what's wrong would require a way more detailed debugging effort than I'm prepared to do right now.
For now, I'm going to have to mark this "Won't Fix", there's a reasonable workaround available (useSystemClassLoader=false) and because I believe the current default behavior is the right choice (the default can't satisfy everyone).
If there's something else we can do besides changing the default setting, I'd be curious to know of it; in that case, feel free to reopen this bug or file a new one.
I can't reproduce this; I think I need more environment information. When I run this test, no matter whether I use Surefire 2.3.1 or 2.4.1, I get a failure in ConfigDaoTest.testConfigDao, shown below.
Maven version: 2.0.8
Java version: 1.5.0_12
OS name: "windows xp" version: "5.1" arch: "x86" Family: "windows"