Skip to content

Commit 6c3ffb8

Browse files
committed
Merge pull request #98 from jsight/classloaderresolver
Added a pluggable type resolver classloader system
2 parents 51909b9 + 8472546 commit 6c3ffb8

File tree

4 files changed

+46
-3
lines changed

4 files changed

+46
-3
lines changed

src/main/java/com/tinkerpop/frames/FramedGraph.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public <F> F frame(final Vertex vertex, final Class<F> kind) {
103103
resolvedTypes.addAll(Arrays.asList(typeResolver.resolveTypes(
104104
vertex, kind)));
105105
}
106-
return (F) Proxy.newProxyInstance(kind.getClassLoader(),
106+
return (F) Proxy.newProxyInstance(config.getFrameClassLoaderResolver().resolveClassLoader(kind),
107107
resolvedTypes.toArray(new Class[resolvedTypes.size()]),
108108
new FramedElement(this, vertex));
109109
}
@@ -139,7 +139,7 @@ public <F> F frame(final Edge edge, final Direction direction,
139139
resolvedTypes.addAll(Arrays.asList(typeResolver.resolveTypes(edge,
140140
kind)));
141141
}
142-
return (F) Proxy.newProxyInstance(kind.getClassLoader(),
142+
return (F) Proxy.newProxyInstance(config.getFrameClassLoaderResolver().resolveClassLoader(kind),
143143
resolvedTypes.toArray(new Class[resolvedTypes.size()]),
144144
new FramedElement(this, edge, direction));
145145
}

src/main/java/com/tinkerpop/frames/FramedGraphConfiguration.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
import com.tinkerpop.blueprints.Graph;
1010
import com.tinkerpop.frames.annotations.AnnotationHandler;
11+
import com.tinkerpop.frames.modules.DefaultClassLoaderResolver;
12+
import com.tinkerpop.frames.modules.FrameClassLoaderResolver;
1113
import com.tinkerpop.frames.modules.MethodHandler;
1214
import com.tinkerpop.frames.modules.Module;
1315
import com.tinkerpop.frames.modules.TypeResolver;
@@ -28,6 +30,7 @@ public class FramedGraphConfiguration {
2830
private Map<Class<? extends Annotation>, MethodHandler<?>> methodHandlers = new HashMap<Class<? extends Annotation>, MethodHandler<?>>();
2931
private List<FrameInitializer> frameInitializers = new ArrayList<FrameInitializer>();
3032
private List<TypeResolver> typeResolvers = new ArrayList<TypeResolver>();
33+
private FrameClassLoaderResolver frameClassLoaderResolver = new DefaultClassLoaderResolver();
3134
private Graph configuredGraph;
3235

3336

@@ -68,6 +71,10 @@ public void addTypeResolver(TypeResolver typeResolver) {
6871
typeResolvers.add(typeResolver);
6972
}
7073

74+
public void setFrameClassLoaderResolver(FrameClassLoaderResolver frameClassLoaderResolver) {
75+
this.frameClassLoaderResolver = frameClassLoaderResolver;
76+
}
77+
7178
List<FrameInitializer> getFrameInitializers() {
7279
return frameInitializers;
7380
}
@@ -79,7 +86,11 @@ Map<Class<? extends Annotation>, AnnotationHandler<?>> getAnnotationHandlers() {
7986
List<TypeResolver> getTypeResolvers() {
8087
return typeResolvers;
8188
}
82-
89+
90+
FrameClassLoaderResolver getFrameClassLoaderResolver() {
91+
return frameClassLoaderResolver;
92+
}
93+
8394
public void setConfiguredGraph(Graph configuredGraph) {
8495
this.configuredGraph = configuredGraph;
8596
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.tinkerpop.frames.modules;
2+
3+
/**
4+
* Implements a basic FrameClassLoaderResolver that simply returns
5+
* the ClassLoader of the provided Frame Type.
6+
*
7+
* @author Jess Sightler <[email protected]>
8+
*/
9+
public class DefaultClassLoaderResolver implements FrameClassLoaderResolver {
10+
@Override
11+
public ClassLoader resolveClassLoader(Class<?> frameType) {
12+
return frameType.getClassLoader();
13+
}
14+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.tinkerpop.frames.modules;
2+
3+
/**
4+
* This allows the user to provide a custom ClassLoaderResolver. In some
5+
* cases, the user may wish for a type to be framed with a non-default
6+
* classloader (for example, if supplementary types from a TypeResolver
7+
* need to be loaded from some other classloader).
8+
*
9+
* This resolution system allows the user to provide their own custom classloader
10+
* resolver.
11+
*
12+
* Instances of this class should be threadsafe.
13+
*
14+
* @author Jess Sightler <[email protected]>
15+
*/
16+
public interface FrameClassLoaderResolver {
17+
public ClassLoader resolveClassLoader(Class<?> frameType);
18+
}

0 commit comments

Comments
 (0)