Author: chris.laprun(a)jboss.com
Date: 2011-09-12 06:52:17 -0400 (Mon, 12 Sep 2011)
New Revision: 7353
Added:
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/jcr/mapping/mixins/
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/jcr/mapping/mixins/BaseMixin.java
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/jcr/mapping/mixins/LastModified.java
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/jcr/mapping/mixins/ModifyRegistrationRequired.java
Modified:
components/wsrp/branches/clustering/consumer/src/main/java/org/gatein/wsrp/consumer/ProducerInfo.java
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/consumer/migration/JCRMigrationService.java
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/consumer/registry/JCRConsumerRegistry.java
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/jcr/BaseChromatticPersister.java
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/jcr/StoresByPathManager.java
components/wsrp/branches/clustering/jcr-impl/src/main/resources/conf/nodetypes/consumers-configuration-nodetypes.xml
Log:
- Added support for last modified time and check if ModifyRegistration is required on
ProducerInfo via JCR mixins.
Modified:
components/wsrp/branches/clustering/consumer/src/main/java/org/gatein/wsrp/consumer/ProducerInfo.java
===================================================================
---
components/wsrp/branches/clustering/consumer/src/main/java/org/gatein/wsrp/consumer/ProducerInfo.java 2011-09-12
10:49:34 UTC (rev 7352)
+++
components/wsrp/branches/clustering/consumer/src/main/java/org/gatein/wsrp/consumer/ProducerInfo.java 2011-09-12
10:52:17 UTC (rev 7353)
@@ -105,6 +105,16 @@
/** The activated status of the associated Consumer */
private boolean persistentActive;
+ // GTNWSRP-239: information that's currently transient but should probably be
persistent
+ /**
+ * GTNWSRP-239: whether or not this ProducerInfo requires ModifyRegistration to be
called, currently persisted via
+ * mixin
+ */
+ private boolean isModifyRegistrationRequired;
+
+ /** GTNWSRP-239: last modification epoch: currently persistent via mixin */
+ private long lastModified;
+
// Transient information
/** The Cookie handling policy required by the Producer */
@@ -122,8 +132,6 @@
/** Time at which the cache expires */
private long expirationTimeMillis;
- private boolean isModifyRegistrationRequired;
-
private final ConsumerRegistrySPI registry;
private static final String ERASED_LOCAL_REGISTRATION_INFORMATION = "Erased local
registration information!";
@@ -1277,4 +1285,14 @@
return eventDescriptions.get(name);
}
}
+
+ public long getLastModified()
+ {
+ return lastModified;
+ }
+
+ public void setLastModified(long lastModified)
+ {
+ this.lastModified = lastModified;
+ }
}
Modified:
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/consumer/migration/JCRMigrationService.java
===================================================================
---
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/consumer/migration/JCRMigrationService.java 2011-09-12
10:49:34 UTC (rev 7352)
+++
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/consumer/migration/JCRMigrationService.java 2011-09-12
10:52:17 UTC (rev 7353)
@@ -32,6 +32,7 @@
import org.gatein.wsrp.consumer.migration.mapping.ExportedStateMapping;
import org.gatein.wsrp.jcr.ChromatticPersister;
import org.gatein.wsrp.jcr.StoresByPathManager;
+import org.gatein.wsrp.jcr.mapping.mixins.LastModified;
import java.util.ArrayList;
import java.util.Collections;
@@ -189,6 +190,11 @@
return getPathFor(exportInfo.getExportTime());
}
+ public LastModified lastModifiedToUpdateOnDelete(ChromatticSession session)
+ {
+ return null;
+ }
+
private String getPathFor(final long exportTime)
{
return getParentPath() + "/" + exportTime;
Modified:
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/consumer/registry/JCRConsumerRegistry.java
===================================================================
---
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/consumer/registry/JCRConsumerRegistry.java 2011-09-12
10:49:34 UTC (rev 7352)
+++
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/consumer/registry/JCRConsumerRegistry.java 2011-09-12
10:52:17 UTC (rev 7353)
@@ -35,6 +35,9 @@
import org.gatein.wsrp.consumer.registry.xml.XMLConsumerRegistry;
import org.gatein.wsrp.jcr.ChromatticPersister;
import org.gatein.wsrp.jcr.StoresByPathManager;
+import org.gatein.wsrp.jcr.mapping.mixins.BaseMixin;
+import org.gatein.wsrp.jcr.mapping.mixins.LastModified;
+import org.gatein.wsrp.jcr.mapping.mixins.ModifyRegistrationRequired;
import org.gatein.wsrp.registration.mapping.RegistrationPropertyDescriptionMapping;
import javax.jcr.RepositoryException;
@@ -65,12 +68,14 @@
public static final List<Class> mappingClasses = new ArrayList<Class>(6);
private InputStream configurationIS;
+ private long lastModified;
+// private Map<String, ProducerInfo> infoCache;
static
{
Collections.addAll(mappingClasses, ProducerInfosMapping.class,
ProducerInfoMapping.class,
EndpointInfoMapping.class, RegistrationInfoMapping.class,
RegistrationPropertyMapping.class,
- RegistrationPropertyDescriptionMapping.class);
+ RegistrationPropertyDescriptionMapping.class, LastModified.class,
ModifyRegistrationRequired.class);
}
public JCRConsumerRegistry(ChromatticPersister persister) throws Exception
@@ -122,6 +127,17 @@
info.setKey(key);
pim.initFrom(info);
+ // update cache
+ final long now = System.currentTimeMillis();
+ lastModified = now;
+// getRefreshedInfoCache(session).put(info.getId(), info);
+
+ // GTNWSRP-239
+ getMixin(pims, session, LastModified.class).setLastModified(now);
+ getMixin(pim, session, LastModified.class).setLastModified(now);
+ getMixin(pim, session,
ModifyRegistrationRequired.class).setModifyRegistrationRequired(info.isModifyRegistrationRequired());
+ info.setLastModified(now);
+
persister.closeSession(true);
}
catch (Exception e)
@@ -167,13 +183,27 @@
idUnchanged = oldId.equals(newId);
+ final long now = System.currentTimeMillis();
if (!idUnchanged)
{
ProducerInfosMapping pims = getProducerInfosMapping(session);
Map<String, ProducerInfoMapping> nameToProducerInfoMap =
pims.getNameToProducerInfoMap();
nameToProducerInfoMap.put(pim.getId(), pim);
+
+ // update cache
+ /*getRefreshedInfoCache(session).remove(oldId);
+ getRefreshedInfoCache(session).put(newId, producerInfo);*/
+
+ // GTNWSRP-239
+ getMixin(pims, session, LastModified.class).setLastModified(now);
+ lastModified = now;
}
+ // GTNWSRP-239
+ getMixin(pim, session,
ModifyRegistrationRequired.class).setModifyRegistrationRequired(producerInfo.isModifyRegistrationRequired());
+ getMixin(pim, session, LastModified.class).setLastModified(now);
+ producerInfo.setLastModified(now);
+
persister.closeSession(true);
}
@@ -184,13 +214,53 @@
public Iterator<ProducerInfo> getProducerInfosFromStorage()
{
ChromatticSession session = persister.getSession();
+ final Iterator<ProducerInfo> iterator = new
ProducerInfoIterator(getRefreshedInfoCache(session).getConsumers().iterator());
+ persister.closeSession(false);
+ return iterator;
+ }
+
+ /*private Map<String, ProducerInfo> getRefreshedInfoCache(ChromatticSession
session)
+ {
ProducerInfosMapping producerInfosMapping = getProducerInfosMapping(session);
- List<ProducerInfoMapping> mappings =
producerInfosMapping.getProducerInfos();
+ // check if we need to refresh the local cache
+ if (lastModified < getMixin(producerInfosMapping, session,
LastModified.class).getLastModified())
+ {
+ List<ProducerInfoMapping> mappings =
producerInfosMapping.getProducerInfos();
- persister.closeSession(true);
- return new MappingToProducerInfoIterator(mappings.iterator(), this);
+ for (ProducerInfoMapping mapping : mappings)
+ {
+ infoCache.put(mapping.getId(), mapping.toModel(null, this));
+ }
+
+ lastModified = System.currentTimeMillis();
+ }
+
+ return infoCache;
+ }*/
+
+ private ConsumerCache getRefreshedInfoCache(ChromatticSession session)
+ {
+ ProducerInfosMapping producerInfosMapping = getProducerInfosMapping(session);
+
+ // check if we need to refresh the local cache
+ if (lastModified < getMixin(producerInfosMapping, session,
LastModified.class).getLastModified())
+ {
+ List<ProducerInfoMapping> mappings =
producerInfosMapping.getProducerInfos();
+
+ for (ProducerInfoMapping pim : mappings)
+ {
+ if (lastModified < getMixin(pim, session,
LastModified.class).getLastModified())
+ {
+ consumers.putConsumer(pim.getId(), createConsumerFrom(pim.toModel(null,
this)));
+ }
+ }
+
+ lastModified = System.currentTimeMillis();
+ }
+
+ return consumers;
}
public ProducerInfo loadProducerInfo(String id)
@@ -202,7 +272,28 @@
if (pim != null)
{
- return pim.toModel(null, this);
+ WSRPConsumer consumer = getRefreshedInfoCache(session).getConsumer(id);
+
+ if (consumer == null)
+ {
+ return null;
+ }
+ else
+ {
+ return consumer.getProducerInfo();
+ /*ProducerInfo producerInfo = consumer.getProducerInfo();
+ if(producerInfo == null || producerInfo.getLastModified() <
getMixin(pim, session, LastModified.class).getLastModified())
+ {
+ producerInfo = pim.toModel(producerInfo, this);
+ getRefreshedInfoCache(session).put(id, producerInfo);
+ return producerInfo;
+ }
+ else
+ {
+ return producerInfo;
+ }*/
+ }
+
}
else
{
@@ -215,6 +306,18 @@
}
}
+ private <M extends BaseMixin> M getMixin(Object objectToCheck, ChromatticSession
session, Class<M> type)
+ {
+ M mixin = session.getEmbedded(objectToCheck, type);
+ if (mixin == null)
+ {
+ mixin = session.create(type);
+ session.setEmbedded(objectToCheck, type, mixin);
+ mixin.initializeValue();
+ }
+ return mixin;
+ }
+
@Override
public boolean containsConsumer(String id)
{
@@ -316,8 +419,8 @@
// Save to JCR
List<ProducerInfoMapping> infos =
producerInfosMapping.getProducerInfos();
- List<WSRPConsumer> consumers = fromXML.getConfiguredConsumers();
- for (WSRPConsumer consumer : consumers)
+ List<WSRPConsumer> xmlConsumers = fromXML.getConfiguredConsumers();
+ for (WSRPConsumer consumer : xmlConsumers)
{
ProducerInfo info = consumer.getProducerInfo();
@@ -328,7 +431,16 @@
// init it from ProducerInfo
pim.initFrom(info);
+
+ // update ProducerInfo with the persistence key
+ info.setKey(pim.getKey());
+
+ consumers.putConsumer(info.getId(), consumer);
}
+
+ lastModified = System.currentTimeMillis();
+ getMixin(producerInfosMapping, session,
LastModified.class).setLastModified(lastModified);
+ session.save();
}
}
@@ -340,6 +452,20 @@
return getPathFor(needsComputedPath);
}
+ public LastModified lastModifiedToUpdateOnDelete(ChromatticSession session)
+ {
+ final ProducerInfosMapping pims = session.findByPath(ProducerInfosMapping.class,
PRODUCER_INFOS_PATH);
+ if (pims != null)
+ {
+ // GTNWSRP-239
+ return getMixin(pims, session, LastModified.class);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
private static String getPathFor(ProducerInfo info)
{
return getPathFor(info.getId());
Modified:
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/jcr/BaseChromatticPersister.java
===================================================================
---
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/jcr/BaseChromatticPersister.java 2011-09-12
10:49:34 UTC (rev 7352)
+++
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/jcr/BaseChromatticPersister.java 2011-09-12
10:52:17 UTC (rev 7353)
@@ -1,24 +1,25 @@
/*
-* JBoss, a division of Red Hat
-* Copyright 2008, Red Hat Middleware, LLC, and individual contributors as indicated
-* by the @authors tag. See the copyright.txt in the distribution for a
-* full listing of individual contributors.
-*
-* This is free software; you can redistribute it and/or modify it
-* under the terms of the GNU Lesser General Public License as
-* published by the Free Software Foundation; either version 2.1 of
-* the License, or (at your option) any later version.
-*
-* This software is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this software; if not, write to the Free
-* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-* 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
-*/
+ * JBoss, a division of Red Hat
+ * Copyright 2011, Red Hat Middleware, LLC, and individual
+ * contributors as indicated by the @authors tag. See the
+ * copyright.txt in the distribution for a full listing of
+ * individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
package org.gatein.wsrp.jcr;
@@ -27,6 +28,7 @@
import org.chromattic.api.ChromatticSession;
import org.gatein.common.util.ParameterValidation;
import org.gatein.wsrp.jcr.mapping.BaseMapping;
+import org.gatein.wsrp.jcr.mapping.mixins.LastModified;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
@@ -125,7 +127,7 @@
getOpenedSessionOrFail().save();
}
- public <T> boolean delete(T toDelete,
org.gatein.wsrp.jcr.StoresByPathManager<T> manager)
+ public <T> boolean delete(T toDelete, StoresByPathManager<T> manager)
{
Class<? extends Object> modelClass = toDelete.getClass();
Class<? extends BaseMapping> baseMappingClass =
modelToMapping.get(modelClass);
@@ -141,6 +143,13 @@
if (old != null)
{
session.remove(old);
+
+ // update last modified of element linked to toDelete if needed
+ final LastModified lastModified =
manager.lastModifiedToUpdateOnDelete(session);
+ if (lastModified != null)
+ {
+ lastModified.setLastModified(System.currentTimeMillis());
+ }
closeSession(true);
return true;
}
Modified:
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/jcr/StoresByPathManager.java
===================================================================
---
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/jcr/StoresByPathManager.java 2011-09-12
10:49:34 UTC (rev 7352)
+++
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/jcr/StoresByPathManager.java 2011-09-12
10:52:17 UTC (rev 7353)
@@ -23,6 +23,9 @@
package org.gatein.wsrp.jcr;
+import org.chromattic.api.ChromatticSession;
+import org.gatein.wsrp.jcr.mapping.mixins.LastModified;
+
/**
* @author <a href="mailto:chris.laprun@jboss.com">Chris
Laprun</a>
* @version $Revision$
@@ -30,4 +33,12 @@
public interface StoresByPathManager<C>
{
String getChildPath(C needsComputedPath);
+
+ /**
+ * // GTNWSRP-239
+ *
+ * @param session
+ * @return
+ */
+ LastModified lastModifiedToUpdateOnDelete(ChromatticSession session);
}
Added:
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/jcr/mapping/mixins/BaseMixin.java
===================================================================
---
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/jcr/mapping/mixins/BaseMixin.java
(rev 0)
+++
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/jcr/mapping/mixins/BaseMixin.java 2011-09-12
10:52:17 UTC (rev 7353)
@@ -0,0 +1,30 @@
+/*
+ * JBoss, a division of Red Hat
+ * Copyright 2011, Red Hat Middleware, LLC, and individual
+ * contributors as indicated by the @authors tag. See the
+ * copyright.txt in the distribution for a full listing of
+ * individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+
+package org.gatein.wsrp.jcr.mapping.mixins;
+
+/** @author <a href="mailto:chris.laprun@jboss.com">Chris
Laprun</a> */
+public interface BaseMixin
+{
+ void initializeValue();
+}
Added:
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/jcr/mapping/mixins/LastModified.java
===================================================================
---
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/jcr/mapping/mixins/LastModified.java
(rev 0)
+++
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/jcr/mapping/mixins/LastModified.java 2011-09-12
10:52:17 UTC (rev 7353)
@@ -0,0 +1,42 @@
+/*
+ * JBoss, a division of Red Hat
+ * Copyright 2011, Red Hat Middleware, LLC, and individual
+ * contributors as indicated by the @authors tag. See the
+ * copyright.txt in the distribution for a full listing of
+ * individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+
+package org.gatein.wsrp.jcr.mapping.mixins;
+
+import org.chromattic.api.annotations.MixinType;
+import org.chromattic.api.annotations.Property;
+
+/** @author <a href="mailto:chris.laprun@jboss.com">Chris
Laprun</a> */
+@MixinType(name = "wsrp:lastmodified")
+public abstract class LastModified implements BaseMixin
+{
+ @Property(name = "wsrp:time")
+ public abstract long getLastModified();
+
+ public abstract void setLastModified(long lastModified);
+
+ public void initializeValue()
+ {
+ setLastModified(System.currentTimeMillis());
+ }
+}
Added:
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/jcr/mapping/mixins/ModifyRegistrationRequired.java
===================================================================
---
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/jcr/mapping/mixins/ModifyRegistrationRequired.java
(rev 0)
+++
components/wsrp/branches/clustering/jcr-impl/src/main/java/org/gatein/wsrp/jcr/mapping/mixins/ModifyRegistrationRequired.java 2011-09-12
10:52:17 UTC (rev 7353)
@@ -0,0 +1,42 @@
+/*
+ * JBoss, a division of Red Hat
+ * Copyright 2011, Red Hat Middleware, LLC, and individual
+ * contributors as indicated by the @authors tag. See the
+ * copyright.txt in the distribution for a full listing of
+ * individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+
+package org.gatein.wsrp.jcr.mapping.mixins;
+
+import org.chromattic.api.annotations.MixinType;
+import org.chromattic.api.annotations.Property;
+
+/** @author <a href="mailto:chris.laprun@jboss.com">Chris
Laprun</a> */
+@MixinType(name = "wsrp:modifyregistrationrequired")
+public abstract class ModifyRegistrationRequired implements BaseMixin
+{
+ @Property(name = "wsrp:ismodifyregistrationrequired")
+ public abstract boolean isModifyRegistrationRequired();
+
+ public abstract void setModifyRegistrationRequired(boolean
modifyRegistrationRequired);
+
+ public void initializeValue()
+ {
+ setModifyRegistrationRequired(false);
+ }
+}
Modified:
components/wsrp/branches/clustering/jcr-impl/src/main/resources/conf/nodetypes/consumers-configuration-nodetypes.xml
===================================================================
---
components/wsrp/branches/clustering/jcr-impl/src/main/resources/conf/nodetypes/consumers-configuration-nodetypes.xml 2011-09-12
10:49:34 UTC (rev 7352)
+++
components/wsrp/branches/clustering/jcr-impl/src/main/resources/conf/nodetypes/consumers-configuration-nodetypes.xml 2011-09-12
10:52:17 UTC (rev 7353)
@@ -26,6 +26,24 @@
<nodeTypes
xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
xmlns:mix="http://www.jcp.org/jcr/mix/1.0"
xmlns:jcr="http://www.jcp.org/jcr/1.0">
+ <nodeType name="wsrp:lastmodified" isMixin="true"
hasOrderableChildNodes="false" primaryItemName="">
+ <propertyDefinitions>
+ <propertyDefinition name="wsrp:time" requiredType="long"
autoCreated="false" mandatory="false"
+ onParentVersion="COPY" protected="false"
multiple="false">
+ <valueConstraints/>
+ </propertyDefinition>
+ </propertyDefinitions>
+ </nodeType>
+
+ <nodeType name="wsrp:modifyregistrationrequired" isMixin="true"
hasOrderableChildNodes="false" primaryItemName="">
+ <propertyDefinitions>
+ <propertyDefinition name="wsrp:ismodifyregistrationrequired"
requiredType="boolean" autoCreated="false"
+ mandatory="false" onParentVersion="COPY"
protected="false" multiple="false">
+ <valueConstraints/>
+ </propertyDefinition>
+ </propertyDefinitions>
+ </nodeType>
+
<nodeType name="wsrp:producerinfos" isMixin="false"
hasOrderableChildNodes="true" primaryItemName="">
<supertypes>
<supertype>nt:base</supertype>