-- 作者:admin
-- 发布时间:9/23/2004 12:40:00 AM
-- [合集] 怎么改变rmi得classloader?
● [合集] 怎么改变rmi得classloader?发信人: diaochong (静静的雕虫~~小猪), 信区: J2EE 标 题: [合集] 怎么改变rmi得classloader? 发信站: BBS 水木清华站 (Tue Mar 30 10:12:59 2004), 站内 【 以下文字转载自 JavaClub 讨论区 】 发信人: diaochong (静静的雕虫~~小猪), 信区: JavaClub 标 题: [合集] 怎么改变rmi得classloader? 发信站: BBS 水木清华站 (Tue Mar 30 10:08:34 2004), 站内 ☆─────────────────────────────────────☆ bakkhos (笨瓶子) 志存高远·思考永不停步 ) 于 (Fri Mar 21 11:23:00 2003) 提? defineClass()不允许定义"java"开头的类,而这方法又是final的。有什么办法去载入 java.rmi的类呢?我需要让rmi server使用自定义的classloader 那平时系统是怎么载入这些类的呢? 另外,resolveClass实际对class做了什么处理? ☆─────────────────────────────────────☆ gty (宜良-丽江-蝴蝶泉) 于 (Fri Mar 21 11:53:43 2003) 提到: 你想改变java.rmi下的类?为什么要这么做? 【 在 bakkhos (笨瓶子) 志存高远·思考永不停步 ) 的大作中提到: 】 : defineClass()不允许定义"java"开头的类,而这方法又是final的。有什么办法去载入 : java.rmi的类呢?我需要让rmi server使用自定义的classloader : 那平时系统是怎么载入这些类的呢? : 另外,resolveClass实际对class做了什么处理? ☆─────────────────────────────────────☆ bakkhos (笨瓶子) 志存高远·思考永不停步 ) 于 (Fri Mar 21 11:57:44 2003) 提? 不是,我要用自己的classloader载入类(不以class文件形式存在),但是rmi载入stub时 是用系统的classloader,结果就是找不到class,所以我要换掉rmi的classloader,如果 有更好的方法也行 【 在 gty (宜良-丽江-蝴蝶泉) 的大作中提到: 】 : 你想改变java.rmi下的类?为什么要这么做? ☆─────────────────────────────────────☆ sOcean (ok) 于 (Fri Mar 21 16:07:14 2003) 提到: 那些都是本地方法,恐怕得弄到sun的source才能看到 private native Class defineClass0 private native void resolveClass0 【 在 bakkhos (笨瓶子) 志存高远·思考永不停步 ) 的大作中提到: 】 defineClass()不允许定义"java"开头的类,而这方法又是final的。有什么办法去载入 java.rmi的类呢?我需要让rmi server使用自定义的classloader 那平时系统是怎么载入这些类的呢? 另外,resolveClass实际对class做了什么处理? ☆─────────────────────────────────────☆ sOcean (ok) 于 (Fri Mar 21 16:12:56 2003) 提到: 用自己的java.rmi.registry.RegistryImpl 代替sun.rmi.registry.RegistryImpl? 或者写一个自己的RemoteProxy彻底替换sun.rmi.server.RemoteProxy? 【 在 bakkhos (笨瓶子) 志存高远·思考永不停步 ) 的大作中提到: 】 : 不是,我要用自己的classloader载入类(不以class文件形式存在),但是rmi载入stub时 : 是用系统的classloader,结果就是找不到class,所以我要换掉rmi的classloader,如果 : 有更好的方法也行 ☆─────────────────────────────────────☆ bakkhos (笨瓶子) 志存高远·思考永不停步 ) 于 (Fri Mar 21 16:15:50 2003) 提? 是个思路,等我试试 【 在 sOcean (ok) 的大作中提到: 】 : 用自己的java.rmi.registry.RegistryImpl 代替sun.rmi.registry.RegistryImpl? ☆─────────────────────────────────────☆ UltraFool (遥望·遐想·感伤) 于 (Fri Mar 21 19:13:31 2003) 提到: 好像是java的核心类是系统的本地函数的Classloader加载, 不允许用自定义的loader加载 【 在 sOcean (ok) 的大作中提到: 】 : 那些都是本地方法,恐怕得弄到sun的source才能看到 : private native Class defineClass0 : private native void resolveClass0 : defineClass()不允许定义"java"开头的类,而这方法又是final的。有什么办法去载入 : java.rmi的类呢?我需要让rmi server使用自定义的classloader : 那平时系统是怎么载入这些类的呢? : 另外,resolveClass实际对class做了什么处理? ☆─────────────────────────────────────☆ bakkhos (笨瓶子) 志存高远·思考永不停步 ) 于 (Fri Mar 21 19:17:29 2003) 提? 一般来说应该这样 现在问题是核心类会加载非核心类,例如RMI加载stub,如果不用自定义classloader加载 java.rmi的类,就没法控制stub的加载了,faint 【 在 UltraFool (遥望·遐想·感伤) 的大作中提到: 】 : 好像是java的核心类是系统的本地函数的Classloader加载, 不允许用自定义的loader加 载 ☆─────────────────────────────────────☆ UltraFool (遥望·遐想·感伤) 于 (Fri Mar 21 19:22:12 2003) 提到: 呵呵, 不太清楚 看appserver的source也许有帮助 不过有java.rmi的源代码吗? 把他们的包换了可否 【 在 bakkhos (笨瓶子) 志存高远·思考永不停步 ) 的大作中提到: 】 : 一般来说应该这样 : 现在问题是核心类会加载非核心类,例如RMI加载stub,如果不用自定义classloader加载 : java.rmi的类,就没法控制stub的加载了,faint ☆─────────────────────────────────────☆ bakkhos (笨瓶子) 志存高远·思考永不停步 ) 于 (Fri Mar 21 19:30:54 2003) 提? 呵呵,对java.rmi进行refactoring,改包名…… rmi的实现基本在sun的包中,没有源码,我反编译看过,也是很多native方法,不敢乱动 【 在 UltraFool (遥望·遐想·感伤) 的大作中提到: 】 : 呵呵, 不太清楚 : 看appserver的source也许有帮助 : 不过有java.rmi的源代码吗? 把他们的包换了可否 ☆─────────────────────────────────────☆ gty (宜良-丽江-蝴蝶泉) 于 (Fri Mar 21 20:08:42 2003) 提到: csdn上有一篇比较早的文章,介绍了dynamic proxy怎么改变rmi的行为 http://www.csdn.net/develop/article/14/14553.shtm 【 在 bakkhos (笨瓶子) 志存高远·思考永不停步 ) 的大作中提到: 】 : 呵呵,对java.rmi进行refactoring,改包名…… : rmi的实现基本在sun的包中,没有源码,我反编译看过,也是很多native方法,不敢乱动 ☆─────────────────────────────────────☆ bakkhos (笨瓶子) 志存高远·思考永不停步 ) 于 (Fri Mar 21 20:24:06 2003) 提? 这篇以前看过了,呵呵 我现在做的是一个运行平台,让普通java程序在上面运行,无法修改使用RMI的程序, 所以只能在classloader上下功夫 【 在 gty (宜良-丽江-蝴蝶泉) 的大作中提到: 】 : csdn上有一篇比较早的文章,介绍了dynamic proxy怎么改变rmi的行为 : http://www.csdn.net/develop/article/14/14553.shtm ☆─────────────────────────────────────☆ sOcean (ok) 于 (Fri Mar 21 22:37:20 2003) 提到: sun包可以到www.sun.com上下载jdksource package。 粗略的看了一下,class loading的部分大概在 sun.rmi.server.RemoteProxy.loadClassFromClass() /** * Load a class from the same class loader that loaded another class. * If the other class has no class loader, or if it isn't supplied, * then it simply loads the class using the system loader (through * CLASSPATH, typically). */ 【 在 bakkhos (笨瓶子) 志存高远·思考永不停步 ) 的大作中提到: 】 : 呵呵,对java.rmi进行refactoring,改包名…… : rmi的实现基本在sun的包中,没有源码,我反编译看过,也是很多native方法,不敢乱动 ☆─────────────────────────────────────☆ sOcean (ok) 于 (Fri Mar 21 22:53:35 2003) 提到: 【 在 bakkhos (笨瓶子) 志存高远·思考永不停步 ) 的大作中提到: 】 : defineClass()不允许定义"java"开头的类,而这方法又是final的。有什么办法去载入 : java.rmi的类呢?我需要让rmi server使用自定义的classloader : 那平时系统是怎么载入这些类的呢? : 另外,resolveClass实际对class做了什么处理? 如果纯粹想载入java.rmi的类,把java.lang.ClassLoader.defineClass(0 中的 if ((name != null) && name.startsWith("java.")) { 去掉就行了吧。不过不知道这样修改对系统会有什么影响... * The specified class name cannot begin with "java.", since all * classes in the java.* packages can only be defined by the bootstrap * class loader. ☆─────────────────────────────────────☆ bakkhos (笨瓶子) 志存高远·思考永不停步 ) 于 (Fri Mar 21 23:06:50 2003) 提? 实在没有办法时再用吧,这种方法可能有危险,以后升级也可能有麻烦 【 在 sOcean (ok) 的大作中提到: 】 : 如果纯粹想载入java.rmi的类,把java.lang.ClassLoader.defineClass(0 : 中的 if ((name != null) && name.startsWith("java.")) { : 去掉就行了吧。不过不知道这样修改对系统会有什么影响... : * The specified class name cannot begin with "java.", since all : * classes in the java.* packages can only be defined by the bootstrap : * class loader. ☆─────────────────────────────────────☆ bakkhos (笨瓶子) 志存高远·思考永不停步 ) 于 (Fri Mar 21 23:06:50 2003) 提? 实在没有办法时再用吧,这种方法可能有危险,以后升级也可能有麻烦 【 在 sOcean (ok) 的大作中提到: 】 : 如果纯粹想载入java.rmi的类,把java.lang.ClassLoader.defineClass(0 : 中的 if ((name != null) && name.startsWith("java.")) { : 去掉就行了吧。不过不知道这样修改对系统会有什么影响... : * The specified class name cannot begin with "java.", since all : * classes in the java.* packages can only be defined by the bootstrap : * class loader. ※ 修改:·qyjohn 于 Mar 30 10:16:02 修改本文·[FROM: 219.238.203.*] 索引页面|上一篇|下一篇
|