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/10/28 17:16:54 UTC
[51/56] [abbrv] ISIS-938: mothball isis-core-bytecode-cglib and
isis-core-bytecode-javassist. Minor changes in
PersistenceMechanismInstallerAbstract to remove vestigial dependency on same.
http://git-wip-us.apache.org/repos/asf/isis/blob/20d2d9bc/mothballed/bytecode-javassist/src/main/java/org/apache/isis/core/bytecode/javassist/ObjectResolveAndObjectChangedEnhancer.java
----------------------------------------------------------------------
diff --git a/mothballed/bytecode-javassist/src/main/java/org/apache/isis/core/bytecode/javassist/ObjectResolveAndObjectChangedEnhancer.java b/mothballed/bytecode-javassist/src/main/java/org/apache/isis/core/bytecode/javassist/ObjectResolveAndObjectChangedEnhancer.java
new file mode 100644
index 0000000..b1103b0
--- /dev/null
+++ b/mothballed/bytecode-javassist/src/main/java/org/apache/isis/core/bytecode/javassist/ObjectResolveAndObjectChangedEnhancer.java
@@ -0,0 +1,113 @@
+/*
+ * 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.bytecode.javassist;
+
+import java.lang.reflect.Method;
+
+import javassist.util.proxy.MethodFilter;
+import javassist.util.proxy.MethodHandler;
+import javassist.util.proxy.ProxyFactory;
+import javassist.util.proxy.ProxyObject;
+
+import org.apache.isis.core.commons.exceptions.IsisException;
+import org.apache.isis.core.commons.lang.ArrayExtensions;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.ImperativeFacetUtils;
+import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+import org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault;
+import org.apache.isis.core.runtime.bytecode.ObjectResolveAndObjectChangedEnhancerAbstract;
+import org.apache.isis.core.runtime.persistence.objectfactory.ObjectChanger;
+import org.apache.isis.core.runtime.persistence.objectfactory.ObjectResolver;
+
+public class ObjectResolveAndObjectChangedEnhancer extends ObjectResolveAndObjectChangedEnhancerAbstract {
+
+ private MethodHandler methodHandler;
+
+ public ObjectResolveAndObjectChangedEnhancer(final ObjectResolver objectResolver, final ObjectChanger objectChanger, final SpecificationLoaderSpi specificationLoader) {
+ super(objectResolver, objectChanger, specificationLoader);
+
+ createCallback();
+ }
+
+ @Override
+ protected void createCallback() {
+ this.methodHandler = new MethodHandler() {
+ @Override
+ public Object invoke(final Object proxied, final Method proxyMethod, final Method proxiedMethod, final Object[] args) throws Throwable {
+
+ final boolean ignore = proxyMethod.getDeclaringClass().equals(Object.class);
+ ImperativeFacet.Flags flags = null;
+
+ if (!ignore) {
+ final ObjectSpecificationDefault targetObjSpec = getJavaSpecificationOfOwningClass(proxiedMethod);
+
+ final ObjectMember member = targetObjSpec.getMember(proxiedMethod);
+ flags = ImperativeFacetUtils.getImperativeFacetFlags(member, proxiedMethod);
+
+ if (flags.impliesResolve()) {
+ objectResolver.resolve(proxied, member.getName());
+ }
+ }
+
+ final Object proxiedReturn = proxiedMethod.invoke(proxied, args); // execute
+ // the
+ // original
+ // method.
+
+ if (!ignore && flags.impliesObjectChanged()) {
+ objectChanger.objectChanged(proxied);
+ }
+
+ return proxiedReturn;
+ }
+ };
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T> T newInstance(final Class<T> cls) {
+
+ final ProxyFactory proxyFactory = new ProxyFactory();
+ proxyFactory.setSuperclass(cls);
+ proxyFactory.setInterfaces(ArrayExtensions.combine(cls.getInterfaces(), new Class<?>[] { JavassistEnhanced.class }));
+
+ proxyFactory.setFilter(new MethodFilter() {
+ @Override
+ public boolean isHandled(final Method m) {
+ // ignore finalize()
+ return !m.getName().equals("finalize");
+ }
+ });
+
+ final Class<T> proxySubclass = proxyFactory.createClass();
+ try {
+ final T newInstance = proxySubclass.newInstance();
+ final ProxyObject proxyObject = (ProxyObject) newInstance;
+ proxyObject.setHandler(methodHandler);
+
+ return newInstance;
+ } catch (final InstantiationException e) {
+ throw new IsisException(e);
+ } catch (final IllegalAccessException e) {
+ throw new IsisException(e);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/20d2d9bc/tck/tck-viewer-wicket/pom.xml
----------------------------------------------------------------------
diff --git a/tck/tck-viewer-wicket/pom.xml b/tck/tck-viewer-wicket/pom.xml
index 524f3ac..32125b5 100644
--- a/tck/tck-viewer-wicket/pom.xml
+++ b/tck/tck-viewer-wicket/pom.xml
@@ -65,33 +65,29 @@
</plugins>
</build>
- <dependencies>
-
- <!-- other modules in this project -->
- <dependency>
+ <dependencies>
+
+ <!-- other modules in this project -->
+ <dependency>
<groupId>org.apache.isis.tck</groupId>
- <artifactId>isis-tck-dom</artifactId>
- </dependency>
-
+ <artifactId>isis-tck-dom</artifactId>
+ </dependency>
+
<dependency>
<groupId>org.apache.isis.tck</groupId>
<artifactId>isis-tck-fixture</artifactId>
</dependency>
<!-- isis viewer -->
- <dependency>
- <groupId>org.apache.isis.viewer</groupId>
- <artifactId>isis-viewer-wicket-impl</artifactId>
+ <dependency>
+ <groupId>org.apache.isis.viewer</groupId>
+ <artifactId>isis-viewer-wicket-impl</artifactId>
<version>${isis-viewer-wicket.version}</version>
- </dependency>
+ </dependency>
<!-- isis runtime -->
<dependency>
<groupId>org.apache.isis.core</groupId>
- <artifactId>isis-core-bytecode-cglib</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.isis.core</groupId>
<artifactId>isis-core-objectstore</artifactId>
</dependency>
<dependency>
http://git-wip-us.apache.org/repos/asf/isis/blob/20d2d9bc/tck/tck-viewer-wicket/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git a/tck/tck-viewer-wicket/src/main/webapp/WEB-INF/isis.properties b/tck/tck-viewer-wicket/src/main/webapp/WEB-INF/isis.properties
index b6f34f0..a6b56f5 100644
--- a/tck/tck-viewer-wicket/src/main/webapp/WEB-INF/isis.properties
+++ b/tck/tck-viewer-wicket/src/main/webapp/WEB-INF/isis.properties
@@ -34,9 +34,6 @@ isis.fixtures=\
assocs.ParentAndChildEntityFixture
-isis.reflector.class-substitutor=org.apache.isis.runtimes.dflt.bytecode.dflt.classsubstitutor.CglibClassSubstitutor
-#isis.reflector.class-substitutor=org.apache.isis.runtimes.dflt.bytecode.javassist.classsubstitutor.JavassistClassSubstitutor
-#isis.reflector.class-substitutor=org.apache.isis.runtimes.dflt.bytecode.identity.classsubstitutor.ClassSubstitutorIdentity
isis.persistor.object-factory=org.apache.isis.runtimes.dflt.bytecode.dflt.objectfactory.CglibObjectFactory
#isis.persistor.object-factory=org.apache.isis.runtimes.dflt.bytecode.javassist.objectfactory.JavassistObjectFactory