动态创建java类,并使其可以通过网络访问不同的jvms,即可序列化

时间:2010-04-27 00:52:34

标签: class dynamic oracle-coherence javassist

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

我尝试使用javassist和reflection在运行时创建类。我能够从单个JVM访问它,但是当我尝试从其他jvm [通过coherence cluster]访问同一个类时。我没有找到类的例外[因为远程jvm没有这个类的想法]。我可以通过在远程jvm上动态创建相同的类来访问这些方法。但是,构建的方法/函数的一致性无法找到类。 可能有人帮我解决这个问题

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

创建的新类必须可用于群集的所有节点。这意味着新创建的字节码必须在每个节点JVM的类路径/类加载器上。我认为最简单的方法是将生成的类放在共享网络驱动器上,让所有JVM指向其类路径中的共享网络位置。每当JVM找到对新类的引用时,它应该从网络共享中动态加载它。