破門點滴(Java技術版)

          在日常學習和工作中記錄

            BlogJava :: 首頁 ::  :: 聚合  :: 管理
            15 Posts :: 7 Stories :: 36 Comments :: 0 Trackbacks
          發表于 2004-12-26 18:59:04

          ?思路:

          1、將URL對象中的factory對象擴展為一個factorysHashtable對象,將setURLStreamHandlerFactory的調用修改為將新的factory對象放入列表。

          2、創建Handler時則遍歷factorys列表,按照注冊的先后順序調用factory對象嘗試創建Handler對象。

          ?

          實際解決方案:

          通過java自帶的源代碼包找出 java.net.URL對象,做如下修改:

          1、增加 factorys 列表屬性

          static Hashtable factorys = new Hashtable();

          …..

          ?

          2、修改 setURLStreamHandlerFactory() 方法

          public static void setURLStreamHandlerFactory(URLStreamHandlerFactory fac) {

          ?????? synchronized (streamHandlerLock) {

          ????????????? // 為了支持多Factory

          //???? ??? if (factory != null) {

          //??????????? throw new Error("factory already defined");

          //???? ??? }

          ????????????? …..

          ?????? ??? factory = fac;

          ?????? ??? // factory 放入列表

          ?????? ??? factorys.put(Integer.toString(factorys.size()), fac);

          ?????? }

          ??? }

          1、? 增加createURLStreamHandler 私有方法,通過Factory列表創建Handler

          ?????? private static URLStreamHandler createURLStreamHandler(String protocol) {

          ????????????? for (int i=0; i < factorys.size(); i++) {

          ???????????????????? factory = (URLStreamHandlerFactory) factorys.get(Integer.toString(i));

          ???????????????????? URLStreamHandler handler = factory.createURLStreamHandler(protocol);

          ???????????????????? if (handler != null) {

          ??????????????????????????? return handler;

          ???????????????????? }

          ????????????? }

          ????????????? return null;

          ?????? }

          2、? 修改getURLStreamHandler中獲取Handler的方法

          …..

          ?????? ??? // Use the factory (if any)

          //???? ??? if (factory != null) {

          //??????????? handler = factory.createURLStreamHandler(protocol);

          //??????????? checkedWithFactory = true;

          //???? ??? }

          ?????? ??? // 使用factory列表

          ?????? ??? if (factorys != null) {

          ?????? ??? ?????? handler = createURLStreamHandler(protocol);

          ?????? ??? ?????? checkedWithFactory = true;

          ?????? ??? }

          ????????????? ……

          ?

          ????????????? // Check with factory if another thread set a

          ????????????? // factory since our last check

          //??????????? if (!checkedWithFactory && factory != null) {

          //??????????? ??? handler2 = factory.createURLStreamHandler(protocol);

          //??????????? }

          ????????????? if (!checkedWithFactory && factorys != null) {

          ????????????? ??? handler2 = createURLStreamHandler(protocol);

          ????????????? }

          ?

          3、? 編譯修改后的URL類,將URL.class 替換 rt.jar 包中的原始類文件。

          ?

          替換rt.jar的具體方法:

          a)?????? zip工具(或jar工具)將rt.jar文件解開到一個目錄(假設為rt

          b)????? 替換 rt/java/net/URL.class 文件為新類文件

          c)????? rt 目錄下運行命令 jar cvf0M rt.jar . 生成 rt.jar 文件

          d)????? 將新生成的 rt.jar 文件覆蓋原始的JRE中的 rt.jar 文件


          ?

          至此,以上ava.lang.Error: factory already defined問題解決。



          Triones Runtime: 新的JRE下,Triones web系統運行的輸出結果

          2004-12-26 1:10:07 org.apache.coyote.http11.Http11Protocol init

          信息 : Initializing Coyote HTTP/1.1 on http-8886

          2004-12-26 1:10:07 org.apache.catalina.startup.Catalina load

          信息 : Initialization processed in 1121 ms

          2004-12-26 1:10:07 org.apache.catalina.core.StandardService start

          信息 : Starting service Tomcat-Standalone

          2004-12-26 1:10:07 org.apache.catalina.core.StandardEngine start

          信息 : Starting Servlet Engine: Apache Tomcat/5.0.28

          2004-12-26 1:10:07 org.apache.catalina.core.StandardHost start

          信息 : XML validation disabled

          [ ] 這里是 Triones(Eclipse) 開始啟動

          Configuration file:

          ??? file:/D:/netshop/configuration/config.ini not found or not read

          Configuration location:

          ??? file:/D:/netshop/triones/configuration/

          Configuration file:

          ??? file:/D:/netshop/triones/configuration/config.ini loaded

          Shared configuration location:

          ??? file:/D:/netshop/configuration/

          Triones Framework located:

          ??? file:/D:/netshop/triones/plugins/org.softme.triones.runtime_0.0.1/

          Framework located:

          ??? file:/D:/netshop/triones/plugins/org.eclipse.osgi_3.1.0/

          Loading framework classpath from:

          ??? file:/D:/netshop/triones/plugins/org.eclipse.osgi_3.1.0/eclipse.properties

          Framework classpath:

          ??? file:/D:/netshop/triones/plugins/org.eclipse.osgi_3.1.0/core.jar

          ??? file:/D:/netshop/triones/plugins/org.eclipse.osgi_3.1.0/console.jar

          ??? file:/D:/netshop/triones/plugins/org.eclipse.osgi_3.1.0/osgi.jar

          ??? file:/D:/netshop/triones/plugins/org.eclipse.osgi_3.1.0/resolver.jar

          ??? file:/D:/netshop/triones/plugins/org.eclipse.osgi_3.1.0/defaultAdaptor.jar

          ??? file:/D:/netshop/triones/plugins/org.eclipse.osgi_3.1.0/eclipseAdaptor.jar

          Debug options:

          ??? file:/D:/DevEnv/eclipse/.options not found

          Time to load bundles: 30

          !SESSION 2004-12-26 01:10:09.697 -----------------------------------------------

          eclipse.buildId=M200409161125

          java.version=1.4.2

          java.vendor=Sun Microsystems Inc.

          BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=zh_CN

          Command-line arguments: -nosplash -refresh

          [ ] 這里是 Triones Framework (Runtime) 開始運行

          Starting application: 1563

          ------------------------------------

          Triones Framework: Started!

          Triones Framework: Hello!

          2004-12-26 1:10:10 org.apache.catalina.core.StandardHost getDeployer

          信息 : Create Host deployer for direct deployment ( non-jmx )

          2004-12-26 1:10:10 org.apache.coyote.http11.Http11Protocol start

          信息 : Starting Coyote HTTP/1.1 on http-8886

          2004-12-26 1:10:10 org.apache.catalina.startup.Catalina start

          信息 : Server startup in 2634 ms

          [ ] 這里是 Triones Framework (System Job) 開始運行, Tomcat 已經啟動完畢。

          Triones Job: begin...

          Triones Job: idle-0

          Triones Job: idle-1

          Triones Job: done.

          [ ] 這里是 Triones Framework (Runtime) 開始響應 web 請求,加載 Runtime 的控制器

          [URL]http://localhost:8886/netshop/

          LoadControllers(): found extentions - 1

          LoadControllers(): namespace - org.softme.triones.runtime.

          LoadControllers(): config size- 3

          LoadController:-org.softme.triones.controller.DefaultServletController@d0220c

          LoadController:-org.softme.triones.controller.DefaultActionController@1a19458

          LoadController:-org.softme.triones.controller.DefaultViewController@383118

          [ ] 這里是 Triones Framework (Runtime) 根據請求訪問指定的插件

          URL http://localhost:8886/netshop/triones/view/org.softme.triones.hello/hello.html

          update@/D:/netshop/triones/plugins/org.softme.triones.hello_0.0.1/ [7]

          hello.html

          file:/D:/netshop/triones/plugins/org.softme.triones.hello_0.0.1/hello.html

          [ ] 這里 Tomcat 開始關閉

          2004-12-26 1:10:49 org.apache.coyote.http11.Http11Protocol pause

          信息 : Pausing Coyote HTTP/1.1 on http-8886

          2004-12-26 1:10:50 org.apache.catalina.core.StandardService stop

          信息 : Stopping service Tomcat-Standalone

          2004-12-26 1:10:50 org.apache.catalina.core.StandardHostDeployer remove

          [ ] 這里是 Tomcat 關閉 Triones Framework 支持的應用 (netshop)

          信息 : Removing web application at context path /netshop

          [ ] 這里是 Triones Framework (Runtime) 關閉

          Triones Framework: Stoped!

          ------------------------------------

          2004-12-26 1:10:50 org.apache.catalina.logger.LoggerBase stop

          信息 : unregistering logger Standalone:type=Logger,host=localhost

          2004-12-26 1:10:50 org.apache.catalina.logger.LoggerBase stop

          信息 : unregistering logger Standalone:type=Logger

          2004-12-26 1:10:50 org.apache.coyote.http11.Http11Protocol destroy

          信息 : Stopping Coyote HTTP/1.1 on http-8886

          [ ] Tomcat 正常退出



          不得窺道門,不得悟佛門,不得入窄門,實乃破門。
          posted on 2006-03-27 10:30 破門 閱讀(710) 評論(0)  編輯  收藏 所屬分類: Triones
          主站蜘蛛池模板: 榆林市| 莱州市| 濮阳县| 蚌埠市| 吴旗县| 金湖县| 南靖县| 阳信县| 景德镇市| 格尔木市| 盐边县| 翁源县| 德州市| 沙田区| 定日县| 新邵县| 洪雅县| 庐江县| 怀来县| 电白县| 沧源| 木兰县| 峨眉山市| 大港区| 林州市| 册亨县| 洛川县| 东港市| 武穴市| 罗江县| 高尔夫| 沽源县| 丹阳市| 北票市| 惠安县| 潜山县| 霸州市| 蓝田县| 阿坝县| 永修县| 宝山区|