metricsCallback: Callback class could not be loaded

Hi all,

We are using datomic pro 0.9.5350 (peer) in a Scala application, and I’m having trouble getting the metricsCallback to work with a Java-style callback.

I have this in my JVM startup options:

-Ddatomic.metricsCallback=util.datomic.DatomicCallback.metricsCallback

I’ve tried creating various different versions of Scala and Java classes to handle the callback, but I can’t seem to get datomic to load the class for the callback. Here is the simplest example I’ve tried:

package util.datomic;

public class DatomicCallback {
    public static void metricsCallback(Object obj) {
        System.out.println("metricsCallback");
        System.out.println(obj);
    }
}

At startup, I get this log message:

2019-03-26 16:07:16,340 [WARN] from datomic.callback - {:message "Callback class util.datomic.DatomicCallback could not be loaded", :pid 13256, :tid 101}

I verified there is a compiled util/datomic/DatomicCallback.class in the build artifacts directory tree.

Is there something obviously wrong with what I’m doing, or a way to troubleshoot this further?

Hi Andy,

Have you ensured that the util/datomic/DatomicCallback.class is in the classpath of your JVM process?

Hi Marshall,
Thanks for your reply.

I believe the class is in the classpath, and to double check, I added some test code to the app to try to load the class at startup. I also added a check for a non-existing class to make sure I wasn’t getting a false positive. (This is a scala project).

try {
    println("Loading valid class...")
    val x = Class.forName("util.datomic.DatomicCallback").asInstanceOf[Class[util.datomic.DatomicCallback]]
    println("Loaded class:")
    println(x)

    println("Loading invalid class...")
    val y = Class.forName("util.datomic.DatomicCallbackx").asInstanceOf[Class[util.datomic.DatomicCallback]]
    println("Loaded class:")
    println(y)
  } catch {
    case e: Throwable =>
      println("Failed to load class:")
      println(e)
  }

This prints:

Loading valid class...
Loaded class:
class util.datomic.DatomicCallback
Loading invalid class...
Failed to load class:
java.lang.ClassNotFoundException: util.datomic.DatomicCallbackx

I still get this error from datomic from its attempt to load the callback class:

2019-04-17 22:23:14,326 [WARN] from datomic.callback - {:message "Callback class util.datomic.DatomicCallback could not be loaded", :pid 27537, :tid 1016}