You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2018/09/08 23:13:41 UTC

[isis] branch ISIS-1976-rethink-object-adapters updated (ddf185a -> 2ce76eb)

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a change to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git.


    from ddf185a  ISIS-1899: post release ... trying to fix CI build
     add 53332a2  ISIS-1979: Refactor logging in headless runtime and prevent configuring log4j twice
     add 7baf89b  Merge pull request #122 from blaugold/ISIS-1979
     add 41e2e32  ISIS-1979: add missing license header
     new f87ea18  ISIS-1899: post release ...
     new 3696616  ISIS-1899: post release ... trying to fix CI build
     new 563fbef  Merge remote-tracking branch 'apache/ISIS-1976-rethink-object-adapters' into ISIS-1976-rethink-object-adapters
     new 05d91d5  ISIS-1976: refactoring OA creation into separated OidProviders
     new ef06f4f  ISIS-1976: kick in new OidFactory
     new 2ce76eb  ISIS-1976: let OAs for values also have an Oid

The 6 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../runtime/logging/IsisLoggingConfigurer.java     |  13 +-
 .../apache/isis/core/commons/ensure/Assert.java    |  10 +-
 .../isis/core/metamodel/adapter/oid/Oid.java       |  19 ++-
 .../isis/core/metamodel/adapter/oid/RootOid.java   |  19 ++-
 .../specloader/specimpl/FacetedMethodsBuilder.java |  18 ---
 .../persistence/PersistenceSession5_Decouple.java  |   2 +
 .../HeadlessWithBootstrappingAbstract.java         |  41 +++----
 .../isis/core/runtime/headless/IsisSystem.java     |  42 +------
 .../runtime/headless/IsisSystemBootstrapper.java   |  35 ++----
 .../runtime/headless/logging/LeveledLogger.java}   |  47 +++++---
 .../core/runtime/headless/logging/LogStream.java   |  37 ++----
 .../runtime/persistence/adapter/PojoAdapter.java   |  12 +-
 .../PersistenceSessionServiceInternalDefault.java  |   4 +-
 .../adaptermanager/ObjectAdapterContext.java       |  27 ++---
 .../ObjectAdapterContext_NewIdentifier.java        |   3 +
 ...ObjectAdapterContext_ObjectAdapterProvider.java | 134 ++++-----------------
 .../adaptermanager/OidAdapterHashMap.java          |  13 +-
 .../persistence/adaptermanager/OidProviders.java   |  99 +++++++++++++++
 .../adaptermanager/factories/OidFactory.java}      |  36 +++---
 .../factories/OidFactory_Builder.java              |  71 +++++++++++
 20 files changed, 351 insertions(+), 331 deletions(-)
 copy core/{metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/CreatedCallbackFacet.java => runtime/src/main/java/org/apache/isis/core/runtime/headless/logging/LeveledLogger.java} (51%)
 create mode 100644 core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java
 copy core/{metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTest_value.java => runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/factories/OidFactory.java} (55%)
 create mode 100644 core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/factories/OidFactory_Builder.java


[isis] 01/06: ISIS-1899: post release ...

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit f87ea18050f8cab39b674d61bd2fa87f3a451e2e
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Sep 7 19:02:41 2018 +0200

    ISIS-1899: post release ...
    
    bump BASELINE to next iteration -> 2.0.0-M2
    simple-app/helloworld ... simplify web descriptors (web.xml)
    simple-app/helloworld ... bump DN-5 version
---
 .gitlab-ci.yml                                     |   2 +-
 example/application/helloworld/pom.xml             |   4 +-
 .../helloworld/src/main/webapp/WEB-INF/web.xml     | 278 +------------------
 example/application/simpleapp/pom.xml              |   4 +-
 .../webapp/src/main/webapp/WEB-INF/web.xml         | 305 +--------------------
 5 files changed, 33 insertions(+), 560 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 811db55..e61ad07 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -16,7 +16,7 @@
 image: maven:3.5.3-jdk-8
 
 before_script:
-  - export BASELINE=2.0.0-M1
+  - export BASELINE=2.0.0-M2
   - export REVISION=$BASELINE.$(date +%Y%m%d)-$(date +%H%M)-$(echo $CI_COMMIT_SHA | cut -c1-8)
 
 services:
diff --git a/example/application/helloworld/pom.xml b/example/application/helloworld/pom.xml
index 3c7a73a..ee0fcbe 100644
--- a/example/application/helloworld/pom.xml
+++ b/example/application/helloworld/pom.xml
@@ -36,7 +36,7 @@
     <packaging>war</packaging>
 
     <properties>
-        <revision>2.0.0-M1</revision>
+        <revision>2.0.0-M2-SNAPSHOT</revision>
         <isis.version>${revision}</isis.version>
 
         <compiler-plugin.source>1.8</compiler-plugin.source>
@@ -44,7 +44,7 @@
         <compiler-plugin.compilerArgument>-parameters</compiler-plugin.compilerArgument>
 
         <!-- override incode-build -->
-        <datanucleus-core.version>5.1.6</datanucleus-core.version>
+        <datanucleus-core.version>5.1.11</datanucleus-core.version>
 
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
diff --git a/example/application/helloworld/src/main/webapp/WEB-INF/web.xml b/example/application/helloworld/src/main/webapp/WEB-INF/web.xml
index a6c042c..5a7e71a 100644
--- a/example/application/helloworld/src/main/webapp/WEB-INF/web.xml
+++ b/example/application/helloworld/src/main/webapp/WEB-INF/web.xml
@@ -28,21 +28,20 @@
         <welcome-file>about/index.html</welcome-file>
     </welcome-file-list>
 
