« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
| 公告 |
戒除浮躁,读好书,交益友 |
Blog信息 |
blog名称:邢红瑞的blog 日志总数:523 评论数量:1142 留言数量:0 访问次数:9688792 建立时间:2004年12月20日 |

| |
[java语言]jgroups的bug 原创空间, 文章收藏, 电脑与网络
邢红瑞 发表于 2008/5/12 21:27:32 |
jgroups 2.2.9 使用时Exception in thread "main" org.jgroups.ChannelException: failed loading class: java.lang.ClassNotFoundException: [Ljava.lang.Object; at org.jgroups.conf.ClassConfigurator.init(ClassConfigurator.java:93) at org.jgroups.conf.ClassConfigurator.getInstance(ClassConfigurator.java:113) at org.jgroups.conf.ClassConfigurator.main(ClassConfigurator.java:211) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597)运行ClassConfigurator的main函数也有问题,这段代码以前是没有问题,肯定是环境的问题。发现jg-magic-map.xml,提供"org.jgroups.conf.magicNumberFile" 系统属性。删除<class> <description>Object Array</description> <class-name>[Ljava.lang.Object;</class-name> <preload>true</preload> <magic-number>37</magic-number></class>就ok。原因是ClassLoader.loadClass is not supposed to support the array class namesyntax,但是jdk一直没有修复这个bug。运行一下代码import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.ObjectStreamClass;
public class SerializeTest {
public static void main(String[] args) throws Exception { String[] objs = new String[10]; objs[0] = new String(); String[] objs2 = (String[])cloneObject(objs, SerializeTest.class.getClassLoader()); } public static Object cloneObject(Object toClone, final ClassLoader classLoader) throws Exception { ByteArrayOutputStream bOut = new ByteArrayOutputStream(); ObjectOutputStream oOut = new ObjectOutputStream(bOut); oOut.writeObject(toClone); oOut.close(); ByteArrayInputStream bIn = new ByteArrayInputStream(bOut.toByteArray()); bOut.close(); ObjectInputStream oIn = new ObjectInputStream(bIn) { protected Class resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException { System.out.println("Attempting to load class "+desc.getName()); return classLoader.loadClass(desc.getName()); } }; bIn.close(); Object copy = oIn.readObject(); oIn.close(); return copy; }}抛出ttempting to load class [Ljava.lang.String;
java.lang.ClassNotFoundException: [Ljava.lang.String; at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at com.sohu.blog.apiserver.util.RpcDaoImplTest$1.resolveClass(RpcDaoImplTest.java:49) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496) at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1624) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
这段代码也不行public void testLoadClassWithBytePrimitiveArray() throws Exception { String byteArrayBinaryName = byte[].class.getName(); Class c = Thread.currentThread().getContextClassLoader(). loadClass(byteArrayBinaryName); assertEquals(byte[].class, c); }
jgroups 2.6.2 已经没有这个配置文件。 |
|
回复:jgroups的bug 原创空间, 文章收藏, 电脑与网络
sjzczhangyan(游客)发表评论于2012/5/2 23:00:13 |
你好,我想请教你一些关于JGroups方面的东西,希望你能帮助我,谢谢!
关于JGroups的文档,除了官方的你有什么资料吗?还有这个开源软件的适用场合,网上看到的太泛泛了,比如电子教室的电子白板功能可以使用这个嘛? |
|
回复:jgroups的bug 原创空间, 文章收藏, 电脑与网络
sophia(游客)发表评论于2008/5/29 11:41:29 |
是不是换成了jgroups 2.6.2就不会报这样的错了 |
|
» 1 »
|