Hello!

As far as my understanding goes:

1) It is H2's decision to exhibit JdbcUtil.serializer as their public API,
they have a public system property to override it:

/**
 * System property <code>h2.javaObjectSerializer</code>
 * (default: null).<br />
 * The JavaObjectSerializer class name for java objects being stored in
 * column of type OTHER. It must be the same on client and server to work
 * correctly.
 */
public static final String JAVA_OBJECT_SERIALIZER =
        Utils.getProperty("h2.javaObjectSerializer", null);


Obviously, this is not designed for multi-tenancy of H2 in mind.

If you really need multi-tenancy, I recommend starting H2 in a separate
class loader inherited from root class loader and isolated from any Ignite
classes.

Regards,
-- 
Ilya Kasnacheev


ср, 18 мар. 2020 г. в 18:54, Andrey Davydov <andrey.davy...@gmail.com>:

> Hello,
>
>
> org.h2.util.JdbcUtils is utility class with all static methods  and
> configured via System.properties. So it system wide resource. It is
> incorrect inject Ignite specific settings in it.
>
>
>
> this     - value: org.apache.ignite.internal.IgniteKernal #1
>
> <- grid     - class: org.apache.ignite.internal.GridKernalContextImpl,
> value: org.apache.ignite.internal.IgniteKernal #1
>
>   <- ctx     - class:
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing, value:
> org.apache.ignite.internal.GridKernalContextImpl #2
>
>    <- this$0     - class:
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing$10, value:
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing #2
>
>     <- serializer     - class: org.h2.util.JdbcUtils, value:
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing$10 #1
>
>      <- [5395]     - class: java.lang.Object[], value:
> org.h2.util.JdbcUtils class JdbcUtils
>
>       <- elementData     - class: java.util.Vector, value:
> java.lang.Object[] #37309
>
>        <- classes     - class: sun.misc.Launcher$AppClassLoader, value:
> java.util.Vector #31
>
>         <- contextClassLoader (thread object)     - class:
> java.lang.Thread, value: sun.misc.Launcher$AppClassLoader #1
>
>
>
>    1. It cause problems, if it need to work with H2 databases from same
>    JVM where ignite run.
>    2. It cause problems, when some Ignites run in same JVM
>    3. It makes closed IgniteKernal reachable from GC root.
>
>
>
> I think it is bad architecture solution to use this class and use H2
> related system properties at all.
>
>
>
> Andrey.
>
>
>

Reply via email to