-    <!-- shiro security configuration -->
-    <listener>
-        <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
-    </listener>
-
-    <filter>
-        <filter-name>ShiroFilter</filter-name>
-        <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
-    </filter>
-
-    <filter-mapping>
-        <filter-name>ShiroFilter</filter-name>
-        <url-pattern>/*</url-pattern>
-    </filter-mapping>
-
+	<listener>
+		<listener-class>org.apache.isis.core.webapp.IsisWebAppContextListener</listener-class>
+	</listener>
+	
+	<context-param>
+		<param-name>isis.viewer.wicket.app</param-name>
+		<param-value>domainapp.webapp.HelloWorldApplication</param-value>
+	</context-param>
+
+	<!-- this config value wins over that provided via environment variable PROTOTYPING=true/false -->
+	<!-- 	<context-param> -->
+	<!-- 		<param-name>isis.viewer.wicket.mode</param-name> -->
+	<!-- 		<param-value>development</param-value> -->
+	<!-- 	</context-param> -->
 
 
     <!-- which configuration directory to read overloaded property files from -->
@@ -77,253 +76,4 @@
     -->
 
 
-    <!--
-    determines which additional configuration files to search for 
-     -->
-    <context-param>
-        <param-name>isis.viewers</param-name>
-        <param-value>wicket,restfulobjects</param-value>
-    </context-param>
-
-
-
-    <!-- 
-    for diagnostics
-    -->
-    <filter>
-        <filter-name>IsisLogOnExceptionFilter</filter-name>
-        <filter-class>org.apache.isis.core.webapp.diagnostics.IsisLogOnExceptionFilter</filter-class>
-    </filter>
-    <filter-mapping>
-        <filter-name>IsisLogOnExceptionFilter</filter-name>
-        <url-pattern>/wicket/*</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>IsisLogOnExceptionFilter</filter-name>
-        <url-pattern>/restful/*</url-pattern>
-    </filter-mapping>
-
-
-
-    <!-- cache static resources for 1 day -->
-    <filter>
-        <filter-name>ResourceCachingFilter</filter-name>
-        <filter-class>org.apache.isis.core.webapp.content.ResourceCachingFilter</filter-class>
-        <init-param>
-            <param-name>CacheTime</param-name>
-            <param-value>86400</param-value>
-        </init-param>
-    </filter>
-    <filter-mapping>
-        <filter-name>ResourceCachingFilter</filter-name>
-        <url-pattern>*.css</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>ResourceCachingFilter</filter-name>
-        <url-pattern>*.png</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>ResourceCachingFilter</filter-name>
-        <url-pattern>*.jpg</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>ResourceCachingFilter</filter-name>
-        <url-pattern>*.jpeg</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>ResourceCachingFilter</filter-name>
-        <url-pattern>*.gif</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>ResourceCachingFilter</filter-name>
-        <url-pattern>*.svg</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>ResourceCachingFilter</filter-name>
-        <url-pattern>*.js</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>ResourceCachingFilter</filter-name>
-        <url-pattern>*.html</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>ResourceCachingFilter</filter-name>
-        <url-pattern>*.swf</url-pattern>
-    </filter-mapping>
-    
-    <servlet>
-        <servlet-name>Resource</servlet-name>
-        <servlet-class>org.apache.isis.core.webapp.content.ResourceServlet</servlet-class>
-    </servlet>
-    <servlet-mapping>
-        <servlet-name>Resource</servlet-name>
-        <url-pattern>*.css</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>Resource</servlet-name>
-        <url-pattern>*.png</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>Resource</servlet-name>
-        <url-pattern>*.jpg</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>Resource</servlet-name>
-        <url-pattern>*.jpeg</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>Resource</servlet-name>
-        <url-pattern>*.gif</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>Resource</servlet-name>
-        <url-pattern>*.svg</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>Resource</servlet-name>
-        <url-pattern>*.js</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>Resource</servlet-name>
-        <url-pattern>*.html</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>Resource</servlet-name>
-        <url-pattern>*.swf</url-pattern>
-    </servlet-mapping>
-
-
-    <servlet>
-        <servlet-name>WebjarsServlet</servlet-name>
-        <servlet-class>org.webjars.servlet.WebjarsServlet</servlet-class>
-        <init-param>
-            <param-name>disableCache</param-name>
-            <param-value>false</param-value>
-        </init-param>
-        <load-on-startup>2</load-on-startup>
-    </servlet>
-    <servlet-mapping>
-        <servlet-name>WebjarsServlet</servlet-name>
-        <url-pattern>/webjars/*</url-pattern>
-    </servlet-mapping>
-
-
-
-    <!--
-    -
-    - config specific to the wicket-viewer
-    -
-    -->
-    <filter>
-        <filter-name>WicketFilter</filter-name>
-        <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
-        <init-param>
-            <param-name>applicationClassName</param-name>
-            <param-value>domainapp.webapp.HelloWorldApplication</param-value>
-        </init-param>
-    </filter>
-    <filter-mapping>
-        <filter-name>WicketFilter</filter-name>
-        <url-pattern>/wicket/*</url-pattern>
-    </filter-mapping>
-
-
-    <context-param>
-        <param-name>configuration</param-name>
-        <!-- 
-        <param-value>deployment</param-value>
-         -->
-        <param-value>development</param-value>
-    </context-param>
-    
-   
-    <!--
-    -
-    - config specific to the restfulobjects-viewer
-    -
-    -->
-
-    <!--
-    THE FOLLOWING CONFIGURATION IS NOT REQUIRED IF THE WICKET VIEWER IS IN USE.
-    IF THE WICKET VIEWER CONFIGURATION IS REMOVED, THEN UNCOMMENT
-    
-    <listener>
-        <listener-class>org.apache.isis.core.webapp.IsisWebAppBootstrapper</listener-class>
-    </listener>
-
-    <context-param>
-        <param-name>deploymentType</param-name>
-        <param-value>SERVER_PROTOTYPE</param-value>
-    </context-param>
-
-    <context-param>
-        <param-name>isis.viewers</param-name>
-        <param-value>restfulobjects</param-value>
-    </context-param>    
-    -->    
-    
-    <!-- bootstrap the RestEasy framework -->
-    <listener>
-        <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
-    </listener>
-
-    <!-- used by RestEasy to determine the JAX-RS resources and other related configuration -->
-    <context-param>
-        <param-name>javax.ws.rs.Application</param-name>
-        <param-value>org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplication</param-value>
-    </context-param>
-    
-    <context-param>
-        <param-name>resteasy.servlet.mapping.prefix</param-name>
-        <param-value>/restful/</param-value>
-    </context-param>
-    
-
-    <!-- authenticate user, set up an Isis session -->
-    <filter>
-        <filter-name>IsisSessionFilterForRestfulObjects</filter-name>
-        <filter-class>org.apache.isis.core.webapp.IsisSessionFilter</filter-class>
-        <!-- authentication required for REST -->
-        <init-param>
-            <param-name>authenticationSessionStrategy</param-name>
-            <param-value>org.apache.isis.viewer.restfulobjects.server.authentication.AuthenticationSessionStrategyBasicAuth</param-value>
-        </init-param>
-        <init-param>
-            <!-- what to do if no session was found... -->
-            <param-name>whenNoSession</param-name>
-            <!-- ... 401 and a basic authentication challenge if request originates from web browser -->
-            <param-value>auto</param-value>
-        </init-param>
-        <init-param>
-            <param-name>passThru</param-name>
-            <param-value>/restful/swagger</param-value>
-        </init-param>
-    </filter>
-    <filter-mapping>
-        <!-- this is mapped to the entire app; however the IsisSessionFilter will "notice" if the session filter has already been
-             executed for the request pipeline, and if so will do nothing -->
-        <filter-name>IsisSessionFilterForRestfulObjects</filter-name>
-        <servlet-name>RestfulObjectsRestEasyDispatcher</servlet-name>
-    </filter-mapping>
-
-    <filter>
-        <filter-name>IsisTransactionFilterForRestfulObjects</filter-name>
-        <filter-class>org.apache.isis.viewer.restfulobjects.server.webapp.IsisTransactionFilterForRestfulObjects</filter-class>
-    </filter>
-    <filter-mapping>
-        <filter-name>IsisTransactionFilterForRestfulObjects</filter-name>
-        <servlet-name>RestfulObjectsRestEasyDispatcher</servlet-name>
-    </filter-mapping>
-
-
-    <servlet>
-        <servlet-name>RestfulObjectsRestEasyDispatcher</servlet-name>
-        <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
-    </servlet>
-    <servlet-mapping>
-        <servlet-name>RestfulObjectsRestEasyDispatcher</servlet-name>
-        <url-pattern>/restful/*</url-pattern>
-    </servlet-mapping>
-
-
 </web-app>
diff --git a/example/application/simpleapp/pom.xml b/example/application/simpleapp/pom.xml
index a50ad68..9a41b13 100644
--- a/example/application/simpleapp/pom.xml
+++ b/example/application/simpleapp/pom.xml
@@ -36,7 +36,7 @@
     <packaging>pom</packaging>
 
     <properties>
-        <revision>2.0.0-M1</revision>
+        <revision>2.0.0-M2-SNAPSHOT</revision>
         <isis.version>${revision}</isis.version>
 
         <lombok.version>[1.18,)</lombok.version>
@@ -46,7 +46,7 @@
         <compiler-plugin.compilerArgument>-parameters</compiler-plugin.compilerArgument>
 
         <!-- override incode-build -->
-        <datanucleus-core.version>5.1.6</datanucleus-core.version>
+        <datanucleus-core.version>5.1.11</datanucleus-core.version>
 
         <hsqldb.version>2.3.4</hsqldb.version>
 
diff --git a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/web.xml b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/web.xml
index 885e0c9..b579574 100644
--- a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/web.xml
+++ b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/web.xml
@@ -28,21 +28,20 @@
         <welcome-file>about/index.html</welcome-file>
     </welcome-file-list>
 
-    <!-- shiro security configuration -->
-    <listener>
-        <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
-    </listener>
-
-    <filter>
-        <filter-name>ShiroFilter</filter-name>
-        <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
-    </filter>
-
-    <filter-mapping>
-        <filter-name>ShiroFilter</filter-name>
-        <url-pattern>/*</url-pattern>
-    </filter-mapping>
-
+	<listener>
+		<listener-class>org.apache.isis.core.webapp.IsisWebAppContextListener</listener-class>
+	</listener>
+	
+	<context-param>
+		<param-name>isis.viewer.wicket.app</param-name>
+		<param-value>domainapp.webapp.DomainApplication</param-value>
+	</context-param>
+
+	<!-- this config value wins over that provided via environment variable PROTOTYPING=true/false -->
+	<!-- 	<context-param> -->
+	<!-- 		<param-name>isis.viewer.wicket.mode</param-name> -->
+	<!-- 		<param-value>development</param-value> -->
+	<!-- 	</context-param> -->
 
 
     <!-- which configuration directory to read overloaded property files from -->
@@ -76,280 +75,4 @@
     For more detail see: http://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Context_Parameters
     -->
 
-
-    <!--
-    determines which additional configuration files to search for 
-     -->
-    <context-param>
-        <param-name>isis.viewers</param-name>
-        <param-value>wicket,restfulobjects</param-value>
-    </context-param>
-
-
-
-    <!-- 
-    for diagnostics
-    -->
-    <filter>
-        <filter-name>IsisLogOnExceptionFilter</filter-name>
-        <filter-class>org.apache.isis.core.webapp.diagnostics.IsisLogOnExceptionFilter</filter-class>
-    </filter>
-    <filter-mapping>
-        <filter-name>IsisLogOnExceptionFilter</filter-name>
-        <url-pattern>/wicket/*</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>IsisLogOnExceptionFilter</filter-name>
-        <url-pattern>/restful/*</url-pattern>
-    </filter-mapping>
-
-
-
-    <!-- cache static resources for 1 day -->
-    <filter>
-        <filter-name>ResourceCachingFilter</filter-name>
-        <filter-class>org.apache.isis.core.webapp.content.ResourceCachingFilter</filter-class>
-        <init-param>
-            <param-name>CacheTime</param-name>
-            <param-value>86400</param-value>
-        </init-param>
-    </filter>
-    <filter-mapping>
-        <filter-name>ResourceCachingFilter</filter-name>
-        <url-pattern>*.css</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>ResourceCachingFilter</filter-name>
-        <url-pattern>*.png</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>ResourceCachingFilter</filter-name>
-        <url-pattern>*.jpg</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>ResourceCachingFilter</filter-name>
-        <url-pattern>*.jpeg</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>ResourceCachingFilter</filter-name>
-        <url-pattern>*.gif</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>ResourceCachingFilter</filter-name>
-        <url-pattern>*.svg</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>ResourceCachingFilter</filter-name>
-        <url-pattern>*.js</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>ResourceCachingFilter</filter-name>
-        <url-pattern>*.html</url-pattern>
-    </filter-mapping>
-    <filter-mapping>
-        <filter-name>ResourceCachingFilter</filter-name>
-        <url-pattern>*.swf</url-pattern>
-    </filter-mapping>
-    
-    <servlet>
-        <servlet-name>Resource</servlet-name>
-        <servlet-class>org.apache.isis.core.webapp.content.ResourceServlet</servlet-class>
-    </servlet>
-    <servlet-mapping>
-        <servlet-name>Resource</servlet-name>
-        <url-pattern>*.css</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>Resource</servlet-name>
-        <url-pattern>*.png</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>Resource</servlet-name>
-        <url-pattern>*.jpg</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>Resource</servlet-name>
-        <url-pattern>*.jpeg</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>Resource</servlet-name>
-        <url-pattern>*.gif</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>Resource</servlet-name>
-        <url-pattern>*.svg</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>Resource</servlet-name>
-        <url-pattern>*.js</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>Resource</servlet-name>
-        <url-pattern>*.html</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>Resource</servlet-name>
-        <url-pattern>*.swf</url-pattern>
-    </servlet-mapping>
-
-
-    <servlet>
-        <servlet-name>WebjarsServlet</servlet-name>
-        <servlet-class>org.webjars.servlet.WebjarsServlet</servlet-class>
-        <init-param>
-            <param-name>disableCache</param-name>
-            <param-value>false</param-value>
-        </init-param>
-        <load-on-startup>2</load-on-startup>
-    </servlet>
-    <servlet-mapping>
-        <servlet-name>WebjarsServlet</servlet-name>
-        <url-pattern>/webjars/*</url-pattern>
-    </servlet-mapping>
-
-
-
-    <!--
-    -
-    - config specific to the wicket-viewer
-    -
-    -->
-    <filter>
-        <filter-name>WicketFilter</filter-name>
-        <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
-        <init-param>
-            <param-name>applicationClassName</param-name>
-            <param-value>domainapp.webapp.DomainApplication</param-value>
-        </init-param>
-    </filter>
-    <filter-mapping>
-        <filter-name>WicketFilter</filter-name>
-        <url-pattern>/wicket/*</url-pattern>
-    </filter-mapping>
-
-
-    <context-param>
-        <param-name>configuration</param-name>
-        <!-- 
-        <param-value>deployment</param-value>
-         -->
-        <param-value>development</param-value>
-    </context-param>
-    
-   
-    <!--
-    -
-    - config specific to the restfulobjects-viewer
-    -
-    -->
-
-    <!--
-    THE FOLLOWING CONFIGURATION IS NOT REQUIRED IF THE WICKET VIEWER IS IN USE.
-    IF THE WICKET VIEWER CONFIGURATION IS REMOVED, THEN UNCOMMENT
-    
-    <listener>
-        <listener-class>org.apache.isis.core.webapp.IsisWebAppBootstrapper</listener-class>
-    </listener>
-
-    <context-param>
-        <param-name>deploymentType</param-name>
-        <param-value>SERVER_PROTOTYPE</param-value>
-    </context-param>
-
-    <context-param>
-        <param-name>isis.viewers</param-name>
-        <param-value>restfulobjects</param-value>
-    </context-param>    
-    -->    
-    
-    <!-- bootstrap the RestEasy framework -->
-    <listener>
-        <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
-    </listener>
-
-    <!-- used by RestEasy to determine the JAX-RS resources and other related configuration -->
-    <context-param>
-        <param-name>javax.ws.rs.Application</param-name>
-        <param-value>org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplication</param-value>
-    </context-param>
-    
-    <context-param>
-        <param-name>resteasy.servlet.mapping.prefix</param-name>
-        <param-value>/restful/</param-value>
-    </context-param>
-    
-
-    <!-- authenticate user, set up an Isis session -->
-    <filter>
-        <filter-name>IsisSessionFilterForRestfulObjects</filter-name>
-        <filter-class>org.apache.isis.core.webapp.IsisSessionFilter</filter-class>
-        <!-- authentication required for REST -->
-        <init-param>
-            <param-name>authenticationSessionStrategy</param-name>
-            <param-value>org.apache.isis.viewer.restfulobjects.server.authentication.AuthenticationSessionStrategyBasicAuth</param-value>
-        </init-param>
-        <init-param>
-            <!-- what to do if no session was found... -->
-            <param-name>whenNoSession</param-name>
-            <!-- ... 401 and a basic authentication challenge if request originates from web browser -->
-            <param-value>auto</param-value>
-        </init-param>
-        <init-param>
-            <param-name>passThru</param-name>
-            <param-value>/restful/swagger</param-value>
-        </init-param>
-    </filter>
-    <filter-mapping>
-        <!-- this is mapped to the entire app; however the IsisSessionFilter will "notice" if the session filter has already been
-             executed for the request pipeline, and if so will do nothing -->
-        <filter-name>IsisSessionFilterForRestfulObjects</filter-name>
-        <servlet-name>RestfulObjectsRestEasyDispatcher</servlet-name>
-    </filter-mapping>
-
-    <filter>
-        <filter-name>IsisTransactionFilterForRestfulObjects</filter-name>
-        <filter-class>org.apache.isis.viewer.restfulobjects.server.webapp.IsisTransactionFilterForRestfulObjects</filter-class>
-    </filter>
-    <filter-mapping>
-        <filter-name>IsisTransactionFilterForRestfulObjects</filter-name>
-        <servlet-name>RestfulObjectsRestEasyDispatcher</servlet-name>
-    </filter-mapping>
-
-
-    <servlet>
-        <servlet-name>RestfulObjectsRestEasyDispatcher</servlet-name>
-        <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
-    </servlet>
-    <servlet-mapping>
-        <servlet-name>RestfulObjectsRestEasyDispatcher</servlet-name>
-        <url-pattern>/restful/*</url-pattern>
-    </servlet-mapping>
-
-
-    <!-- 
-    uncomment to use container-managed datasource;
-    for both container-managed (JTA) and non-container-managed transactions
-     -->
-     <!-- 
-    <resource-ref>
-        <description>db</description>
-        <res-ref-name>jdbc/quickstart</res-ref-name>
-        <res-type>javax.sql.DataSource</res-type>
-        <res-auth>Container</res-auth>
-    </resource-ref>
-      -->
-
-    <!--
-    uncomment to use container-managed datasource
-    with container-managed transactions (JTA).
-    -->
-    <!-- 
-    <resource-ref>
-        <description>db</description>
-        <res-ref-name>jdbc/quickstart-nontx</res-ref-name>
-        <res-type>javax.sql.DataSource</res-type>
-        <res-auth>Container</res-auth>
-    </resource-ref>
-     -->
-
 </web-app>


[isis] 05/06: ISIS-1976: kick in new OidFactory

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit ef06f4f0afa77a976c366d7835f8aaf9805a92e6
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sun Sep 9 00:15:36 2018 +0200

    ISIS-1976: kick in new OidFactory
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 ...ObjectAdapterContext_ObjectAdapterProvider.java | 35 +++-------------------
 .../factories/OidFactory_Builder.java              |  7 ++++-
 2 files changed, 10 insertions(+), 32 deletions(-)

diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
index 776c4db..3e1041f 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
@@ -19,6 +19,7 @@
 package org.apache.isis.core.runtime.system.persistence.adaptermanager;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -108,37 +109,9 @@ class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvide
             return existing;
         }
         
-        final RootOid rootOid2 = oidFactory.oidFor(pojo);
-        
-//        if(rootOid2==null) {
-//            System.err.println("!!! "+pojo);
-//            _Exceptions.throwUnexpectedCodeReach();
-//        }
-//        
-//        if(rootOid2!=null && rootOid2.isValue()) {
-//            return objectAdapterContext.getFactories().createRootAdapter(pojo, null);
-//        }
-        
-        // -- legacy code
-        
-        final ObjectAdapter existingOrValueAdapter = existingOrValueAdapter(pojo);
-        if(existingOrValueAdapter != null) {
-            return existingOrValueAdapter;
-        }
-
-        final RootOid rootOid = objectAdapterContext.createTransientOrViewModelOid(pojo);
-        
-      //at this point we know its not a value
-        if(rootOid2==null) {
-            System.err.println("!!! expected "+rootOid);
-            _Exceptions.throwUnexpectedCodeReach();
-        }
-        
-        
-        if(rootOid2!=null && rootOid2.isValue()) {
-            Assert.assertEquals("expected same", rootOid, null);
-        } else if(!rootOid.isTransient()) {
-            Assert.assertEquals("expected same", rootOid, rootOid2);    
+        final RootOid rootOid = oidFactory.oidFor(pojo);
+        if(rootOid.isValue()) {
+            return objectAdapterContext.getFactories().createRootAdapter(pojo, null); 
         }
         
         final ObjectAdapter newAdapter = objectAdapterContext.getFactories().createRootAdapter(pojo, rootOid);
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/factories/OidFactory_Builder.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/factories/OidFactory_Builder.java
index a7bb938..bda33ab 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/factories/OidFactory_Builder.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/factories/OidFactory_Builder.java
@@ -21,6 +21,7 @@ package org.apache.isis.core.runtime.system.persistence.adaptermanager.factories
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.function.Function;
 
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
@@ -52,11 +53,15 @@ class OidFactory_Builder implements OidFactoryBuilder {
                 
                 final ObjectSpecification spec = specProvider.apply(pojo);
                 
-                return handler.stream()
+                final RootOid rootOid = handler.stream()
                 .filter(h->h.isHandling(pojo, spec))
                 .findFirst()
                 .map(h->h.oidFor(pojo, spec))
                 .orElse(null);
+                
+                Objects.requireNonNull(rootOid, "Could not create an Oid for pojo: "+pojo);
+                
+                return rootOid;
             }
             
         };


[isis] 02/06: ISIS-1899: post release ... trying to fix CI build

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 36966163e275f207ae0c25171a71f31049ce3a4c
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Sep 7 19:43:47 2018 +0200

    ISIS-1899: post release ... trying to fix CI build
    
    simple-app/helloworld ... override all DN-5 dependency versions as
    provided by incode parent pom
---
 example/application/helloworld/pom.xml | 12 +++++++++---
 example/application/simpleapp/pom.xml  | 12 ++++++++++--
 2 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/example/application/helloworld/pom.xml b/example/application/helloworld/pom.xml
index ee0fcbe..50e957f 100644
--- a/example/application/helloworld/pom.xml
+++ b/example/application/helloworld/pom.xml
@@ -43,9 +43,15 @@
         <compiler-plugin.target>1.8</compiler-plugin.target>
         <compiler-plugin.compilerArgument>-parameters</compiler-plugin.compilerArgument>
 
-        <!-- override incode-build -->
-        <datanucleus-core.version>5.1.11</datanucleus-core.version>
-
+		<!-- workaround for DN enhancer failing with already registered bundle in case
+        	the mixin at https://github.com/danhaywood/java-mavenmixin-datanucleusenhance/blob/master/pom.xml
+        	has different DN versions than Isis' core.
+        	-->
+        <mavenmixin-datanucleusenhance.version>0.0.5</mavenmixin-datanucleusenhance.version>
+	    <datanucleus-maven-plugin.version>5.0.2</datanucleus-maven-plugin.version>
+	    <datanucleus-core.version>5.1.11</datanucleus-core.version>
+	    <datanucleus-api-jdo.version>5.1.9</datanucleus-api-jdo.version>
+	    <datanucleus-jodatime.version>5.1.0-release</datanucleus-jodatime.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 
diff --git a/example/application/simpleapp/pom.xml b/example/application/simpleapp/pom.xml
index 9a41b13..c1f5a83 100644
--- a/example/application/simpleapp/pom.xml
+++ b/example/application/simpleapp/pom.xml
@@ -45,8 +45,16 @@
         <compiler-plugin.target>1.8</compiler-plugin.target>
         <compiler-plugin.compilerArgument>-parameters</compiler-plugin.compilerArgument>
 
-        <!-- override incode-build -->
-        <datanucleus-core.version>5.1.11</datanucleus-core.version>
+        <!-- workaround for DN enhancer failing with already registered bundle in case
+        	the mixin at https://github.com/danhaywood/java-mavenmixin-datanucleusenhance/blob/master/pom.xml
+        	has different DN versions than Isis' core.
+        	-->
+        <mavenmixin-datanucleusenhance.version>0.0.5</mavenmixin-datanucleusenhance.version>
+	    <datanucleus-maven-plugin.version>5.0.2</datanucleus-maven-plugin.version>
+	    <datanucleus-core.version>5.1.11</datanucleus-core.version>
+	    <datanucleus-api-jdo.version>5.1.9</datanucleus-api-jdo.version>
+	    <datanucleus-jodatime.version>5.1.0-release</datanucleus-jodatime.version>
+        
 
         <hsqldb.version>2.3.4</hsqldb.version>
 


[isis] 06/06: ISIS-1976: let OAs for values also have an Oid

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 2ce76eb32b2e1d363b8957d3e28cd4086dd499af
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sun Sep 9 01:10:04 2018 +0200

    ISIS-1976: let OAs for values also have an Oid
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../isis/core/metamodel/adapter/oid/Oid.java       |  19 ++-
 .../isis/core/metamodel/adapter/oid/RootOid.java   |   4 -
 .../runtime/persistence/adapter/PojoAdapter.java   |  12 +-
 .../PersistenceSessionServiceInternalDefault.java  |   4 +-
 .../adaptermanager/ObjectAdapterContext.java       |   2 +-
 ...ObjectAdapterContext_ObjectAdapterProvider.java | 132 ++-------------------
 .../persistence/adaptermanager/OidProviders.java   |  21 +---
 .../model/mementos/ObjectAdapterMemento.java       |   5 -
 8 files changed, 27 insertions(+), 172 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
index 0b9a201..e087e12 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
@@ -59,16 +59,15 @@ public interface Oid extends Encodable {
     boolean isViewModel();
 
     boolean isPersistent();
+    
+    default boolean isValue() {
+        return false;
+    }
 
     public static enum State {
-        PERSISTENT("P"),
-        TRANSIENT("T"),
-        VIEWMODEL("V");
-
-        private final String code;
-        private State(final String code) {
-            this.code = code;
-        }
+        PERSISTENT,
+        TRANSIENT,
+        VIEWMODEL;
 
         public boolean isTransient() {
             return this == TRANSIENT;
@@ -80,10 +79,6 @@ public interface Oid extends Encodable {
             return this == PERSISTENT;
         }
 
-        public String getCode() {
-            return code;
-        }
-
         public static State from(final Bookmark bookmark) {
             final Bookmark.ObjectState objectState = bookmark.getObjectState();
             return from(objectState);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
index 2f67f7e..7cbb26d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
@@ -284,10 +284,6 @@ public class RootOid implements TypedOid, Serializable {
 
     // -- ROOT-ID SUPPORT FOR VALUE
     
-    public boolean isValue() {
-        return false;
-    }
-    
     private RootOid() { identifier=null; objectSpecId=null; state=null; };
     
     private static final RootOid VALUE_OID = new RootOid() {
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
index a83c9a8..da29ebe 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.core.runtime.persistence.adapter;
 
+import static org.apache.isis.commons.internal.base._With.requires;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -52,13 +54,7 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
     private final SpecificationLoader specificationLoader;
     private final PersistenceSession persistenceSession;
 
-    /**
-     * can be {@link #replacePojo(Object) replace}d.
-     */
     private final Object pojo;
