This setting allows you to change the reflector for db4o. The reflector is responsible to inspect the metadata of objects and report them to db4o. See "db4o Reflection API"
This setting also allows you also to specify which class-loader is used to find classes. For that you pass the right class-loader to the JdkReflector constructor.
EmbeddedConfiguration configuration = Db4oEmbedded.newConfiguration();
configuration.common().reflectWith(
new JdkReflector(Thread.currentThread().getContextClassLoader()));
It's also possible to use very special class resolving strategy by implementing the JdkLoader-interface. For example when you want to look up classes in multiple class loaders.
EmbeddedConfiguration configuration = Db4oEmbedded.newConfiguration(); JdkLoader classLookUp = new ClassLoaderLookup( Thread.currentThread().getContextClassLoader(), new URLClassLoader(new URL[]{new URL("file://./some/other/location")})); configuration.common().reflectWith(new JdkReflector(classLookUp)); ObjectContainer container = Db4oEmbedded.openFile("database.db4o");
public class ClassLoaderLookup implements JdkLoader { private final List<ClassLoader> classLoaders; ClassLoaderLookup(ClassLoader...classLoaders) { this.classLoaders = Arrays.asList(classLoaders); } ClassLoaderLookup(Collection<ClassLoader> classLoaders) { this.classLoaders = new ArrayList<ClassLoader>(classLoaders); } @Override public Class loadClass(String className) { for (ClassLoader loader : classLoaders) { Class<?> theClass = null; try { theClass = loader.loadClass(className); return theClass; } catch (ClassNotFoundException e) { // first check the other loaders } } throw new RuntimeException(new ClassNotFoundException(className)); } @Override public Object deepClone(Object o) { return new ClassLoaderLookup(classLoaders); } }