While executing JUnit tests with the new "integtests" classes I receive the
following exception (same happening from the Eclipse Junit installation and
from "Maven tests"). I'm not sure if it's a problem of the DataNucleus Enhancer
or Isis:
java.lang.RuntimeException: java.lang.ClassCastException: java.lang.String
cannot be cast to javax.jdo.spi.PersistenceCapable
at
org.apache.isis.core.integtestsupport.IsisSystemForTest.setUpSystem(IsisSystemForTest.java:258)
at
integtests.com.xms.framework.continuity.domain.model.AbstractContinuityTest$IsisSystemForTestRule$1.initialValue(AbstractContinuityTest.java:282)
at
integtests.com.xms.framework.continuity.domain.model.AbstractContinuityTest$IsisSystemForTestRule$1.initialValue(AbstractContinuityTest.java:1)
at java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:141)
at java.lang.ThreadLocal.get(ThreadLocal.java:131)
at
integtests.com.xms.framework.continuity.domain.model.AbstractContinuityTest$IsisSystemForTestRule.getIsisSystemForTest(AbstractContinuityTest.java:288)
at
integtests.com.xms.framework.continuity.domain.model.AbstractContinuityTest$IsisSystemForTestRule.apply(AbstractContinuityTest.java:294)
at
org.junit.runners.BlockJUnit4ClassRunner.withMethodRules(BlockJUnit4ClassRunner.java:349)
at
org.junit.runners.BlockJUnit4ClassRunner.withRules(BlockJUnit4ClassRunner.java:339)
at
org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:256)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to
javax.jdo.spi.PersistenceCapable
at
org.apache.isis.objectstore.jdo.datanucleus.persistence.queries.PersistenceQueryProcessorAbstract.loadAdapters(PersistenceQueryProcessorAbstract.java:82)
at
org.apache.isis.objectstore.jdo.datanucleus.persistence.queries.PersistenceQueryFindUsingApplibQueryProcessor.process(PersistenceQueryFindUsingApplibQueryProcessor.java:67)
at
org.apache.isis.objectstore.jdo.datanucleus.persistence.queries.PersistenceQueryFindUsingApplibQueryProcessor.process(PersistenceQueryFindUsingApplibQueryProcessor.java:39)
at
org.apache.isis.objectstore.jdo.datanucleus.DataNucleusObjectStore.processPersistenceQuery(DataNucleusObjectStore.java:541)
at
org.apache.isis.objectstore.jdo.datanucleus.DataNucleusObjectStore.loadInstancesAndAdapt(DataNucleusObjectStore.java:536)
at
org.apache.isis.core.runtime.system.persistence.PersistenceSession$1.execute(PersistenceSession.java:433)
at
org.apache.isis.core.runtime.system.persistence.PersistenceSession$1.execute(PersistenceSession.java:430)
at
org.apache.isis.core.runtime.system.transaction.IsisTransactionManager.executeWithinTransaction(IsisTransactionManager.java:220)
at
org.apache.isis.core.runtime.system.persistence.PersistenceSession.getInstancesFromPersistenceLayer(PersistenceSession.java:430)
at
org.apache.isis.core.runtime.system.persistence.PersistenceSession.getInstances(PersistenceSession.java:426)
at
org.apache.isis.core.runtime.system.persistence.PersistenceSession.findInstances(PersistenceSession.java:363)
at
org.apache.isis.core.runtime.system.persistence.PersistenceSession.findInstances(PersistenceSession.java:358)
at
org.apache.isis.core.runtime.persistence.internal.RuntimeContextFromSession$8.firstMatchingQuery(RuntimeContextFromSession.java:260)
at
org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault.firstMatch(DomainObjectContainerDefault.java:391)
at
org.apache.isis.applib.AbstractContainedObject.firstMatch(AbstractContainedObject.java:155)
at
com.xms.framework.risk.domain.model.continuity.BusinessContinuityManagementSystems.businessContinuityManagementSystem(BusinessContinuityManagementSystems.java:22)
at
com.xms.framework.risk.domain.model.continuity.BusinessProcessesBCMInformation.createTransientBIA(BusinessProcessesBCMInformation.java:72)
at
com.xms.framework.risk.domain.model.continuity.BusinessProcessesBCMInformation.createTransientBusinessProcessBCMInformation(BusinessProcessesBCMInformation.java:91)
at
com.xms.framework.risk.domain.model.continuity.BusinessProcessesBCMInformation.createPersistentBusinessProcessBCMInformation(BusinessProcessesBCMInformation.java:103)
at
com.xms.framework.risk.domain.model.continuity.BusinessProcessesBCMInformation.businessContinuityInformation(BusinessProcessesBCMInformation.java:51)
at
com.xms.framework.risk.domain.model.continuity.BusinessProcessesBCMInformation.businessContinuityInformation(BusinessProcessesBCMInformation.java:27)
at
com.xms.framework.continuity.fixtures.BCMFixture.installBCMFixture(BCMFixture.java:36)
at
com.xms.framework.continuity.fixtures.BCMFixture.install(BCMFixture.java:27)
at
org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixture(FixturesInstallerDelegate.java:213)
at
org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixtureInTransaction(FixturesInstallerDelegate.java:175)
at
org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixtures(FixturesInstallerDelegate.java:162)
at
org.apache.isis.core.runtime.fixtures.FixturesInstallerDelegate.installFixtures(FixturesInstallerDelegate.java:142)
at
org.apache.isis.core.integtestsupport.IsisSystemForTest.wireAndInstallFixtures(IsisSystemForTest.java:292)
at
org.apache.isis.core.integtestsupport.IsisSystemForTest.setUpSystem(IsisSystemForTest.java:283)
at
org.apache.isis.core.integtestsupport.IsisSystemForTest.setUpSystem(IsisSystemForTest.java:256)
... 24 more
Also, it's curious, because the exception is on the
"frameworkSynchronizer.postLoadProcessingFor((PersistenceCapable) pojo,
CalledFrom.OS_QUERY);" line of code:
protected List<ObjectAdapter> loadAdapters(
final ObjectSpecification specification, final List<?> pojos) {
final List<ObjectAdapter> adapters = Lists.newArrayList();
for (final Object pojo : pojos) {
// ought not to be necessary, however for some queries it seems
that the
// lifecycle listener is not called
frameworkSynchronizer.postLoadProcessingFor((PersistenceCapable) pojo,
CalledFrom.OS_QUERY);
ObjectAdapter adapter = getAdapterManager().getAdapterFor(pojo);
Assert.assertNotNull(adapter);
adapters.add(adapter);
}
return adapters;
}
The pojo is a reference to a Domain Entity class that has the
@PersistenceCapable annotation. And the "original" Java exception message is:
ClassCastException: Cannot cast
"com.xms.framework.risk.domain.model.continuity.BusinessContinuityManagementSystem"
to javax.jdo.spi.PersistenceCapable
Despite that, the following message is on "ex" when returning to
executeWithinTransaction (on the "} catch (final RuntimeException ex) {"
block):
java.lang.ClassCastException: java.lang.String cannot be cast to
javax.jdo.spi.PersistenceCapable