-    /**
-     * can be {@link #replaceOid(Oid) replace}d.
-     */
     private final Oid oid;
 
     /**
@@ -81,7 +77,7 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
             throw new IsisException("Adapter can't be used to adapt an adapter: " + pojo);
         }
         this.pojo = pojo;
-        this.oid = oid;
+        this.oid = requires(oid, "oid");
     }
     
     // -- getSpecification
@@ -122,7 +118,7 @@ public class PojoAdapter extends InstanceAbstract implements ObjectAdapter {
 
     @Override
     public boolean isValue() {
-        return oid == null;
+        return oid.isValue();
     }
 
     // -- isTransient, representsPersistent, isDestroyed
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/persistsession/PersistenceSessionServiceInternalDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/persistsession/PersistenceSessionServiceInternalDefault.java
index f7d944c..5ee3b82 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/persistsession/PersistenceSessionServiceInternalDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/persistsession/PersistenceSessionServiceInternalDefault.java
@@ -89,11 +89,11 @@ public class PersistenceSessionServiceInternalDefault implements PersistenceSess
     @Override
     public Bookmark bookmarkFor(Object domainObject) {
         final ObjectAdapter adapter = getPersistenceSession().adapterFor(domainObject);
-        final Oid oid = adapter.getOid();
-        if(oid == null) {
+        if(adapter.isValue()) {
             // values cannot be bookmarked
             return null;
         }
+        final Oid oid = adapter.getOid();
         if(!(oid instanceof RootOid)) {
             // must be root
             return null;
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index fa273bc..c43ec56 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -139,7 +139,7 @@ public class ObjectAdapterContext {
             PersistenceSession persistenceSession) {
         
         this.consistencyMixin = new ObjectAdapterContext_Consistency(this);
-        this.objectAdapterProviderMixin = new ObjectAdapterContext_ObjectAdapterProvider(this, persistenceSession, authenticationSession);
+        this.objectAdapterProviderMixin = new ObjectAdapterContext_ObjectAdapterProvider(this, persistenceSession);
         this.adapterManagerMixin = new ObjectAdapterContext_AdapterManager(this, persistenceSession);
         this.mementoSupportMixin = new ObjectAdapterContext_MementoSupport(this, persistenceSession);
         this.serviceLookupMixin = new ObjectAdapterContext_ServiceLookup(this, servicesInjector);
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
index 3e1041f..e3c4cd9 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
@@ -18,8 +18,9 @@
  */
 package org.apache.isis.core.runtime.system.persistence.adaptermanager;
 
