黑盒变白盒 - 调试 Red5 项目时查看 Red5 容器内部运行机制
《如何使用 Red5 插件创建 Red5 项目?》介绍了如何在 Eclipse 下创建并调试 Red5 项目。有同学问,“我想在调试 Red5 应用程序时,能够边看Red5 API 边看到 Red5 容器内部运行情况。最好是能修改一下 Red5 源代码,然后看其运行情况。能做到吗?”
可以。本文从 Bootstrap 说起,介绍如何让 Red5 源代码“动起来”。
作者的 Red5 版本:0.9.1 Final;Eclipse 版本:3.5.0(eclipse-jee-indigo-win32 版)。
得先把源码搞进 Eclipse。
Eclipse 装有 svn 插件的用户可以直接从官网检出:
http://red5.googlecode.com/svn/java/server/,tags 里选择 Red5 版本,作者选择的是 0_9_1,点 Finish 按钮。服务器在国外,耐心等待检出即可。
Eclipse 没有安装 svn 插件的用户可以先下载再导入:
打开 Red5 主页,选择 Logo 右侧的 Downloads -> Red5 Server,选择一个 Red5 版本的链接点进去,作者选择的是 0.9.1 Final,在打开的新页面中点击该版本的 ZIP 开始下载(当然你也可以选择 Source 文件直接下载源代码,但源码依赖的第三方 jar 包还需要去单独下载一下)。下载得到的 red5-0.9.1.zip 文件,将其解压缩。打开 Eclipse,选择 File->Import...->General->Existing Projects into Workspace,Select root directory 选择刚才解压缩得到的 red5-0.9.1,勾选 Copy projects into workspace,Finish,在 工作台有 red5_server 项目生成。然后在 Eclipse 工作台下的 red5_server 目录下解压缩 src.zip,并新建 test 目录。回到 Eclipse 刷新 red5_server 项目,会有很多 Errors,Java Build Path->Libraries->Add JARs... 勾选 lib 中所有的 jar 包,Errors 就没了。
作者采用的是后一种。OK,现在我们可以看到并调试 Red5 源代码了。
看了一下,仅其 Java 文件就有 2.5MB。偌大一项目,从哪里开始呢?
了解一个语言,从 HelloWorld 开始;了解一个程序,从 main 函数开始。
查看 Red5 安装目录下的 red5.bat,有如下几句:
这段代码的意思是,先把当前线程的 ClassLoader 置换成 ClassLoaderBuilder 自定义的 ClassLoader,后者的主要作用是将 Red5 依赖的第三方类库加载。之后使用反射机制动态调用 org.red5.server.Launcher.launch 方法。最后将当前线程的 ClassLoader 还原为置换前的 ClassLoader。就这些。
值得一提的是 org.red5.server.Launcher.launch 方法。这个方法要做的主要事情就是将 FileSystemXmlApplicationContext 初始化。熟悉 Spring 的朋友一定不会对这个类感到陌生,在这里它负责根据 red5.xml 中的配置将 Red5 容器初始化。
OK,现在可以把《如何使用 Red5 插件创建 Red5 项目?》中的 Red5 安装目录设置成 Eclipse 工作台下的 red5_server 目录了(新建 Red5 项目时调整步骤 4 和步骤 8 相关配置即可),调试 Red5 项目时,也可以对 Red5 的源代码进行断点跟踪,黑箱操作变白箱操作,快哉!