4

我需要动态创建 java 类并使其可以通过网络访问不同的 jvm。我尝试使用反射和 javassist 工具,但没有任何效果。让我解释一下我们使用 Coherence 分布式缓存的场景。它具有跨集群并行进行聚合/过滤的能力。例如,如果一个类有 [动态类] 有数量变量和 getAmount/setAmount 方法。然后,如果我们执行 COHERENCE 查询,它将在整个集群中并行启动进程。

我尝试使用 javassist 和反射在运行时创建类。我可以从单个 JVM 访问它,但是当我尝试从其他 jvm [通过一致性集群]访问同一类时。我遇到了找不到类的异常[因为远程 jvm 不知道这个类]。我可以通过在远程 jvm 上动态创建相同的类并访问这些方法来克服这个问题。但是内置方法/函数的连贯性无法找到该类。有人可以帮我解决这个问题吗

4

2 回答 2

1

A new class that gets created must be available to all nodes of the cluster. It means that the newly created bytecode must get on each node JVM's classpath/classloader. The simplest approach in my mind would be to put the generated classes on a shared network drive and have all JVMs point to that shared network location in their classpaths. Each time a JVM finds a reference to the new class it should load it dynamically from the network share.

于 2014-01-16T15:15:11.163 回答
0

您可以复制由 javassist 创建的字节数组并通过网络发送此字节数组并通过自定义加载此字节数组ClassLoader。这样,该类将在所有 JVM 上表示。

于 2013-12-29T14:47:14.203 回答