+import static org.apache.isis.commons.internal.base._With.requires;
+
 import java.util.List;
-import java.util.Objects;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -27,21 +28,15 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.isis.commons.internal.base._Lazy;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.ensure.Assert;
-import org.apache.isis.core.metamodel.IsisJdoMetamodelPlugin;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.runtime.persistence.adapter.PojoAdapter;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.core.runtime.system.persistence.adaptermanager.factories.OidFactory;
 
@@ -58,64 +53,40 @@ class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvide
     private static final Logger LOG = LoggerFactory.getLogger(ObjectAdapterContext_ObjectAdapterProvider.class);
     private final ObjectAdapterContext objectAdapterContext;
     private final PersistenceSession persistenceSession;
-    private final AuthenticationSession authenticationSession;
     private final ServicesInjector servicesInjector;
     private final SpecificationLoader specificationLoader; 
-    private final IsisJdoMetamodelPlugin isisJdoMetamodelPlugin;
     private final OidFactory oidFactory; 
     
     ObjectAdapterContext_ObjectAdapterProvider(ObjectAdapterContext objectAdapterContext,
-            PersistenceSession persistenceSession, AuthenticationSession authenticationSession) {
+            PersistenceSession persistenceSession) {
         this.objectAdapterContext = objectAdapterContext;
         this.persistenceSession = persistenceSession;
-        this.authenticationSession = authenticationSession;
         this.servicesInjector = persistenceSession.getServicesInjector();
         this.specificationLoader = servicesInjector.getSpecificationLoader();
-        this.isisJdoMetamodelPlugin = IsisJdoMetamodelPlugin.get();
         
         this.oidFactory = OidFactory.builder(pojo->specificationLoader.loadSpecification(pojo.getClass()))
                 .add(new OidProviders.OidForServices())
                 .add(new OidProviders.OidForValues())
                 .add(new OidProviders.OidForViewModels())
                 .add(new OidProviders.OidForPersistables())
-                .add(new OidProviders.OidForMixins())
-                .add(new OidProviders.OidForStandaloneCollections())
+                .add(new OidProviders.OidForOthers())
                 .build();
     }
 
