Skip to content

Commit

Permalink
#48 jRebel support
Browse files Browse the repository at this point in the history
  • Loading branch information
joachimvda committed Nov 12, 2014
1 parent d1da9fc commit 0560be4
Show file tree
Hide file tree
Showing 5 changed files with 134 additions and 0 deletions.
6 changes: 6 additions & 0 deletions checkstyle.xml
Expand Up @@ -69,6 +69,12 @@
<property name="checkFormat" value="IllegalThrowsCheck"/>
</module>

<module name="SuppressionCommentFilter">
<property name="offCommentFormat" value="CHECKSTYLE EMPTY_BLOCK\: OFF"/>
<property name="onCommentFormat" value="CHECKSTYLE EMPTY_BLOCK\: ON"/>
<property name="checkFormat" value="EmptyBlock"/>
</module>

<module name="TreeWalker">

<property name="cacheFile" value="./checkstyle.cache"/>
Expand Down
6 changes: 6 additions & 0 deletions core/pom.xml
Expand Up @@ -19,6 +19,12 @@
<description>JTransfo core</description>

<dependencies>
<dependency>
<groupId>org.zeroturnaround</groupId>
<artifactId>jr-sdk</artifactId>
<scope>provided</scope>
</dependency>

<dependency>
<artifactId>junit</artifactId>
<groupId>junit</groupId>
Expand Down
25 changes: 25 additions & 0 deletions core/src/main/java/org/jtransfo/JTransfoImpl.java
Expand Up @@ -14,6 +14,7 @@
import org.jtransfo.internal.NewInstanceObjectFinder;
import org.jtransfo.internal.ToHelper;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -47,6 +48,23 @@ public JTransfoImpl() {
updateTypeConverters();

updateConvertInterceptors();

// CHECKSTYLE EMPTY_BLOCK: OFF
try {
ClassLoader cl = Thread.currentThread().getContextClassLoader();
Class<?> plugin = cl.loadClass("org.jtransfo.JTransfoJrebelPlugin");
Method setInstance = plugin.getMethod("setInstance", JTransfoImpl.class);
Method preInit = plugin.getMethod("preinit");
if (null != setInstance && null != preInit) {
Object instance = plugin.newInstance();
setInstance.invoke(instance, this);
preInit.invoke(instance);
}
System.out.println("jRebel reload support for jTransfo loaded.");
} catch (Throwable ex) {
// JRebel not found - will not reload directory service automatically.
}
// CHECKSTYLE EMPTY_BLOCK: ON
}

/**
Expand Down Expand Up @@ -272,6 +290,13 @@ public Class<?> getToSubType(Class<?> toType, Object domainObject) {
return toHelper.getToSubType(toType, domainObject);
}

/**
* Clear cache with converters. Needed when classes are reloaded by something like jRebel or spring reloaded.
*/
public void clearCaches() {
converters.clear();
}

private List<Converter> getToToConverters(Class toClass) {
return getToConverter(toClass).getToTo();
}
Expand Down
91 changes: 91 additions & 0 deletions core/src/main/java/org/jtransfo/JTransfoJrebelPlugin.java
@@ -0,0 +1,91 @@
/*
* This file is part of jTransfo, a library for converting to and from transfer objects.
* Copyright (c) PROGS bvba, Belgium
*
* The program is available in open source according to the Apache License, Version 2.0.
* For full licensing details, see LICENSE.txt in the project root.
*/

package org.jtransfo;

import org.zeroturnaround.javarebel.ClassEventListener;
import org.zeroturnaround.javarebel.ClassResourceSource;
import org.zeroturnaround.javarebel.LoggerFactory;
import org.zeroturnaround.javarebel.Plugin;
import org.zeroturnaround.javarebel.ReloaderFactory;

/**
* Jrebel plugin, assure jTransfo does not keep working with 'old' class definitions.
*/
public class JTransfoJrebelPlugin implements Plugin {

private JTransfoImpl jTransfo;

/**
* Set instance for which this plugin (instance) applies.
*
* @param instance jTransfo registry instance
*/
public void setInstance(JTransfoImpl instance) {
jTransfo = instance;
}

@Override
public void preinit() {
registerListener();
}

private void registerListener() {
// Set up the reload listener
ReloaderFactory.getInstance().addClassReloadListener(
new ClassEventListener() {
public void onClassEvent(int eventType, Class klass) {
try {
if (klass.isAnnotationPresent(DomainClass.class) ||
klass.isAnnotationPresent(DomainClassDelegate.class)) {
jTransfo.clearCaches();
}
} catch (Exception e) {
LoggerFactory.getInstance().error(e);
System.out.println(e);
}
}

public int priority() {
return 0;
}
}
);
}

@Override
public boolean checkDependencies(ClassLoader classLoader, ClassResourceSource classResourceSource) {
return classResourceSource.getClassResource("org.jtransfo.JTransfoImpl") != null;
}

@Override
public String getId() {
return "JTransfoJrebelPlugin";
}

@Override
public String getName() {
return "JRebel Plugin for jTransfo";
}

@Override
public String getDescription() {
return "Assure jTransfo notices changes in mapped classes - clear cache.";
}

@Override
public String getAuthor() {
return null;
}

@Override
public String getWebsite() {
return null;
}

}
6 changes: 6 additions & 0 deletions pom.xml
Expand Up @@ -207,6 +207,12 @@
<version>1.6.4</version>
</dependency>

<dependency>
<groupId>org.zeroturnaround</groupId>
<artifactId>jr-sdk</artifactId>
<version>3.0-M1</version>
</dependency>

</dependencies>
</dependencyManagement>

Expand Down

0 comments on commit 0560be4

Please sign in to comment.