Updated Branches: refs/heads/master 82f7e8972 -> 0ef9dd81e
ISIS-386, ISIS-303, ISIS-389: JDO lazy loading, upgrade to DN 3.2 ... also remove methods of IsisJdoSupport (ISIS-386) that are no longer required post the lazy loading fix (ISIS-389). This fix necessitates the upgrade to DN 3.2 (ISIS-303). Project: http://git-wip-us.apache.org/repos/asf/isis/repo Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/8cc29a3a Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/8cc29a3a Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/8cc29a3a Branch: refs/heads/master Commit: 8cc29a3a79f1dd80d5fc30c861e514cd979ee3c8 Parents: 82f7e89 Author: Dan Haywood <[email protected]> Authored: Fri Apr 26 17:02:22 2013 +0100 Committer: Dan Haywood <[email protected]> Committed: Fri Apr 26 17:02:22 2013 +0100 ---------------------------------------------------------------------- .gitignore | 1 + component/objectstore/jdo/jdo-applib/pom.xml | 13 +- .../jdo/applib/service/support/IsisJdoSupport.java | 25 +-- component/objectstore/jdo/jdo-datanucleus/pom.xml | 4 - .../jdo/datanucleus/DataNucleusObjectStore.java | 7 +- .../DataNucleusPersistenceMechanismInstaller.java | 16 +- .../JDOPersistenceManagerFactoryForIsis.java | 198 +++++++++++++++ .../jdo/datanucleus/JDOStateManagerForIsis.java | 81 ++++++ .../jdo/datanucleus/NucleusContextForIsis.java | 54 ++++ .../datanucleus/ObjectProviderFactoryForIsis.java | 23 ++ .../service/support/IsisJdoSupportImpl.java | 11 +- .../datanucleus/valuetypes/IsisBlobMapping.java | 31 ++- .../datanucleus/valuetypes/IsisClobMapping.java | 31 ++- .../datanucleus/valuetypes/IsisDateMapping.java | 2 +- .../valuetypes/IsisDateTimeMapping.java | 2 +- component/objectstore/jdo/pom.xml | 50 ++-- core/tck/tck-dom/pom.xml | 8 +- example/application/claims/dom/pom.xml | 28 +-- .../quickstart_wicket_restful_jdo/dom/pom.xml | 20 +- .../WEB-INF/persistor_datanucleus.properties | 2 +- .../viewer-webapp/src/main/webapp/about/index.html | 13 +- 21 files changed, 468 insertions(+), 152 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/isis/blob/8cc29a3a/.gitignore ---------------------------------------------------------------------- diff --git a/.gitignore b/.gitignore index e826285..33f7a97 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,7 @@ component/security/sql/hsql-db/ # log files datanucleus.log isis.log +hs_err_pid*.log # Package Files # *.jar http://git-wip-us.apache.org/repos/asf/isis/blob/8cc29a3a/component/objectstore/jdo/jdo-applib/pom.xml ---------------------------------------------------------------------- diff --git a/component/objectstore/jdo/jdo-applib/pom.xml b/component/objectstore/jdo/jdo-applib/pom.xml index f7a506d..18cc481 100644 --- a/component/objectstore/jdo/jdo-applib/pom.xml +++ b/component/objectstore/jdo/jdo-applib/pom.xml @@ -42,8 +42,8 @@ <plugins> <plugin> <groupId>org.datanucleus</groupId> - <artifactId>maven-datanucleus-plugin</artifactId> - <version>3.1.1</version> + <artifactId>datanucleus-maven-plugin</artifactId> + <version>3.2.0-release</version> <configuration> <fork>false</fork> <verbose>true</verbose> @@ -78,10 +78,10 @@ org.datanucleus </groupId> <artifactId> - maven-datanucleus-plugin + datanucleus-maven-plugin </artifactId> <versionRange> - [3.0.2,) + [3.2.0-release,) </versionRange> <goals> <goal>enhance</goal> @@ -113,7 +113,6 @@ </dependencyManagement> <dependencies> - <dependency> <groupId>org.apache.isis.core</groupId> <artifactId>isis-core-applib</artifactId> @@ -138,10 +137,6 @@ </dependency> <dependency> <groupId>org.datanucleus</groupId> - <artifactId>datanucleus-enhancer</artifactId> - </dependency> - <dependency> - <groupId>org.datanucleus</groupId> <artifactId>datanucleus-jodatime</artifactId> </dependency> <dependency> http://git-wip-us.apache.org/repos/asf/isis/blob/8cc29a3a/component/objectstore/jdo/jdo-applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/support/IsisJdoSupport.java ---------------------------------------------------------------------- diff --git a/component/objectstore/jdo/jdo-applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/support/IsisJdoSupport.java b/component/objectstore/jdo/jdo-applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/support/IsisJdoSupport.java index 5e80dc6..e9a0d85 100644 --- a/component/objectstore/jdo/jdo-applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/support/IsisJdoSupport.java +++ b/component/objectstore/jdo/jdo-applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/support/IsisJdoSupport.java @@ -1,36 +1,27 @@ package org.apache.isis.objectstore.jdo.applib.service.support; +import org.apache.isis.applib.annotation.Programmatic; + /** * Service that provide a number of workarounds when using JDO/DataNucleus. */ public interface IsisJdoSupport { /** - * Inject services and container into a domain object. - * - * <p> - * This method is provided because we can't figure out why JDO/DataNucleus is not - * calling the Isis callback (<tt>IsisLifecycleListener</tt>) when an object is lazily loaded. - * - * <p> - * The particular example that led to this method being added was a 1:m bidirectional relationship, - * analogous to <tt>Customer <-> * Order</tt>. No callback is received for the child <tt>Order</tt> objects. - */ - <T> T injected(T domainObject); - - /** * Force a reload (corresponding to the JDO <tt>PersistenceManager</tt>'s <tt>refresh()</tt> method) * of a domain objects. * * <p> - * In fact, may reset the lazy-load state of the domain object, but the effect is the same: to cause - * the object's state to be reloaded from the database. + * In fact, this may just reset the lazy-load state of the domain object, but the effect is the same: + * to cause the object's state to be reloaded from the database. * * <p> * The particular example that led to this method being added was a 1:m bidirectional relationship, * analogous to <tt>Customer <-> * Order</tt>. Persisting the child <tt>Order</tt> object did not cause - * the parent <tt>Customer</tt>'s collection of orders to be updated. Calling refresh on the parent - * <tt>Customer</tt> does the trick, however. + * the parent <tt>Customer</tt>'s collection of orders to be updated. In fact, JDO does not make any + * such guarantee to do so. Options are therefore either to maintain the collection in code, or to + * refresh the parent. */ + @Programmatic <T> T refresh(T domainObject); } http://git-wip-us.apache.org/repos/asf/isis/blob/8cc29a3a/component/objectstore/jdo/jdo-datanucleus/pom.xml ---------------------------------------------------------------------- diff --git a/component/objectstore/jdo/jdo-datanucleus/pom.xml b/component/objectstore/jdo/jdo-datanucleus/pom.xml index 85ed1c2..779e6d0 100644 --- a/component/objectstore/jdo/jdo-datanucleus/pom.xml +++ b/component/objectstore/jdo/jdo-datanucleus/pom.xml @@ -81,10 +81,6 @@ </dependency> <dependency> <groupId>org.datanucleus</groupId> - <artifactId>datanucleus-enhancer</artifactId> - </dependency> - <dependency> - <groupId>org.datanucleus</groupId> <artifactId>datanucleus-api-jdo</artifactId> </dependency> <dependency> http://git-wip-us.apache.org/repos/asf/isis/blob/8cc29a3a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java ---------------------------------------------------------------------- diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java index c363add..0928313 100644 --- a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java +++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusObjectStore.java @@ -29,6 +29,8 @@ import java.text.MessageFormat; import java.util.List; import java.util.Map; +import javax.jdo.FetchGroup; +import javax.jdo.FetchPlan; import javax.jdo.PersistenceManager; import javax.jdo.Query; import javax.jdo.spi.PersistenceCapable; @@ -391,7 +393,10 @@ public class DataNucleusObjectStore implements ObjectStoreSpi { try { final Class<?> cls = clsOf(rootOid); final Object jdoObjectId = JdoObjectIdSerializer.toJdoObjectId(rootOid); - result = getPersistenceManager().getObjectById(cls, jdoObjectId); + final PersistenceManager pm = getPersistenceManager(); + FetchPlan fetchPlan = pm.getFetchPlan(); + fetchPlan.addGroup(FetchGroup.DEFAULT); + result = pm.getObjectById(cls, jdoObjectId); } catch (final RuntimeException e) { throw e; } http://git-wip-us.apache.org/repos/asf/isis/blob/8cc29a3a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java ---------------------------------------------------------------------- diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java index e2a9b52..6f1a9aa 100644 --- a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java +++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java @@ -75,17 +75,19 @@ public class DataNucleusPersistenceMechanismInstaller extends PersistenceMechani private static final Logger LOG = Logger.getLogger(DataNucleusPersistenceMechanismInstaller.class); public static final String NAME = "datanucleus"; - + private static final String ISIS_CONFIG_PREFIX = "isis.persistor.datanucleus.impl"; + private static final String JAVAX_JDO_PERSISTENCE_MANAGER_FACTORY_CLASS = "javax.jdo.PersistenceManagerFactoryClass"; + private static final String PERSISTENCE_MANAGER_FACTORY_CLASS_FOR_ISIS = "org.apache.isis.objectstore.jdo.datanucleus.JDOPersistenceManagerFactoryForIsis"; + private DataNucleusApplicationComponents applicationComponents = null; - public DataNucleusPersistenceMechanismInstaller() { super(NAME); } - + //////////////////////////////////////////////////////////////////////// // createObjectStore //////////////////////////////////////////////////////////////////////// @@ -105,13 +107,19 @@ public class DataNucleusPersistenceMechanismInstaller extends PersistenceMechani final Map<String, String> props = dataNucleusConfig.asMap(); addDataNucleusPropertiesIfRequired(props); + // + final String pmfClassName = props.get(JAVAX_JDO_PERSISTENCE_MANAGER_FACTORY_CLASS); + if(!PERSISTENCE_MANAGER_FACTORY_CLASS_FOR_ISIS.equals(pmfClassName)) { + throw new IllegalArgumentException(JAVAX_JDO_PERSISTENCE_MANAGER_FACTORY_CLASS + " must be set to " + PERSISTENCE_MANAGER_FACTORY_CLASS_FOR_ISIS); + } + applicationComponents = new DataNucleusApplicationComponents(props, getSpecificationLoader().allSpecifications()); } private static void addDataNucleusPropertiesIfRequired( final Map<String, String> props) { - putIfNotPresent(props, "javax.jdo.PersistenceManagerFactoryClass", "org.datanucleus.api.jdo.JDOPersistenceManagerFactory"); + putIfNotPresent(props, JAVAX_JDO_PERSISTENCE_MANAGER_FACTORY_CLASS, PERSISTENCE_MANAGER_FACTORY_CLASS_FOR_ISIS); putIfNotPresent(props, "datanucleus.autoCreateSchema", "true"); putIfNotPresent(props, "datanucleus.validateSchema", "true"); http://git-wip-us.apache.org/repos/asf/isis/blob/8cc29a3a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/JDOPersistenceManagerFactoryForIsis.java ---------------------------------------------------------------------- diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/JDOPersistenceManagerFactoryForIsis.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/JDOPersistenceManagerFactoryForIsis.java new file mode 100644 index 0000000..4077ad6 --- /dev/null +++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/JDOPersistenceManagerFactoryForIsis.java @@ -0,0 +1,198 @@ +package org.apache.isis.objectstore.jdo.datanucleus; + +import java.util.HashMap; +import java.util.Map; + +import javax.jdo.Constants; +import javax.jdo.JDOFatalUserException; +import javax.jdo.JDOUserException; + +import org.datanucleus.NucleusContext; +import org.datanucleus.PropertyNames; +import org.datanucleus.api.jdo.JDOPersistenceManagerFactory; +import org.datanucleus.api.jdo.NucleusJDOHelper; +import org.datanucleus.exceptions.NucleusException; +import org.datanucleus.metadata.PersistenceUnitMetaData; +import org.datanucleus.metadata.TransactionType; +import org.datanucleus.store.connection.ConnectionFactory; +import org.datanucleus.store.connection.ConnectionResourceType; + +public class JDOPersistenceManagerFactoryForIsis extends + JDOPersistenceManagerFactory { + + private static final long serialVersionUID = 1L; + + public JDOPersistenceManagerFactoryForIsis() { + this(null); + } + + public JDOPersistenceManagerFactoryForIsis(Map props) { + // Extract any properties that affect NucleusContext startup + Map startupProps = null; + if (props != null) + { + // Possible properties to check for + for (String startupPropName : NucleusContext.STARTUP_PROPERTIES) + { + if (props.containsKey(startupPropName)) + { + if (startupProps == null) + { + startupProps = new HashMap(); + } + startupProps.put(startupPropName, props.get(startupPropName)); + } + } + } + + // Initialise the context for JDO (need nucleusContext to load persistence-unit) + nucleusContext = createNucleusContext(startupProps); + + // Generate the properties to apply to the PMF + Map pmfProps = new HashMap(); + + PersistenceUnitMetaData pumd = null; + if (props != null) + { + String persistenceUnitName = (String)props.get(PropertyNames.PROPERTY_PERSISTENCE_UNIT_NAME); + if (persistenceUnitName == null) + { + persistenceUnitName = (String)props.get(Constants.PROPERTY_PERSISTENCE_UNIT_NAME); + } + if (persistenceUnitName != null) + { + // PMF for a "persistence-unit", so add property so the persistence mechanism knows this + getConfiguration().setProperty(PropertyNames.PROPERTY_PERSISTENCE_UNIT_NAME, persistenceUnitName); + + try + { + // Obtain any props defined for the persistence-unit + pumd = nucleusContext.getMetaDataManager().getMetaDataForPersistenceUnit(persistenceUnitName); + if (pumd != null) + { + // Add the properties for the unit + if (pumd.getProperties() != null) + { + pmfProps.putAll(pumd.getProperties()); + } + } + else + { + throw new JDOUserException(LOCALISER.msg("012004", persistenceUnitName)); + } + } + catch (NucleusException ne) + { + throw new JDOUserException(LOCALISER.msg("012005", persistenceUnitName), ne); + } + } + } + + // Append on any user properties + if (props != null) + { + pmfProps.putAll(props); + if (!pmfProps.containsKey(PropertyNames.PROPERTY_TRANSACTION_TYPE) && + !pmfProps.containsKey("javax.jdo.option.TransactionType")) + { + // Default to RESOURCE_LOCAL txns + pmfProps.put(PropertyNames.PROPERTY_TRANSACTION_TYPE, TransactionType.RESOURCE_LOCAL.toString()); + } + else + { + // let TransactionType.JTA imply ResourceType.JTA + String transactionType = pmfProps.get(PropertyNames.PROPERTY_TRANSACTION_TYPE) != null ? + (String)pmfProps.get(PropertyNames.PROPERTY_TRANSACTION_TYPE) : + (String)pmfProps.get("javax.jdo.option.TransactionType"); + if (TransactionType.JTA.toString().equalsIgnoreCase(transactionType)) + { + pmfProps.put(ConnectionFactory.DATANUCLEUS_CONNECTION_RESOURCE_TYPE, + ConnectionResourceType.JTA.toString()); + pmfProps.put(ConnectionFactory.DATANUCLEUS_CONNECTION2_RESOURCE_TYPE, + ConnectionResourceType.JTA.toString()); + } + } + } + else + { + pmfProps.put(PropertyNames.PROPERTY_TRANSACTION_TYPE, TransactionType.RESOURCE_LOCAL.toString()); + } + + // Apply the properties to the PMF + try + { + String propsFileProp = PropertyNames.PROPERTY_PROPERTIES_FILE; + if (pmfProps.containsKey(propsFileProp)) + { + // Apply properties file first + getConfiguration().setPropertiesUsingFile((String)pmfProps.get(propsFileProp)); + pmfProps.remove(propsFileProp); + } + getConfiguration().setPersistenceProperties(pmfProps); + } + catch (IllegalArgumentException iae) + { + throw new JDOFatalUserException("Exception thrown setting persistence properties", iae); + } + catch (NucleusException jpe) + { + // Only throw JDOException and subclasses + throw NucleusJDOHelper.getJDOExceptionForNucleusException(jpe); + } + + // Initialise any metadata that needs loading + settings + initialiseMetaData(pumd); + + // Enable any listeners that are specified via persistence properties + processLifecycleListenersFromProperties(props); + + } + + public JDOPersistenceManagerFactoryForIsis(PersistenceUnitMetaData pumd, + Map overrideProps) { + // Build up map of all properties to apply (from persistence-unit + overridden + defaulted) + Map props = new HashMap(); + if (pumd != null && pumd.getProperties() != null) + { + props.putAll(pumd.getProperties()); + } + if (overrideProps != null) + { + props.putAll(overrideProps); + } + if (!props.containsKey(PropertyNames.PROPERTY_TRANSACTION_TYPE) && + !props.containsKey("javax.jdo.option.TransactionType")) + { + // Default to RESOURCE_LOCAL txns + props.put(PropertyNames.PROPERTY_TRANSACTION_TYPE, TransactionType.RESOURCE_LOCAL.toString()); + } + else + { + // let TransactionType.JTA imply ResourceType.JTA + String transactionType = props.get(PropertyNames.PROPERTY_TRANSACTION_TYPE) != null ? + (String) props.get(PropertyNames.PROPERTY_TRANSACTION_TYPE) : + (String) props.get("javax.jdo.option.TransactionType"); + if (TransactionType.JTA.toString().equalsIgnoreCase(transactionType)) + { + props.put(ConnectionFactory.DATANUCLEUS_CONNECTION_RESOURCE_TYPE, ConnectionResourceType.JTA.toString()); + props.put(ConnectionFactory.DATANUCLEUS_CONNECTION2_RESOURCE_TYPE, ConnectionResourceType.JTA.toString()); + } + } + + // Initialise the context with all properties + nucleusContext = createNucleusContext(props); + + initialiseMetaData(pumd); + + // Enable any listeners that are specified via persistence properties + processLifecycleListenersFromProperties(props); + } + + /** + * Factored out + */ + protected NucleusContext createNucleusContext(Map props) { + return new NucleusContextForIsis("JDO", props); + } + +} http://git-wip-us.apache.org/repos/asf/isis/blob/8cc29a3a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/JDOStateManagerForIsis.java ---------------------------------------------------------------------- diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/JDOStateManagerForIsis.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/JDOStateManagerForIsis.java new file mode 100644 index 0000000..0a702f3 --- /dev/null +++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/JDOStateManagerForIsis.java @@ -0,0 +1,81 @@ +package org.apache.isis.objectstore.jdo.datanucleus; + +import javax.jdo.listener.LoadCallback; +import javax.jdo.spi.PersistenceCapable; +import javax.jdo.spi.StateManager; + +import org.datanucleus.ExecutionContext; +import org.datanucleus.cache.CachedPC; +import org.datanucleus.metadata.AbstractClassMetaData; +import org.datanucleus.state.JDOStateManager; +import org.datanucleus.state.ObjectProvider; +import org.datanucleus.store.FieldValues; + +import org.apache.isis.core.metamodel.services.ServicesInjectorSpi; +import org.apache.isis.core.runtime.system.context.IsisContext; + +public class JDOStateManagerForIsis extends JDOStateManager implements StateManager, ObjectProvider { + + public JDOStateManagerForIsis(ExecutionContext ec, AbstractClassMetaData cmd) { + super(ec, cmd); + } + + public void initialiseForHollow(Object id, FieldValues fv, Class pcClass) { + super.initialiseForHollow(id, fv, pcClass); + mapIntoIsis(myPC); + } + + public void initialiseForHollowAppId(FieldValues fv, Class pcClass) { + super.initialiseForHollowAppId(fv, pcClass); + mapIntoIsis(myPC); + } + + public void initialiseForHollowPreConstructed(Object id, Object pc) { + super.initialiseForHollowPreConstructed(id, pc); + mapIntoIsis(myPC); + } + + public void initialiseForPersistentClean(Object id, Object pc) { + super.initialiseForPersistentClean(id, pc); + mapIntoIsis(myPC); + } + + public void initialiseForEmbedded(Object pc, boolean copyPc) { + super.initialiseForEmbedded(pc, copyPc); + mapIntoIsis(myPC); + } + + public void initialiseForPersistentNew(Object pc, + FieldValues preInsertChanges) { + super.initialiseForPersistentNew(pc, preInsertChanges); + mapIntoIsis(myPC); + } + + public void initialiseForTransactionalTransient(Object pc) { + super.initialiseForTransactionalTransient(pc); + mapIntoIsis(myPC); + } + + public void initialiseForDetached(Object pc, Object id, Object version) { + super.initialiseForDetached(pc, id, version); + mapIntoIsis(myPC); + } + + public void initialiseForPNewToBeDeleted(Object pc) { + super.initialiseForPNewToBeDeleted(pc); + mapIntoIsis(myPC); + } + + public void initialiseForCachedPC(CachedPC cachedPC, Object id) { + super.initialiseForCachedPC(cachedPC, id); + mapIntoIsis(myPC); + } + + protected void mapIntoIsis(PersistenceCapable pc) { + getServicesInjector().injectServicesInto(pc); + } + + protected ServicesInjectorSpi getServicesInjector() { + return IsisContext.getPersistenceSession().getServicesInjector(); + } +} http://git-wip-us.apache.org/repos/asf/isis/blob/8cc29a3a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/NucleusContextForIsis.java ---------------------------------------------------------------------- diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/NucleusContextForIsis.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/NucleusContextForIsis.java new file mode 100644 index 0000000..8ce4252 --- /dev/null +++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/NucleusContextForIsis.java @@ -0,0 +1,54 @@ +package org.apache.isis.objectstore.jdo.datanucleus; + +import java.lang.reflect.Field; +import java.util.Map; + +import org.datanucleus.NucleusContext; +import org.datanucleus.plugin.PluginManager; +import org.datanucleus.state.ObjectProviderFactory; + +public class NucleusContextForIsis extends NucleusContext { + + public NucleusContextForIsis(String apiName, ContextType type, + Map startupProps, PluginManager pluginMgr) { + super(apiName, type, startupProps, pluginMgr); + } + + public NucleusContextForIsis(String apiName, ContextType type, + Map startupProps) { + super(apiName, type, startupProps); + } + + public NucleusContextForIsis(String apiName, Map startupProps, + PluginManager pluginMgr) { + super(apiName, startupProps, pluginMgr); + } + + public NucleusContextForIsis(String apiName, Map startupProps) { + super(apiName, startupProps); + } + + /** + * Horrendous code... + */ + @Override + public ObjectProviderFactory getObjectProviderFactory() { + try { + Field declaredField = NucleusContext.class.getDeclaredField("opFactory"); + declaredField.setAccessible(true); + ObjectProviderFactory opf = (ObjectProviderFactory) declaredField.get(this); + if(opf == null) { + opf = newObjectProviderFactory(); + declaredField.set(this, opf); + } + return opf; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private ObjectProviderFactoryForIsis newObjectProviderFactory() { + return new ObjectProviderFactoryForIsis(this); + } + +} http://git-wip-us.apache.org/repos/asf/isis/blob/8cc29a3a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/ObjectProviderFactoryForIsis.java ---------------------------------------------------------------------- diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/ObjectProviderFactoryForIsis.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/ObjectProviderFactoryForIsis.java new file mode 100644 index 0000000..15002a4 --- /dev/null +++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/ObjectProviderFactoryForIsis.java @@ -0,0 +1,23 @@ +package org.apache.isis.objectstore.jdo.datanucleus; + +import org.datanucleus.ExecutionContext; +import org.datanucleus.NucleusContext; +import org.datanucleus.metadata.AbstractClassMetaData; +import org.datanucleus.state.ObjectProvider; +import org.datanucleus.state.ObjectProviderFactory; +import org.datanucleus.state.ObjectProviderFactoryImpl; + +public class ObjectProviderFactoryForIsis extends ObjectProviderFactoryImpl + implements ObjectProviderFactory { + + public ObjectProviderFactoryForIsis(NucleusContext nucCtx) { + super(nucCtx); + } + + @Override + protected ObjectProvider getObjectProvider(ExecutionContext ec, + AbstractClassMetaData cmd) { + return new JDOStateManagerForIsis(ec, cmd); + } + +} http://git-wip-us.apache.org/repos/asf/isis/blob/8cc29a3a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/support/IsisJdoSupportImpl.java ---------------------------------------------------------------------- diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/support/IsisJdoSupportImpl.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/support/IsisJdoSupportImpl.java index bd1801e..af5be23 100644 --- a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/support/IsisJdoSupportImpl.java +++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/support/IsisJdoSupportImpl.java @@ -1,6 +1,9 @@ package org.apache.isis.objectstore.jdo.datanucleus.service.support; +import java.util.Collection; + import org.apache.isis.applib.annotation.Hidden; +import org.apache.isis.applib.annotation.Programmatic; import org.apache.isis.core.metamodel.adapter.ObjectAdapter; import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager; import org.apache.isis.core.metamodel.services.ServicesInjectorSpi; @@ -12,13 +15,6 @@ import org.apache.isis.objectstore.jdo.datanucleus.DataNucleusObjectStore; @Hidden public class IsisJdoSupportImpl implements IsisJdoSupport { - @Hidden - @Override - public <T> T injected(T domainObject) { - getServicesInjector().injectServicesInto(domainObject); - return domainObject; - } - @Override public <T> T refresh(T domainObject) { DataNucleusObjectStore objectStore = (DataNucleusObjectStore) getPersistenceSession().getObjectStore(); @@ -39,5 +35,4 @@ public class IsisJdoSupportImpl implements IsisJdoSupport { return getPersistenceSession().getServicesInjector(); } - } http://git-wip-us.apache.org/repos/asf/isis/blob/8cc29a3a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/valuetypes/IsisBlobMapping.java ---------------------------------------------------------------------- diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/valuetypes/IsisBlobMapping.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/valuetypes/IsisBlobMapping.java index b684518..c5866b6 100644 --- a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/valuetypes/IsisBlobMapping.java +++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/valuetypes/IsisBlobMapping.java @@ -18,14 +18,17 @@ */ package org.apache.isis.objectstore.jdo.datanucleus.valuetypes; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + import org.datanucleus.ClassLoaderResolver; import org.datanucleus.ClassNameConstants; +import org.datanucleus.ExecutionContext; import org.datanucleus.NucleusContext; import org.datanucleus.metadata.AbstractMemberMetaData; -import org.datanucleus.store.ExecutionContext; -import org.datanucleus.store.mapped.DatastoreContainerObject; -import org.datanucleus.store.mapped.MappedStoreManager; -import org.datanucleus.store.mapped.mapping.SingleFieldMultiMapping; +import org.datanucleus.store.rdbms.RDBMSStoreManager; +import org.datanucleus.store.rdbms.mapping.java.SingleFieldMultiMapping; +import org.datanucleus.store.rdbms.table.Table; import org.apache.isis.applib.value.Blob; @@ -39,23 +42,23 @@ public class IsisBlobMapping extends SingleFieldMultiMapping { return org.apache.isis.applib.value.Blob.class; } - public void initialize(AbstractMemberMetaData mmd, DatastoreContainerObject container, ClassLoaderResolver clr) + public void initialize(AbstractMemberMetaData mmd, Table container, ClassLoaderResolver clr) { super.initialize(mmd, container, clr); - addDatastoreFields(); + addColumns(); } - public void initialize(MappedStoreManager storeMgr, String type) + public void initialize(RDBMSStoreManager storeMgr, String type) { super.initialize(storeMgr, type); - addDatastoreFields(); + addColumns(); } - protected void addDatastoreFields() + protected void addColumns() { - addDatastoreField(ClassNameConstants.JAVA_LANG_STRING); // name - addDatastoreField(ClassNameConstants.JAVA_LANG_STRING); // mime type - addDatastoreField(ClassNameConstants.JAVA_LANG_BYTE_ARRAY); // bytes + addColumns(ClassNameConstants.JAVA_LANG_STRING); // name + addColumns(ClassNameConstants.JAVA_LANG_STRING); // mime type + addColumns(ClassNameConstants.JAVA_LANG_BYTE_ARRAY); // bytes } public Object getValueForDatastoreMapping(NucleusContext nucleusCtx, int index, Object value) @@ -69,7 +72,7 @@ public class IsisBlobMapping extends SingleFieldMultiMapping { throw new IndexOutOfBoundsException(); } - public void setObject(ExecutionContext ec, Object preparedStmt, int[] exprIndex, Object value) + public void setObject(ExecutionContext ec, PreparedStatement preparedStmt, int[] exprIndex, Object value) { Blob blob = ((Blob)value); if (blob == null) { @@ -83,7 +86,7 @@ public class IsisBlobMapping extends SingleFieldMultiMapping { } } - public Object getObject(ExecutionContext ec, Object resultSet, int[] exprIndex) + public Object getObject(ExecutionContext ec, ResultSet resultSet, int[] exprIndex) { try { http://git-wip-us.apache.org/repos/asf/isis/blob/8cc29a3a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/valuetypes/IsisClobMapping.java ---------------------------------------------------------------------- diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/valuetypes/IsisClobMapping.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/valuetypes/IsisClobMapping.java index 476eea9..6d2a9b8 100644 --- a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/valuetypes/IsisClobMapping.java +++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/valuetypes/IsisClobMapping.java @@ -18,14 +18,17 @@ */ package org.apache.isis.objectstore.jdo.datanucleus.valuetypes; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + import org.datanucleus.ClassLoaderResolver; import org.datanucleus.ClassNameConstants; +import org.datanucleus.ExecutionContext; import org.datanucleus.NucleusContext; import org.datanucleus.metadata.AbstractMemberMetaData; -import org.datanucleus.store.ExecutionContext; -import org.datanucleus.store.mapped.DatastoreContainerObject; -import org.datanucleus.store.mapped.MappedStoreManager; -import org.datanucleus.store.mapped.mapping.SingleFieldMultiMapping; +import org.datanucleus.store.rdbms.RDBMSStoreManager; +import org.datanucleus.store.rdbms.mapping.java.SingleFieldMultiMapping; +import org.datanucleus.store.rdbms.table.Table; import org.apache.isis.applib.value.Clob; @@ -39,23 +42,23 @@ public class IsisClobMapping extends SingleFieldMultiMapping { return org.apache.isis.applib.value.Clob.class; } - public void initialize(AbstractMemberMetaData mmd, DatastoreContainerObject container, ClassLoaderResolver clr) + public void initialize(AbstractMemberMetaData mmd, Table container, ClassLoaderResolver clr) { super.initialize(mmd, container, clr); - addDatastoreFields(); + addColumns(); } - public void initialize(MappedStoreManager storeMgr, String type) + public void initialize(RDBMSStoreManager storeMgr, String type) { super.initialize(storeMgr, type); - addDatastoreFields(); + addColumns(); } - protected void addDatastoreFields() + protected void addColumns() { - addDatastoreField(ClassNameConstants.JAVA_LANG_STRING); // name - addDatastoreField(ClassNameConstants.JAVA_LANG_STRING); // mime type - addDatastoreField(ClassNameConstants.JAVA_LANG_CHARACTER_ARRAY); // chars + addColumns(ClassNameConstants.JAVA_LANG_STRING); // name + addColumns(ClassNameConstants.JAVA_LANG_STRING); // mime type + addColumns(ClassNameConstants.JAVA_LANG_CHARACTER_ARRAY); // chars } public Object getValueForDatastoreMapping(NucleusContext nucleusCtx, int index, Object value) @@ -69,7 +72,7 @@ public class IsisClobMapping extends SingleFieldMultiMapping { throw new IndexOutOfBoundsException(); } - public void setObject(ExecutionContext ec, Object preparedStmt, int[] exprIndex, Object value) + public void setObject(ExecutionContext ec, PreparedStatement preparedStmt, int[] exprIndex, Object value) { Clob clob = ((Clob)value); if (clob == null) { @@ -83,7 +86,7 @@ public class IsisClobMapping extends SingleFieldMultiMapping { } } - public Object getObject(ExecutionContext ec, Object resultSet, int[] exprIndex) + public Object getObject(ExecutionContext ec, ResultSet resultSet, int[] exprIndex) { try { http://git-wip-us.apache.org/repos/asf/isis/blob/8cc29a3a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/valuetypes/IsisDateMapping.java ---------------------------------------------------------------------- diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/valuetypes/IsisDateMapping.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/valuetypes/IsisDateMapping.java index 7137338..f1664ea 100644 --- a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/valuetypes/IsisDateMapping.java +++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/valuetypes/IsisDateMapping.java @@ -18,7 +18,7 @@ */ package org.apache.isis.objectstore.jdo.datanucleus.valuetypes; -import org.datanucleus.store.mapped.mapping.ObjectAsLongMapping; +import org.datanucleus.store.rdbms.mapping.java.ObjectAsLongMapping; import org.apache.isis.applib.value.Date; http://git-wip-us.apache.org/repos/asf/isis/blob/8cc29a3a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/valuetypes/IsisDateTimeMapping.java ---------------------------------------------------------------------- diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/valuetypes/IsisDateTimeMapping.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/valuetypes/IsisDateTimeMapping.java index 6dc6bc5..5234942 100644 --- a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/valuetypes/IsisDateTimeMapping.java +++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/valuetypes/IsisDateTimeMapping.java @@ -18,7 +18,7 @@ */ package org.apache.isis.objectstore.jdo.datanucleus.valuetypes; -import org.datanucleus.store.mapped.mapping.ObjectAsLongMapping; +import org.datanucleus.store.rdbms.mapping.java.ObjectAsLongMapping; import org.apache.isis.applib.value.DateTime; http://git-wip-us.apache.org/repos/asf/isis/blob/8cc29a3a/component/objectstore/jdo/pom.xml ---------------------------------------------------------------------- diff --git a/component/objectstore/jdo/pom.xml b/component/objectstore/jdo/pom.xml index 01ec14d..ca23dd1 100644 --- a/component/objectstore/jdo/pom.xml +++ b/component/objectstore/jdo/pom.xml @@ -147,36 +147,34 @@ </exclusion> </exclusions> </dependency> - <dependency> - <groupId>org.datanucleus</groupId> - <artifactId>datanucleus-core</artifactId> - <version>3.1.3</version> - </dependency> + + + <dependency> + <groupId>org.datanucleus</groupId> + <artifactId>datanucleus-core</artifactId> + <version>[3.1.99, )</version> + </dependency> + <dependency> + <groupId>org.datanucleus</groupId> + <artifactId>datanucleus-api-jdo</artifactId> + <version>[3.1.99, )</version> + </dependency> + <dependency> + <groupId>org.datanucleus</groupId> + <artifactId>datanucleus-rdbms</artifactId> + <version>[3.1.99, )</version> + </dependency> <dependency> <groupId>org.datanucleus</groupId> <artifactId>datanucleus-jodatime</artifactId> - <version>3.1.1</version> - </dependency> - <dependency> - <groupId>org.datanucleus</groupId> - <artifactId>datanucleus-enhancer</artifactId> - <version>3.1.1</version> + <version>3.2.0-release</version> </dependency> - <dependency> - <groupId>org.datanucleus</groupId> - <artifactId>datanucleus-api-jdo</artifactId> - <version>3.1.3</version> - </dependency> - <dependency> - <groupId>org.datanucleus</groupId> - <artifactId>datanucleus-rdbms</artifactId> - <version>3.1.3</version> - </dependency> - <dependency> - <groupId>org.apache.geronimo.specs</groupId> - <artifactId>geronimo-jta_1.1_spec</artifactId> - <version>1.1.1</version> - </dependency> + + <dependency> + <groupId>org.apache.geronimo.specs</groupId> + <artifactId>geronimo-jta_1.1_spec</artifactId> + <version>1.1.1</version> + </dependency> <dependency> <groupId>org.hsqldb</groupId> http://git-wip-us.apache.org/repos/asf/isis/blob/8cc29a3a/core/tck/tck-dom/pom.xml ---------------------------------------------------------------------- diff --git a/core/tck/tck-dom/pom.xml b/core/tck/tck-dom/pom.xml index 272ade4..17f678f 100644 --- a/core/tck/tck-dom/pom.xml +++ b/core/tck/tck-dom/pom.xml @@ -41,8 +41,8 @@ <plugins> <plugin> <groupId>org.datanucleus</groupId> - <artifactId>maven-datanucleus-plugin</artifactId> - <version>3.1.1</version> + <artifactId>datanucleus-maven-plugin</artifactId> + <version>3.2.0-release</version> <configuration> <fork>false</fork> <verbose>true</verbose> @@ -75,10 +75,10 @@ org.datanucleus </groupId> <artifactId> - maven-datanucleus-plugin + datanucleus-maven-plugin </artifactId> <versionRange> - [3.0.2,) + [3.2.0-release,) </versionRange> <goals> <goal>enhance</goal> http://git-wip-us.apache.org/repos/asf/isis/blob/8cc29a3a/example/application/claims/dom/pom.xml ---------------------------------------------------------------------- diff --git a/example/application/claims/dom/pom.xml b/example/application/claims/dom/pom.xml index 9e41054..aa522c4 100644 --- a/example/application/claims/dom/pom.xml +++ b/example/application/claims/dom/pom.xml @@ -33,8 +33,8 @@ <plugins> <plugin> <groupId>org.datanucleus</groupId> - <artifactId>maven-datanucleus-plugin</artifactId> - <version>3.1.1</version> + <artifactId>datanucleus-maven-plugin</artifactId> + <version>3.2.0-release</version> <configuration> <fork>false</fork> <log4jConfiguration>${basedir}/log4j.properties</log4jConfiguration> @@ -67,10 +67,10 @@ org.datanucleus </groupId> <artifactId> - maven-datanucleus-plugin + datanucleus-maven-plugin </artifactId> <versionRange> - [3.0.2,) + [3.2.0-release,) </versionRange> <goals> <goal>enhance</goal> @@ -124,18 +124,6 @@ </dependency> <dependency> <groupId>org.datanucleus</groupId> - <artifactId>datanucleus-enhancer</artifactId> - <!-- - <exclusions> - <exclusion> - <groupId>org.ow2.asm</groupId> - <artifactId>asm</artifactId> - </exclusion> - </exclusions> - --> - </dependency> - <dependency> - <groupId>org.datanucleus</groupId> <artifactId>datanucleus-api-jdo</artifactId> </dependency> @@ -153,13 +141,7 @@ <dependency> <groupId>org.datanucleus</groupId> <artifactId>datanucleus-core</artifactId> - <version>(3.0.99, 3.1.99)</version> - <scope>runtime</scope> - </dependency> - <dependency> - <groupId>org.datanucleus</groupId> - <artifactId>datanucleus-enhancer</artifactId> - <version>(3.0.99, 3.1.99)</version> + <version>(3.1.99, 3.2.99)</version> <scope>runtime</scope> </dependency> </dependencies> http://git-wip-us.apache.org/repos/asf/isis/blob/8cc29a3a/example/application/quickstart_wicket_restful_jdo/dom/pom.xml ---------------------------------------------------------------------- diff --git a/example/application/quickstart_wicket_restful_jdo/dom/pom.xml b/example/application/quickstart_wicket_restful_jdo/dom/pom.xml index 72062b1..68ae8ae 100644 --- a/example/application/quickstart_wicket_restful_jdo/dom/pom.xml +++ b/example/application/quickstart_wicket_restful_jdo/dom/pom.xml @@ -33,8 +33,8 @@ <plugins> <plugin> <groupId>org.datanucleus</groupId> - <artifactId>maven-datanucleus-plugin</artifactId> - <version>3.1.1</version> + <artifactId>datanucleus-maven-plugin</artifactId> + <version>3.2.0-release</version> <configuration> <fork>false</fork> <log4jConfiguration>${basedir}/log4j.properties</log4jConfiguration> @@ -67,10 +67,10 @@ org.datanucleus </groupId> <artifactId> - maven-datanucleus-plugin + datanucleus-maven-plugin </artifactId> <versionRange> - [3.0.2,) + [3.2.0-release,) </versionRange> <goals> <goal>enhance</goal> @@ -111,10 +111,6 @@ </dependency> <dependency> <groupId>org.datanucleus</groupId> - <artifactId>datanucleus-enhancer</artifactId> - </dependency> - <dependency> - <groupId>org.datanucleus</groupId> <artifactId>datanucleus-api-jdo</artifactId> </dependency> @@ -140,13 +136,7 @@ <dependency> <groupId>org.datanucleus</groupId> <artifactId>datanucleus-core</artifactId> - <version>(3.0.99, 3.1.99)</version> - <scope>runtime</scope> - </dependency> - <dependency> - <groupId>org.datanucleus</groupId> - <artifactId>datanucleus-enhancer</artifactId> - <version>(3.0.99, 3.1.99)</version> + <version>(3.1.99, 3.2.99)</version> <scope>runtime</scope> </dependency> </dependencies> http://git-wip-us.apache.org/repos/asf/isis/blob/8cc29a3a/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/webapp/WEB-INF/persistor_datanucleus.properties ---------------------------------------------------------------------- diff --git a/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/webapp/WEB-INF/persistor_datanucleus.properties b/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/webapp/WEB-INF/persistor_datanucleus.properties index d0b06d0..9228a69 100644 --- a/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/webapp/WEB-INF/persistor_datanucleus.properties +++ b/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/webapp/WEB-INF/persistor_datanucleus.properties @@ -27,7 +27,7 @@ isis.persistor.datanucleus.RegisterEntities.packagePrefix=dom # # DataNucleus' configuration # -isis.persistor.datanucleus.impl.javax.jdo.PersistenceManagerFactoryClass=org.datanucleus.api.jdo.JDOPersistenceManagerFactory +#isis.persistor.datanucleus.impl.javax.jdo.PersistenceManagerFactoryClass=org.apache.isis.objectstore.jdo.datanucleus.JDOPersistenceManagerFactoryForIsis isis.persistor.datanucleus.impl.datanucleus.autoCreateSchema=true isis.persistor.datanucleus.impl.datanucleus.validateTables=true isis.persistor.datanucleus.impl.datanucleus.validateConstraints=true http://git-wip-us.apache.org/repos/asf/isis/blob/8cc29a3a/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/webapp/about/index.html ---------------------------------------------------------------------- diff --git a/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/webapp/about/index.html b/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/webapp/about/index.html index 9fcbb9c..cb966e6 100644 --- a/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/webapp/about/index.html +++ b/example/application/quickstart_wicket_restful_jdo/viewer-webapp/src/main/webapp/about/index.html @@ -112,14 +112,6 @@ th, td { </li> </ul> </li> - <li>Domain classes (demo audit functionality) (in <tt>dom</tt> module)</a> - <ul> - <li><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/dom/src/main/java/dom/audit/AuditEntry.java"><tt>AuditEntry</tt></a> domain entity - </li> - <li><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/dom/src/main/java/dom/audit/AuditServiceDemo.java"><tt>AuditService</tt></a> domain service (repository/factory) - </li> - </ul> - </li> <li>Fixture classes (in <tt>fixture</tt> module)</a> <ul> <li><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/fixture/src/main/java/fixture/todo/ToDoItemsFixture.java"><tt>ToDoItemsFixture</tt></a> example fixture data (since configured for in-memory HSQLDB) @@ -144,7 +136,8 @@ th, td { </li> <li><tt><a href="https://github.com/apache/isis/blob/master/example/application/quickstart%5Fwicket_restful_jdo/viewer-webapp/src/main/webapp/WEB-INF/isis.properties">WEB-INF/isis.properties</a></tt> (in <tt>viewer-webapp</tt> module)</a> <ul> - <li><tt>isis.services</tt> - specifies the three domain services (<tt>ToDoItemsJdo</tt>, <tt>AuditServiceDemo</tt> and <tt>ToDoItemsFixtureService</tt>) + <li><tt>isis.services</tt> - specifies the two domain services described above (<tt>ToDoItemsJdo</tt> and <tt>ToDoItemsFixtureService</tt>), appearing on the menu bar in the Wicket viewer, + along with a number of hidden framework-provided domain services demonstrating Isis' support for publishing, auditing and customizable error handling </li> <li><tt>isis.persistor</tt> - specifies to use the JDO object store </li> @@ -177,7 +170,7 @@ th, td { </li> <li>Assuming you are using a persistent data store, then remove the <tt>ToDoItemsFixtureService</tt> from the <tt>isis.properties</tt> file (<tt>isis.services</tt> key). Alternatively you could keep but refactor to provide a similar service for your own application's domain. </li> - <li>Decide if you require the audit service. If you don't, then remove the <tt>AuditDemoService</tt> from the <tt>isis.properties</tt> file (<tt>isis.services</tt> key). If you do, then refactor the <tt>AuditServiceDemo</tt> according to your requirements (the only requirement is that it implements <tt>org.apache.isis.objectstore.jdo.applib.AuditService</tt>) + <li>Replace (or remove) the publishing and auditing service implementations. </li> <li>If you want the wicket viewer but NOT the restful objects viewer, then remove/comment out the <tt>ResteasyBootstrap</tt>, <tt>IsisSessionFilterForRestfulObjects</tt>, <tt>RestfulObjectsRestEasyDispatcher</tt> from <tt>web.xml</tt> </li>
