You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2014/01/22 23:03:44 UTC
[1/2] git commit: ISIS-654: changes to QueryResultsCache API
Updated Branches:
refs/heads/master b6a1bea37 -> 6b497b0ca
ISIS-654: changes to QueryResultsCache API
get(), additional overloads, make Key and Value nested static classes public
In addition, improved toString() for logging.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/ec91d22a
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/ec91d22a
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/ec91d22a
Branch: refs/heads/master
Commit: ec91d22a7f3a9e7102e971d99a2631cb07d0fe7b
Parents: b6a1bea
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Jan 22 22:02:17 2014 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Jan 22 22:02:17 2014 +0000
----------------------------------------------------------------------
.../queryresultscache/QueryResultsCache.java | 95 ++++++++++++++++----
.../QueryResultsCache_KeyTest.java | 20 +++++
2 files changed, 99 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/ec91d22a/core/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCache.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCache.java b/core/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCache.java
index 80954c7..f62f888 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCache.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCache.java
@@ -24,23 +24,37 @@ import javax.enterprise.context.RequestScoped;
import com.google.common.collect.Maps;
-import org.apache.isis.applib.services.queryresultscache.QueryResultsCache.CacheKey;
-import org.apache.isis.applib.services.queryresultscache.QueryResultsCache.CacheValue;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.isis.applib.annotation.Programmatic;
@RequestScoped
public class QueryResultsCache {
- static class CacheKey {
+ private static final Logger LOG = LoggerFactory.getLogger(QueryResultsCache.class);
+
+ public static class Key {
private final Class<?> callingClass;
private final String methodName;
private final Object[] keys;
- public CacheKey(Class<?> callingClass, String methodName, Object... keys) {
+ public Key(Class<?> callingClass, String methodName, Object... keys) {
this.callingClass = callingClass;
this.methodName = methodName;
this.keys = keys;
}
+ public Class<?> getCallingClass() {
+ return callingClass;
+ }
+ public String getMethodName() {
+ return methodName;
+ }
+ public Object[] getKeys() {
+ return keys;
+ }
+
@Override
public boolean equals(Object obj) {
if (this == obj)
@@ -49,7 +63,7 @@ public class QueryResultsCache {
return false;
if (getClass() != obj.getClass())
return false;
- CacheKey other = (CacheKey) obj;
+ Key other = (Key) obj;
if (callingClass == null) {
if (other.callingClass != null)
return false;
@@ -74,32 +88,81 @@ public class QueryResultsCache {
result = prime * result + ((methodName == null) ? 0 : methodName.hashCode());
return result;
}
+
+ @Override
+ public String toString() {
+ return callingClass.getName() + "#" + methodName + Arrays.toString(keys);
+ }
}
- public static class CacheValue {
- public CacheValue(Object object) {
- this.object = object;
+ public static class Value<T> {
+ public Value(T result) {
+ this.result = result;
+ }
+ private T result;
+ public T getResult() {
+ return result;
}
- Object object;
}
- private final Map<CacheKey, CacheValue> cache = Maps.newHashMap();
+ // //////////////////////////////////////
+
+ private final Map<Key, Value<?>> cache = Maps.newHashMap();
+
+ @Programmatic
+ public <T> T execute(final Callable<T> callable, final Class<?> callingClass, final String methodName, final Object... keys) {
+ final Key cacheKey = new Key(callingClass, methodName, keys);
+ return execute(callable, cacheKey);
+ }
+
+ @Programmatic
@SuppressWarnings("unchecked")
- public <T> T execute(Callable<T> callable, Class<?> callingClass, String methodName, Object... keys) {
+ public <T> T execute(final Callable<T> callable, final Key cacheKey) {
try {
- final CacheKey ck = new CacheKey(callingClass, methodName, keys);
- final CacheValue cv = cache.get(ck);
- if(cv != null) {
- return (T) cv.object;
+ final Value<?> cacheValue = cache.get(cacheKey);
+ logHitOrMiss(cacheKey, cacheValue);
+ if(cacheValue != null) {
+ return (T) cacheValue.getResult();
}
// cache miss, so get the result, and cache
T result = callable.call();
- cache.put(ck, new CacheValue(result));
+ put(cacheKey, result);
return result;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
+ @Programmatic
+ public <T> QueryResultsCache.Value<T> get(final Class<?> callingClass, final String methodName, final Object... keys) {
+ return get(new Key(callingClass, methodName, keys));
+ }
+
+ @Programmatic
+ @SuppressWarnings("unchecked")
+ public <T> QueryResultsCache.Value<T> get(final QueryResultsCache.Key cacheKey) {
+ Value<T> value = (Value<T>) cache.get(cacheKey);
+ logHitOrMiss(cacheKey, value);
+ return value;
+ }
+
+ @Programmatic
+ public <T> void put(final Key cacheKey, final T result) {
+ if(LOG.isDebugEnabled()) {
+ LOG.debug("PUT: " + cacheKey);
+ }
+ cache.put(cacheKey, new Value<T>(result));
+ }
+
+ private static void logHitOrMiss(final Key cacheKey, final Value<?> cacheValue) {
+ if(!LOG.isDebugEnabled()) {
+ return;
+ }
+ String hitOrMiss = cacheValue != null ? "HIT" : "MISS";
+ LOG.debug( hitOrMiss + ": " + cacheKey.toString());
+ }
+
+
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/ec91d22a/core/applib/src/test/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCache_KeyTest.java
----------------------------------------------------------------------
diff --git a/core/applib/src/test/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCache_KeyTest.java b/core/applib/src/test/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCache_KeyTest.java
new file mode 100644
index 0000000..2bd5e29
--- /dev/null
+++ b/core/applib/src/test/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCache_KeyTest.java
@@ -0,0 +1,20 @@
+package org.apache.isis.applib.services.queryresultscache;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import org.junit.Test;
+
+public class QueryResultsCache_KeyTest {
+
+ private QueryResultsCache.Key cacheKey;
+
+ static class A {}
+ @Test
+ public void toStringIs() {
+
+ cacheKey = new QueryResultsCache.Key(A.class, "foo", "key1", 2, 3, "key4");
+ assertThat(cacheKey.toString(), is("org.apache.isis.applib.services.queryresultscache.QueryResultsCache_KeyTest$A#foo[key1, 2, 3, key4]"));
+ }
+
+}
[2/2] git commit: ISIS-651: further changes for JRebel support
Posted by da...@apache.org.
ISIS-651: further changes for JRebel support
provide ability to discard PMF
additions to SimpleApp with the JRebel config.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/6b497b0c
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/6b497b0c
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/6b497b0c
Branch: refs/heads/master
Commit: 6b497b0ca8f9bf20fcef0ad54db9c0d3a8971346
Parents: ec91d22
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Jan 22 22:03:08 2014 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Jan 22 22:03:08 2014 +0000
----------------------------------------------------------------------
.../DataNucleusApplicationComponents.java | 59 ++++++++++++++++----
...ataNucleusPersistenceMechanismInstaller.java | 8 +--
...tenceQueryFindUsingApplibQueryProcessor.java | 7 +--
component/objectstore/jdo/pom.xml | 12 +++-
.../dom/src/main/java/dom/todo/ToDoItem.java | 1 +
.../src/main/java/dom/simple/SimpleObject.java | 10 ++--
.../src/main/java/dom/simple/SimpleObjects.java | 7 +--
.../dom/src/main/resources/rebel.xml | 9 +++
.../launch/SimpleApp-PROTOTYPE-jrebel.launch | 31 ++++++++++
.../webapp/src/main/resources/rebel.xml | 21 +++++++
10 files changed, 136 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/6b497b0c/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusApplicationComponents.java
----------------------------------------------------------------------
diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusApplicationComponents.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusApplicationComponents.java
index cf4e41c..18cb6ad 100644
--- a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusApplicationComponents.java
+++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusApplicationComponents.java
@@ -18,7 +18,6 @@
*/
package org.apache.isis.objectstore.jdo.datanucleus;
-import java.util.Collections;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
@@ -32,6 +31,7 @@ import com.google.common.collect.Maps;
import org.datanucleus.NucleusContext;
import org.datanucleus.api.jdo.JDOPersistenceManagerFactory;
+import org.datanucleus.metadata.MetaDataManager;
import org.datanucleus.store.schema.SchemaAwareStoreManager;
import org.apache.isis.core.commons.components.ApplicationScopedComponent;
@@ -44,20 +44,63 @@ import org.apache.isis.objectstore.jdo.metamodel.facets.object.query.JdoQueryFac
public class DataNucleusApplicationComponents implements ApplicationScopedComponent {
- private final PersistenceManagerFactory persistenceManagerFactory;
- private final Map<String, JdoNamedQuery> namedQueryByName;
+
+ ///////////////////////////////////////////////////////////////////////////
+ // JRebel support
+ ///////////////////////////////////////////////////////////////////////////
+
+ private static DataNucleusApplicationComponents instance;
- private final IsisLifecycleListener lifecycleListener;
- private final FrameworkSynchronizer synchronizer;
+ /**
+ * For JRebel plugin
+ */
+ public static MetaDataManager getMetaDataManager() {
+ return instance != null
+ ? ((JDOPersistenceManagerFactory)instance.persistenceManagerFactory).getNucleusContext().getMetaDataManager()
+ : null;
+ }
+
+ public static void markAsStale() {
+ if(instance != null) {
+ instance.stale = true;
+ }
+ }
+ private boolean stale = false;
+ public boolean isStale() {
+ return stale;
+ }
///////////////////////////////////////////////////////////////////////////
//
///////////////////////////////////////////////////////////////////////////
+
+ private final Set<String> persistableClassNameSet;
+ private final Map<String, String> props;
+
+ private final IsisLifecycleListener lifecycleListener;
+ private final FrameworkSynchronizer synchronizer;
+
+ private Map<String, JdoNamedQuery> namedQueryByName;
+ private PersistenceManagerFactory persistenceManagerFactory;
public DataNucleusApplicationComponents(
final Map<String, String> props,
final Set<String> persistableClassNameSet) {
+
+ this.props = props;
+ this.persistableClassNameSet = persistableClassNameSet;
+
+ this.synchronizer = new FrameworkSynchronizer();
+ this.lifecycleListener = new IsisLifecycleListener(synchronizer);
+
+ init(props, persistableClassNameSet);
+
+ // for JRebel plugin
+ instance = this;
+ }
+
+ private void init(final Map<String, String> props, final Set<String> persistableClassNameSet) {
final String persistableClassNames = Joiner.on(',').join(persistableClassNameSet);
props.put("datanucleus.autoStartClassNames", persistableClassNames);
@@ -68,10 +111,8 @@ public class DataNucleusApplicationComponents implements ApplicationScopedCompon
createSchema(props, persistableClassNameSet);
}
- namedQueryByName = Collections.unmodifiableMap(catalogNamedQueries(persistableClassNameSet));
+ namedQueryByName = catalogNamedQueries(persistableClassNameSet);
- synchronizer = new FrameworkSynchronizer();
- lifecycleListener = new IsisLifecycleListener(synchronizer);
}
public PersistenceManagerFactory getPersistenceManagerFactory() {
@@ -157,6 +198,4 @@ public class DataNucleusApplicationComponents implements ApplicationScopedCompon
lifecycleListener.setSuspended(false);
}
-
-
}
http://git-wip-us.apache.org/repos/asf/isis/blob/6b497b0c/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 92e8f22..eea7d7d 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
@@ -112,7 +112,10 @@ public class DataNucleusPersistenceMechanismInstaller extends PersistenceMechani
}
private void createDataNucleusApplicationComponentsIfRequired(IsisConfiguration configuration) {
- if(applicationComponents != null) {
+ // this is, perhaps doing more work than necessary...
+ // maybe retain the applicationComponents and just tell it to discard its PMF?
+ // (doubt will make much different in terms of the amount of time to process, though)
+ if(applicationComponents != null && !applicationComponents.isStale()) {
return;
}
@@ -248,7 +251,6 @@ public class DataNucleusPersistenceMechanismInstaller extends PersistenceMechani
return new DataNucleusPojoRecreator();
}
-
////////////////////////////////////////////////////////////////////////
public PersistenceManagerFactory getPersistenceManagerFactory() {
@@ -263,6 +265,4 @@ public class DataNucleusPersistenceMechanismInstaller extends PersistenceMechani
return IsisContext.getSpecificationLoader();
}
-
-
}
http://git-wip-us.apache.org/repos/asf/isis/blob/6b497b0c/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java
----------------------------------------------------------------------
diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java
index d1c49ef..7f611f1 100644
--- a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java
+++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java
@@ -32,11 +32,9 @@ import org.slf4j.LoggerFactory;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.services.container.query.QueryCardinality;
-import org.apache.isis.core.metamodel.spec.ObjectAdapterUtils;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
import org.apache.isis.core.runtime.persistence.query.PersistenceQueryFindUsingApplibQueryDefault;
-import org.apache.isis.objectstore.jdo.datanucleus.DataNucleusObjectStore;
import org.apache.isis.objectstore.jdo.datanucleus.metamodel.JdoPropertyUtils;
import org.apache.isis.objectstore.jdo.datanucleus.persistence.FrameworkSynchronizer;
@@ -82,7 +80,7 @@ public class PersistenceQueryFindUsingApplibQueryProcessor extends PersistenceQu
jdoQuery.addExtension("datanucleus.multivaluedFetch", "none");
if (LOG.isDebugEnabled()) {
- LOG.debug("query: " + queryName + ", filter: " + filter);
+ LOG.debug(cls.getName() + " # " + queryName + " ( " + filter + " )");
}
return (List<?>) jdoQuery.execute();
@@ -107,7 +105,7 @@ public class PersistenceQueryFindUsingApplibQueryProcessor extends PersistenceQu
}
if (LOG.isDebugEnabled()) {
- LOG.debug("query: " + queryName + ", args: " + argumentsByParameterName);
+ LOG.debug(cls.getName() + " # " + queryName + " ( " + argumentsByParameterName + " )");
}
final List<?> results = (List<?>) jdoQuery.executeWithMap(argumentsByParameterName);
@@ -127,7 +125,6 @@ public class PersistenceQueryFindUsingApplibQueryProcessor extends PersistenceQu
return argumentsByParameterName;
}
-
}
// Copyright (c) Naked Objects Group Ltd.
http://git-wip-us.apache.org/repos/asf/isis/blob/6b497b0c/component/objectstore/jdo/pom.xml
----------------------------------------------------------------------
diff --git a/component/objectstore/jdo/pom.xml b/component/objectstore/jdo/pom.xml
index 8e980f0..2fe0078 100644
--- a/component/objectstore/jdo/pom.xml
+++ b/component/objectstore/jdo/pom.xml
@@ -57,7 +57,17 @@
</pluginRepository>
</pluginRepositories>
- <modules>
+ <repositories>
+ <repository>
+ <id>datanucleus-nightly</id>
+ <url>http://www.datanucleus.org/downloads/maven2-nightly/</url>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </repository>
+ </repositories>
+
+ <modules>
<module>jdo-applib</module>
<module>jdo-metamodel</module>
<module>jdo-datanucleus</module>
http://git-wip-us.apache.org/repos/asf/isis/blob/6b497b0c/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
index ebc214c..24ae46b 100644
--- a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
+++ b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
@@ -588,6 +588,7 @@ public class ToDoItem implements Comparable<ToDoItem> /*, Locatable*/ { // GMAP3
// totalCost
// //////////////////////////////////////
+ @ActionSemantics(Of.SAFE)
@Bulk(AppliesTo.BULK_ONLY)
public BigDecimal totalCost() {
BigDecimal total = (BigDecimal) scratchpad.get("runningTotal");
http://git-wip-us.apache.org/repos/asf/isis/blob/6b497b0c/example/application/simple_wicket_restful_jdo/dom/src/main/java/dom/simple/SimpleObject.java
----------------------------------------------------------------------
diff --git a/example/application/simple_wicket_restful_jdo/dom/src/main/java/dom/simple/SimpleObject.java b/example/application/simple_wicket_restful_jdo/dom/src/main/java/dom/simple/SimpleObject.java
index cdbca56..903a0ab 100644
--- a/example/application/simple_wicket_restful_jdo/dom/src/main/java/dom/simple/SimpleObject.java
+++ b/example/application/simple_wicket_restful_jdo/dom/src/main/java/dom/simple/SimpleObject.java
@@ -24,6 +24,8 @@ import javax.jdo.annotations.VersionStrategy;
import org.apache.isis.applib.DomainObjectContainer;
import org.apache.isis.applib.annotation.Bookmarkable;
+import org.apache.isis.applib.annotation.Disabled;
+import org.apache.isis.applib.annotation.Hidden;
import org.apache.isis.applib.annotation.MemberOrder;
import org.apache.isis.applib.annotation.Named;
import org.apache.isis.applib.annotation.ObjectType;
@@ -48,9 +50,9 @@ public class SimpleObject implements Comparable<SimpleObject> {
private String name;
- @Named("whatever")
@javax.jdo.annotations.Column(allowsNull="false")
- @Title
+ @Title(sequence="1")
+ @MemberOrder(sequence="1")
public String getName() {
return name;
}
@@ -58,8 +60,8 @@ public class SimpleObject implements Comparable<SimpleObject> {
public void setName(final String name) {
this.name = name;
}
-
-
+
+
// //////////////////////////////////////
// compareTo
http://git-wip-us.apache.org/repos/asf/isis/blob/6b497b0c/example/application/simple_wicket_restful_jdo/dom/src/main/java/dom/simple/SimpleObjects.java
----------------------------------------------------------------------
diff --git a/example/application/simple_wicket_restful_jdo/dom/src/main/java/dom/simple/SimpleObjects.java b/example/application/simple_wicket_restful_jdo/dom/src/main/java/dom/simple/SimpleObjects.java
index e106f89..3d16e78 100644
--- a/example/application/simple_wicket_restful_jdo/dom/src/main/java/dom/simple/SimpleObjects.java
+++ b/example/application/simple_wicket_restful_jdo/dom/src/main/java/dom/simple/SimpleObjects.java
@@ -27,16 +27,13 @@ import org.apache.isis.applib.DomainObjectContainer;
import org.apache.isis.applib.annotation.ActionSemantics;
import org.apache.isis.applib.annotation.ActionSemantics.Of;
import org.apache.isis.applib.annotation.Bookmarkable;
+import org.apache.isis.applib.annotation.Hidden;
import org.apache.isis.applib.annotation.MemberOrder;
import org.apache.isis.applib.annotation.Named;
+import org.apache.isis.applib.annotation.Programmatic;
public class SimpleObjects {
- @PostConstruct
- public void init(Map<String,String> props) {
- List<SimpleObject> x = container.allInstances(SimpleObject.class);
- System.out.println(x);
- }
// //////////////////////////////////////
// Identification in the UI
http://git-wip-us.apache.org/repos/asf/isis/blob/6b497b0c/example/application/simple_wicket_restful_jdo/dom/src/main/resources/rebel.xml
----------------------------------------------------------------------
diff --git a/example/application/simple_wicket_restful_jdo/dom/src/main/resources/rebel.xml b/example/application/simple_wicket_restful_jdo/dom/src/main/resources/rebel.xml
new file mode 100644
index 0000000..7fcb2f4
--- /dev/null
+++ b/example/application/simple_wicket_restful_jdo/dom/src/main/resources/rebel.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaround.com" xsi:schemaLocation="http://www.zeroturnaround.com http://www.zeroturnaround.com/alderaan/rebel-2_0.xsd">
+
+ <classpath>
+ <dir name="C:/APACHE/isis-git-rw/example/application/simple_wicket_restful_jdo/dom/target-ide/classes">
+ </dir>
+ </classpath>
+
+</application>
http://git-wip-us.apache.org/repos/asf/isis/blob/6b497b0c/example/application/simple_wicket_restful_jdo/webapp/ide/eclipse/launch/SimpleApp-PROTOTYPE-jrebel.launch
----------------------------------------------------------------------
diff --git a/example/application/simple_wicket_restful_jdo/webapp/ide/eclipse/launch/SimpleApp-PROTOTYPE-jrebel.launch b/example/application/simple_wicket_restful_jdo/webapp/ide/eclipse/launch/SimpleApp-PROTOTYPE-jrebel.launch
new file mode 100644
index 0000000..6cb899f
--- /dev/null
+++ b/example/application/simple_wicket_restful_jdo/webapp/ide/eclipse/launch/SimpleApp-PROTOTYPE-jrebel.launch
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/isis-core-webserver/src/main/java/org/apache/isis/WebServer.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<mapAttribute key="org.eclipse.debug.core.preferred_launchers">
+<mapEntry key="[debug]" value="org.eclipse.jdt.launching.localJavaApplication"/>
+<mapEntry key="[run]" value="org.eclipse.jdt.launching.localJavaApplication"/>
+</mapAttribute>
+<stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector"/>
+<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <sourceLookupDirector> <sourceContainers duplicates="false"> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;isis-jrebel-plugin&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;default/&gt;&#13;&#10;" typeId="org.eclipse.debug.core.containerType.default"/> </sourceContainers> </sourceLookupDirector> 

;"/>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
+<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry containerPath="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6" path="1" type="4"/> "/>
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry path="3" projectName="simple_wicket_restful_jdo-webapp" type="1"/> "/>
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry containerPath="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER" path="3" type="4"/> "/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
+<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.apache.isis.WebServer"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="--port 8080 --type PROTOTYPE"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="simple_wicket_restful_jdo-webapp"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="${jrebel_args} -Drebel.log=false -Drebel.plugins=c:/github/danhaywood/isis-jrebel-plugin/target/danhaywood-isis-jrebel-plugin-1.0.0-SNAPSHOT.jar -Disis-jrebel-plugin.packagePrefix=dom.simple"/>
+</launchConfiguration>
http://git-wip-us.apache.org/repos/asf/isis/blob/6b497b0c/example/application/simple_wicket_restful_jdo/webapp/src/main/resources/rebel.xml
----------------------------------------------------------------------
diff --git a/example/application/simple_wicket_restful_jdo/webapp/src/main/resources/rebel.xml b/example/application/simple_wicket_restful_jdo/webapp/src/main/resources/rebel.xml
new file mode 100644
index 0000000..c65bad2
--- /dev/null
+++ b/example/application/simple_wicket_restful_jdo/webapp/src/main/resources/rebel.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaround.com" xsi:schemaLocation="http://www.zeroturnaround.com http://www.zeroturnaround.com/alderaan/rebel-2_0.xsd">
+
+ <classpath>
+ <dir name="C:/APACHE/isis-git-rw/example/application/simple_wicket_restful_jdo/webapp/target-ide/classes">
+ </dir>
+ </classpath>
+
+ <web>
+ <link target="/">
+ <dir name="C:/APACHE/isis-git-rw/example/application/simple_wicket_restful_jdo/webapp/target-ide/m2e-wtp/web-resources">
+ <exclude name="/"/>
+ </dir>
+ </link>
+ <link target="/">
+ <dir name="C:/APACHE/isis-git-rw/example/application/simple_wicket_restful_jdo/webapp/src/main/webapp">
+ </dir>
+ </link>
+ </web>
+
+</application>