-//    @Override
-//    public Oid oidFor(Object pojo) {
-//        if(pojo == null) {
-//            return null;
-//        }
-//        final Oid persistentOrValueOid = persistentOrValueOid(pojo);
-//        if(persistentOrValueOid != null) {
-//            return persistentOrValueOid;
-//        }
-//        final RootOid rootOid = objectAdapterContext.rootOidFor(pojo);
-//        
-//        return rootOid;
-//    }
-    
     @Override
     public ObjectAdapter adapterFor(Object pojo) {
-        
+
         if(pojo == null) {
             return null;
         }
-        
+
         final  ObjectAdapter existing = objectAdapterContext.lookupAdapterByPojo(pojo);
         if (existing != null) {
             return existing;
         }
         
         final RootOid rootOid = oidFactory.oidFor(pojo);
-        if(rootOid.isValue()) {
-            return objectAdapterContext.getFactories().createRootAdapter(pojo, null); 
-        }
-        
         final ObjectAdapter newAdapter = objectAdapterContext.getFactories().createRootAdapter(pojo, rootOid);
-
         return objectAdapterContext.mapAndInjectServices(newAdapter);
     }
     
@@ -123,12 +94,12 @@ class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvide
     @Override
     public ObjectAdapter adapterFor(Object pojo, ObjectAdapter parentAdapter, OneToManyAssociation collection) {
 
-        assert parentAdapter != null;
-        assert collection != null;
+        requires(parentAdapter, "parentAdapter");
+        requires(collection, "collection");
 
-        final ObjectAdapter existingOrValueAdapter = existingOrValueAdapter(pojo);
-        if(existingOrValueAdapter != null) {
-            return existingOrValueAdapter;
+        final  ObjectAdapter existing = objectAdapterContext.lookupAdapterByPojo(pojo);
+        if (existing != null) {
+            return existing;
         }
 
         objectAdapterContext.ensureMapsConsistent(parentAdapter);
@@ -184,86 +155,5 @@ class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvide
         .collect(Collectors.toList());
     }
     
-//    private Oid persistentOrValueOid(Object pojo) {
-//        
-//        Oid oid;
-//
-//        // equivalent to  isInstanceOfPersistable = pojo instanceof Persistable;
-//        final boolean isInstanceOfPersistable = isisJdoMetamodelPlugin.isPersistenceEnhanced(pojo.getClass());
-//        
-//        // pojo may have been lazily loaded by object store, but we haven't yet seen it
-//        if (isInstanceOfPersistable) {
-//            oid = persistentOid(pojo);
-//
-//            // TODO: could return null if the pojo passed in !dnIsPersistent() || !dnIsDetached()
-//            // in which case, we would ought to map as a transient object, rather than fall through and treat as a value?
-//        } else {
-//            oid = null;
-//        }
-//
-//        if(oid != null) {
-//            return oid;
-//        }
-//        
-//        // need to create (and possibly map) the adapter.
-//        final ObjectSpecification objSpec = specificationLoader.loadSpecification(pojo.getClass());
-//
-//        // we create value facets as standalone (so not added to maps)
-//        if (objSpec.containsFacet(ValueFacet.class)) {
-//            //TODO[ISIS-1976] don't need an adapter, just its oid
-//            oid = objectAdapterContext.getFactories().createStandaloneAdapter(pojo).getOid(); 
-//            return oid;
-//        }
-//
-//        return null;
-//    }
-    
-//    private Oid persistentOid(final Object pojo) {
-//        if (persistenceSession.getPersistenceManager().getObjectId(pojo) == null) {
-//            return null;
-//        }
-//        final RootOid oid = objectAdapterContext.createPersistentOrViewModelOid(pojo);
-//        return oid;
-//    }
-    
-    private ObjectAdapter existingOrValueAdapter(Object pojo) {
-
-        // attempt to locate adapter for the pojo
-        ObjectAdapter adapter = objectAdapterContext.lookupAdapterByPojo(pojo);
-        if (adapter != null) {
-            return adapter;
-        }
-
-        // equivalent to  isInstanceOfPersistable = pojo instanceof Persistable;
-        final boolean isInstanceOfPersistable = isisJdoMetamodelPlugin.isPersistenceEnhanced(pojo.getClass());
-        
-        // pojo may have been lazily loaded by object store, but we haven't yet seen it
-        if (isInstanceOfPersistable) {
-            adapter = addPersistentToCache(pojo);
-
-            // TODO: could return null if the pojo passed in !dnIsPersistent() || !dnIsDetached()
-            // in which case, we would ought to map as a transient object, rather than fall through and treat as a value?
-        } else {
-            adapter = null;
-        }
-
-        if(adapter != null) {
-            return adapter;
-        }
-        
-        // need to create (and possibly map) the adapter.
-        final ObjectSpecification objSpec = specificationLoader.loadSpecification(pojo.getClass());
-
-        // we create value facets as standalone (so not added to maps)
-        if (objSpec.containsFacet(ValueFacet.class)) {
-            adapter = objectAdapterContext.getFactories().createStandaloneAdapter(pojo);
-            return adapter;
-        }
-
-        return null;
-    }
-
-
-    
    
 }
\ No newline at end of file
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java
index e01e83e..afcd193 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java
@@ -79,11 +79,11 @@ public class OidProviders {
 
     }
     
-    public static class OidForMixins implements OidProvider {
+    public static class OidForOthers implements OidProvider {
 
         @Override
         public boolean isHandling(Object pojo, ObjectSpecification spec) {
-            return spec.isMixin();
+            return true; // try to handle anything
         }
 
         @Override
@@ -95,22 +95,5 @@ public class OidProviders {
 
     }
     
-    public static class OidForStandaloneCollections implements OidProvider {
-
-        @Override
-        public boolean isHandling(Object pojo, ObjectSpecification spec) {
-            return true; //FIXME spec.isParentedOrFreeCollection() && !spec.isParented();
-        }
-
-        @Override
-        public RootOid oidFor(Object pojo, ObjectSpecification spec) {
-            final PersistenceSession persistenceSession = IsisContext.getPersistenceSession().get();
-            final String identifier = persistenceSession.identifierFor(pojo, Oid.State.TRANSIENT);
-            return new RootOid(spec.getSpecId(), identifier, Oid.State.TRANSIENT);
-        }
-
-    }
-    
-    
 
 }
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
index f422f28..243cbac 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
@@ -432,11 +432,6 @@ public class ObjectAdapterMemento implements Serializable {
         }
 
         final RootOid oid = (RootOid) adapter.getOid();
-        
-        if(oid==null) {
-            System.out.println("!!! "+adapter.getSpecification());
-        }
-        
         if (oid.isTransient()) {
             transientMemento = new Memento(adapter);
             type = Type.TRANSIENT;


[isis] 03/06: Merge remote-tracking branch 'apache/ISIS-1976-rethink-object-adapters' into ISIS-1976-rethink-object-adapters

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 563fbef9c906e559078122f85d9cf3a0332b523f
Merge: 3696616 ddf185a
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sat Sep 8 18:55:29 2018 +0200

    Merge remote-tracking branch 'apache/ISIS-1976-rethink-object-adapters' into ISIS-1976-rethink-object-adapters



[isis] 04/06: ISIS-1976: refactoring OA creation into separated OidProviders

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 05d91d57b2565df02e93e38e6c08f04ef0e56ba2
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sat Sep 8 23:53:39 2018 +0200

    ISIS-1976: refactoring OA creation into separated OidProviders
    
    (intermediate step)
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../apache/isis/core/commons/ensure/Assert.java    |  10 +-
 .../isis/core/metamodel/adapter/oid/RootOid.java   |  23 +++-
 .../specloader/specimpl/FacetedMethodsBuilder.java |  18 ----
 .../persistence/PersistenceSession5_Decouple.java  |   2 +
 .../runtime/persistence/adapter/PojoAdapter.java   |   2 -
 .../adaptermanager/ObjectAdapterContext.java       |  29 ++----
 .../ObjectAdapterContext_NewIdentifier.java        |   3 +
 ...ObjectAdapterContext_ObjectAdapterProvider.java |  53 +++++++++-
 .../adaptermanager/OidAdapterHashMap.java          |  13 ++-
 .../persistence/adaptermanager/OidProviders.java   | 116 +++++++++++++++++++++
 .../adaptermanager/factories/OidFactory.java       |  48 +++++++++
 .../factories/OidFactory_Builder.java              |  66 ++++++++++++
 .../model/mementos/ObjectAdapterMemento.java       |   5 +
 13 files changed, 340 insertions(+), 48 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/ensure/Assert.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/ensure/Assert.java
index 197be18..77f9acf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/ensure/Assert.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/ensure/Assert.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.core.commons.ensure;
 
+import java.util.Objects;
+
 public final class Assert {
 
     public static void assertFalse(final String message, final boolean flag) {
@@ -46,5 +48,11 @@ public final class Assert {
             throw new IsisAssertException(message + (target == null ? "" : (": " + target)));
         }
     }
-
+    
+    public static void assertEquals(final String message, Object left, Object right) {
+        if (!Objects.equals(left, right)) {
+            throw new IsisAssertException(message + String.format(": '%s' != '%s' ", ""+left, ""+right));
+        }
+    }
+    
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
index 3136020..2f67f7e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
@@ -204,8 +204,6 @@ public class RootOid implements TypedOid, Serializable {
         return state.isPersistent();
     }
 
-
-
     // -- Version
 
     @Override
@@ -284,7 +282,28 @@ public class RootOid implements TypedOid, Serializable {
         return enString();
     }
 
+    // -- ROOT-ID SUPPORT FOR VALUE
+    
+    public boolean isValue() {
+        return false;
+    }
+    
+    private RootOid() { identifier=null; objectSpecId=null; state=null; };
+    
+    private static final RootOid VALUE_OID = new RootOid() {
+        private static final long serialVersionUID = 1L;
 
+        @Override
+        public boolean isValue() {
+            return true;
+        }
+    };
+    
+    public static RootOid value() {
+        return VALUE_OID;
+    }
+    
+    // --
 
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
index bd24115..4d77fdf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
@@ -28,7 +28,6 @@ import java.util.List;
 import java.util.Set;
 
 import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -164,14 +163,6 @@ public class FacetedMethodsBuilder {
 
     }
 
-    @Override
-    protected void finalize() throws Throwable {
-        super.finalize();
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("finalizing inspector {}", this);
-        }
-    }
-
     // ////////////////////////////////////////////////////////////////////////////
     // Class and stuff immediately derived from class
     // ////////////////////////////////////////////////////////////////////////////
@@ -214,15 +205,6 @@ public class FacetedMethodsBuilder {
 
     }
 
-    // REVIEW: good news - looks like this hacky code is unused and so can be deleted.
-    private static boolean isPrimitiveOrJdkOrJodaOrGuava(final Class<?> cls) {
-        if(cls.isPrimitive()) {
-            return true;
-        }
-        final String className = cls.getName();
-        return className.startsWith("java.") || className.startsWith("javax.") || className.startsWith("org.joda") || className.startsWith("com.google.common");
-    }
-
     // ////////////////////////////////////////////////////////////////////////////
     // introspect associations
     // ////////////////////////////////////////////////////////////////////////////
diff --git a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5_Decouple.java b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5_Decouple.java
index 9eb2613..5568f4d 100644
--- a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5_Decouple.java
+++ b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5_Decouple.java
@@ -26,6 +26,7 @@ import org.slf4j.LoggerFactory;
 
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.concurrency.ConcurrencyChecking;
@@ -103,6 +104,7 @@ class PersistenceSession5_Decouple  {
 
         final ObjectAdapter serviceAdapter = objectAdapterContext.lookupServiceAdapterFor(rootOid);
         if (serviceAdapter != null) {
+            _Exceptions.unexpectedCodeReach();
             return serviceAdapter;
         }
         
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
index e709e10..a83c9a8 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
@@ -19,8 +19,6 @@
 
 package org.apache.isis.core.runtime.persistence.adapter;
 
-import java.util.function.Function;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index 60329a9..fa273bc 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -96,14 +96,6 @@ public class ObjectAdapterContext {
             return adapter;
         }
         
-        private void putPojo(Object pojo, ObjectAdapter adapter) {
-            pojoAdapterMap.add(adapter.getObject(), adapter);
-        }
-        
-        private void removePojo(ObjectAdapter adapter) {
-            pojoAdapterMap.remove(adapter);
-        }
-        
         private ObjectAdapter lookupAdapterById(Oid oid) {
             return oidAdapterMap.getAdapter(oid);
         }
@@ -113,22 +105,17 @@ public class ObjectAdapterContext {
                 return; // nothing to do
             }
             final Oid oid = adapter.getOid();
-            if (oid != null) { // eg. value objects don't have an Oid
-                oidAdapterMap.add(oid, adapter);
-            }
-            putPojo(adapter.getObject(), adapter);
+            oidAdapterMap.add(oid, adapter);
+            pojoAdapterMap.add(adapter.getObject(), adapter);
         }
         
         private void removeAdapter(ObjectAdapter adapter) {
-            LOG.debug("removing adapter: {}", adapter);
             if(adapter==null) {
                 return; // nothing to do
             }
             final Oid oid = adapter.getOid();
-            if (oid != null) { // eg. value objects don't have an Oid
-                oidAdapterMap.remove(oid);
-            }
-            removePojo(adapter);
+            oidAdapterMap.remove(oid);
+            pojoAdapterMap.remove(adapter);
         }
         
     }
@@ -152,7 +139,7 @@ public class ObjectAdapterContext {
             PersistenceSession persistenceSession) {
         
         this.consistencyMixin = new ObjectAdapterContext_Consistency(this);
-        this.objectAdapterProviderMixin = new ObjectAdapterContext_ObjectAdapterProvider(this, persistenceSession);
+        this.objectAdapterProviderMixin = new ObjectAdapterContext_ObjectAdapterProvider(this, persistenceSession, authenticationSession);
         this.adapterManagerMixin = new ObjectAdapterContext_AdapterManager(this, persistenceSession);
         this.mementoSupportMixin = new ObjectAdapterContext_MementoSupport(this, persistenceSession);
         this.serviceLookupMixin = new ObjectAdapterContext_ServiceLookup(this, servicesInjector);
@@ -460,9 +447,11 @@ public class ObjectAdapterContext {
             final Object collectionPojoActuallyOnPojo = getCollectionPojo(otma, adapterReplacement);
 
             if (collectionPojoActuallyOnPojo != collectionPojoWrappedByAdapter) {
-                cache.removePojo(collectionAdapter);
+                cache.removeAdapter(collectionAdapter);
                 final ObjectAdapter newCollectionAdapter = collectionAdapter.withPojo(collectionPojoActuallyOnPojo);
-                cache.putPojo(collectionPojoActuallyOnPojo, newCollectionAdapter);
+                Assert.assertTrue("expected same", 
+                        Objects.equals(newCollectionAdapter.getObject(), collectionPojoActuallyOnPojo));
+                cache.addAdapter(collectionAdapter);
             }
         }
         
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_NewIdentifier.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_NewIdentifier.java
index 31995e8..5199d79 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_NewIdentifier.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_NewIdentifier.java
@@ -21,6 +21,7 @@ package org.apache.isis.core.runtime.system.persistence.adaptermanager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
@@ -92,7 +93,9 @@ class ObjectAdapterContext_NewIdentifier {
 
     RootOid newIdentifier(final Object pojo, final Oid.State type) {
         final ObjectSpecification spec = objectSpecFor(pojo);
+      //FIXME[ISIS-1976] remove guard 
         if(spec.isService()) {
+            //_Exceptions.throwUnexpectedCodeReach(); 
             return newRootId(spec, PersistenceSession.SERVICE_IDENTIFIER, Oid.State.PERSISTENT); // services are always persistent
         }
 
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
index 75d6e38..776c4db 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
@@ -26,10 +26,13 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.isis.commons.internal.base._Lazy;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.metamodel.IsisJdoMetamodelPlugin;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
@@ -37,7 +40,9 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+import org.apache.isis.core.runtime.persistence.adapter.PojoAdapter;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
+import org.apache.isis.core.runtime.system.persistence.adaptermanager.factories.OidFactory;
 
 /**
  * package private mixin for ObjectAdapterContext
@@ -52,17 +57,29 @@ class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvide
     private static final Logger LOG = LoggerFactory.getLogger(ObjectAdapterContext_ObjectAdapterProvider.class);
     private final ObjectAdapterContext objectAdapterContext;
     private final PersistenceSession persistenceSession;
+    private final AuthenticationSession authenticationSession;
     private final ServicesInjector servicesInjector;
     private final SpecificationLoader specificationLoader; 
-    private final IsisJdoMetamodelPlugin isisJdoMetamodelPlugin; 
+    private final IsisJdoMetamodelPlugin isisJdoMetamodelPlugin;
+    private final OidFactory oidFactory; 
     
     ObjectAdapterContext_ObjectAdapterProvider(ObjectAdapterContext objectAdapterContext,
-            PersistenceSession persistenceSession) {
+            PersistenceSession persistenceSession, AuthenticationSession authenticationSession) {
         this.objectAdapterContext = objectAdapterContext;
         this.persistenceSession = persistenceSession;
+        this.authenticationSession = authenticationSession;
         this.servicesInjector = persistenceSession.getServicesInjector();
         this.specificationLoader = servicesInjector.getSpecificationLoader();
         this.isisJdoMetamodelPlugin = IsisJdoMetamodelPlugin.get();
+        
+        this.oidFactory = OidFactory.builder(pojo->specificationLoader.loadSpecification(pojo.getClass()))
+                .add(new OidProviders.OidForServices())
+                .add(new OidProviders.OidForValues())
+                .add(new OidProviders.OidForViewModels())
+                .add(new OidProviders.OidForPersistables())
+                .add(new OidProviders.OidForMixins())
+                .add(new OidProviders.OidForStandaloneCollections())
+                .build();
     }
 
 //    @Override
@@ -85,6 +102,25 @@ class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvide
         if(pojo == null) {
             return null;
         }
+        
+        final  ObjectAdapter existing = objectAdapterContext.lookupAdapterByPojo(pojo);
+        if (existing != null) {
+            return existing;
+        }
+        
+        final RootOid rootOid2 = oidFactory.oidFor(pojo);
+        
+//        if(rootOid2==null) {
+//            System.err.println("!!! "+pojo);
+//            _Exceptions.throwUnexpectedCodeReach();
+//        }
+//        
+//        if(rootOid2!=null && rootOid2.isValue()) {
+//            return objectAdapterContext.getFactories().createRootAdapter(pojo, null);
+//        }
+        
+        // -- legacy code
+        
         final ObjectAdapter existingOrValueAdapter = existingOrValueAdapter(pojo);
         if(existingOrValueAdapter != null) {
             return existingOrValueAdapter;
@@ -92,6 +128,19 @@ class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvide
 
         final RootOid rootOid = objectAdapterContext.createTransientOrViewModelOid(pojo);
         
+      //at this point we know its not a value
+        if(rootOid2==null) {
+            System.err.println("!!! expected "+rootOid);
+            _Exceptions.throwUnexpectedCodeReach();
+        }
+        
+        
+        if(rootOid2!=null && rootOid2.isValue()) {
+            Assert.assertEquals("expected same", rootOid, null);
+        } else if(!rootOid.isTransient()) {
+            Assert.assertEquals("expected same", rootOid, rootOid2);    
+        }
+        
         final ObjectAdapter newAdapter = objectAdapterContext.getFactories().createRootAdapter(pojo, rootOid);
 
         return objectAdapterContext.mapAndInjectServices(newAdapter);
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidAdapterHashMap.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidAdapterHashMap.java
index da321e1..ea99b7b 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidAdapterHashMap.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidAdapterHashMap.java
@@ -22,6 +22,8 @@ package org.apache.isis.core.runtime.system.persistence.adaptermanager;
 import java.util.Iterator;
 import java.util.Map;
 
+import javax.annotation.Nullable;
+
 import com.google.common.collect.Maps;
 
 import org.slf4j.Logger;
@@ -62,8 +64,10 @@ class OidAdapterHashMap implements Iterable<Oid>, SessionScopedComponent {
     /**
      * Add an adapter for a given oid
      */
-    public void add(final Oid oid, final ObjectAdapter adapter) {
-
+    public void add(@Nullable final Oid oid, final ObjectAdapter adapter) {
+        if(oid==null) { // eg. value objects don't have an Oid
+            return;
+        }
         adapterByOidMap.put(oid, adapter);
         // log at end so that if toString needs adapters they're in maps.
         if (LOG.isDebugEnabled()) {
@@ -80,7 +84,10 @@ class OidAdapterHashMap implements Iterable<Oid>, SessionScopedComponent {
      *
      * @return <tt>true</tt> if an adapter was removed.
      */
-    public boolean remove(final Oid oid) {
+    public boolean remove(@Nullable final Oid oid) {
+        if(oid==null) { // eg. value objects don't have an Oid
+            return false;
+        }
         LOG.debug("remove oid: {}", oid);
         return adapterByOidMap.remove(oid) != null;
     }
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java
new file mode 100644
index 0000000..e01e83e
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java
@@ -0,0 +1,116 @@
+package org.apache.isis.core.runtime.system.persistence.adaptermanager;
+
+import org.apache.isis.core.metamodel.IsisJdoMetamodelPlugin;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
+import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
+import org.apache.isis.core.runtime.system.persistence.adaptermanager.factories.OidFactory.OidProvider;
+
+public class OidProviders {
+
+    public static class OidForServices implements OidProvider {
+
+        @Override
+        public boolean isHandling(Object pojo, ObjectSpecification spec) {
+            return spec.isService();
+        }
+
+        @Override
+        public RootOid oidFor(Object pojo, ObjectSpecification spec) {
+            final String identifier = PersistenceSession.SERVICE_IDENTIFIER;
+            return new RootOid(spec.getSpecId(), identifier, Oid.State.PERSISTENT);
+        }
+
+    }
+
+    public static class OidForPersistables implements OidProvider {
+
+        private final IsisJdoMetamodelPlugin isisJdoMetamodelPlugin = IsisJdoMetamodelPlugin.get();
+
+        @Override
+        public boolean isHandling(Object pojo, ObjectSpecification spec) {
+            // equivalent to  isInstanceOfPersistable = pojo instanceof Persistable;
+            final boolean isInstanceOfPersistable = isisJdoMetamodelPlugin.isPersistenceEnhanced(pojo.getClass());
+            return isInstanceOfPersistable;
+        }
+
+        @Override
+        public RootOid oidFor(Object pojo, ObjectSpecification spec) {
+            final PersistenceSession persistenceSession = IsisContext.getPersistenceSession().get();
+            final Oid.State state = persistenceSession.isTransient(pojo) ? Oid.State.TRANSIENT : Oid.State.PERSISTENT;
+            final String identifier = persistenceSession.identifierFor(pojo, state);
+            return new RootOid(spec.getSpecId(), identifier, state);
+        }
+
+    }
+
+
+    public static class OidForValues implements OidProvider {
+
+        @Override
+        public boolean isHandling(Object pojo, ObjectSpecification spec) {
+            return spec.containsFacet(ValueFacet.class);
+        }
+
+        @Override
+        public RootOid oidFor(Object pojo, ObjectSpecification spec) {
+            return RootOid.value();
+        }
+
+    }
+    
+    public static class OidForViewModels implements OidProvider {
+
+        @Override
+        public boolean isHandling(Object pojo, ObjectSpecification spec) {
+            return spec.containsFacet(ViewModelFacet.class);
+        }
+
+        @Override
+        public RootOid oidFor(Object pojo, ObjectSpecification spec) {
+            final ViewModelFacet recreatableObjectFacet = spec.getFacet(ViewModelFacet.class);
+            final String identifier = recreatableObjectFacet.memento(pojo);
+            return new RootOid(spec.getSpecId(), identifier, Oid.State.VIEWMODEL);
+        }
+
+    }
+    
+    public static class OidForMixins implements OidProvider {
+
+        @Override
+        public boolean isHandling(Object pojo, ObjectSpecification spec) {
+            return spec.isMixin();
+        }
+
+        @Override
+        public RootOid oidFor(Object pojo, ObjectSpecification spec) {
+            final PersistenceSession persistenceSession = IsisContext.getPersistenceSession().get();
+            final String identifier = persistenceSession.identifierFor(pojo, Oid.State.TRANSIENT);
+            return new RootOid(spec.getSpecId(), identifier, Oid.State.TRANSIENT);
+        }
+
+    }
+    
+    public static class OidForStandaloneCollections implements OidProvider {
+
+        @Override
+        public boolean isHandling(Object pojo, ObjectSpecification spec) {
+            return true; //FIXME spec.isParentedOrFreeCollection() && !spec.isParented();
+        }
+
+        @Override
+        public RootOid oidFor(Object pojo, ObjectSpecification spec) {
+            final PersistenceSession persistenceSession = IsisContext.getPersistenceSession().get();
+            final String identifier = persistenceSession.identifierFor(pojo, Oid.State.TRANSIENT);
+            return new RootOid(spec.getSpecId(), identifier, Oid.State.TRANSIENT);
+        }
+
+    }
+    
+    
+
+}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/factories/OidFactory.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/factories/OidFactory.java
new file mode 100644
index 0000000..d3646ae
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/factories/OidFactory.java
@@ -0,0 +1,48 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.runtime.system.persistence.adaptermanager.factories;
+
+import java.util.function.Function;
+
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+
+/**
+ * @since 2.0.0-M2
+ */
+public interface OidFactory {
+    
+    RootOid oidFor(Object pojo);
+    
+    public interface OidProvider {
+        boolean isHandling(Object pojo, ObjectSpecification spec);
+        RootOid oidFor(Object pojo, ObjectSpecification spec);
+    }
+    
+    public interface OidFactoryBuilder {
+        OidFactoryBuilder add(OidProvider handler);
+        OidFactory build();
+    }
+    
+    public static OidFactoryBuilder builder(Function<Object, ObjectSpecification> specProvider) {
+        return new OidFactory_Builder(specProvider);
+    }
+
+}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/factories/OidFactory_Builder.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/factories/OidFactory_Builder.java
new file mode 100644
index 0000000..a7bb938
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/factories/OidFactory_Builder.java
@@ -0,0 +1,66 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.runtime.system.persistence.adaptermanager.factories;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Function;
+
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.runtime.system.persistence.adaptermanager.factories.OidFactory.OidFactoryBuilder;
+import org.apache.isis.core.runtime.system.persistence.adaptermanager.factories.OidFactory.OidProvider;
+
+class OidFactory_Builder implements OidFactoryBuilder {
+    
+    private final List<OidProvider> handler = new ArrayList<>();
+    private final Function<Object, ObjectSpecification> specProvider;
+    
+    public OidFactory_Builder(Function<Object, ObjectSpecification> specProvider) {
+        this.specProvider = specProvider;
+    }
+
+    @Override
+    public OidFactoryBuilder add(OidProvider oidProvider) {
+        handler.add(oidProvider);
+        return this;
+    }
+
+    @Override
+    public OidFactory build() {
+        return new OidFactory() {
+            
+            @Override
+            public RootOid oidFor(Object pojo) {
+                
+                final ObjectSpecification spec = specProvider.apply(pojo);
+                
+                return handler.stream()
+                .filter(h->h.isHandling(pojo, spec))
+                .findFirst()
+                .map(h->h.oidFor(pojo, spec))
+                .orElse(null);
+            }
+            
+        };
+    }
+    
+
+}
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
index 243cbac..f422f28 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
@@ -432,6 +432,11 @@ public class ObjectAdapterMemento implements Serializable {
         }
 
         final RootOid oid = (RootOid) adapter.getOid();
+        
+        if(oid==null) {
+            System.out.println("!!! "+adapter.getSpecification());
+        }
+        
         if (oid.isTransient()) {
             transientMemento = new Memento(adapter);
             type = Type.TRANSIENT;