openmeeting 改造成flash聊天室

作者: nick 分类: as, flash, java, Red5 发布时间: 2010-09-25 13:19 ė 61条评论

(一)
好了,开始吧。首先我们需要用到以下东东:
1. JDK 1.5或以上版本 –  这个就不说了,以下所有东西都是基于它的。
2. Red5 –  开源Flash服务器,用来替代FCS/FMS,毕竟License还是有些贵的,呵呵。这里有信息和下载http://www.osflash.org/red5
3. OpenMeetings –  开源视频会议系统,基于OpenLaszlo开发。这里有信息和下载 http://code.google.com/p/openmeetings/
4. OpenLaszlo –  开源的富客户端应用开发平台(有点长,呵呵,用它的话来说是the premier open-source platform for rich internet applications)。这里有信息和下载:http://www.openlaszlo.org/
5. MySQL或者其他数据库 –  必须是Hibernate支持的数据库
6. SVN – 著名的版本管理工具Subversion,用来下载OpenMeetings的源代码的。Windows下推荐TortoiseSVN,这里下载:http://tortoisesvn.tigris.org/。Liunx就直接命令行吧,呵呵。喜欢用Eclipse的兄弟也可以用Subclipse插件http://subclipse.tigris.org/
7. 没有第7个东西要下载了
好了上面是需要用到的项目,我们先来部署一次看看效果。下面是部署过程,我们暂时不需要用到Laszlo和SVN
1. 先装JDK(注意要是1.5.0以上),这个到处都有教程,就不说了。注意装完以后要设置JAVA_HOME到JDK路径。
2. 根据你的系统下载red5的安装包,然后傻瓜式安装
3. 从OpenMeetings下载一个已经打包好的应用(http://code.google.com/p/openmeetings/downloads/list),解压到Red5的webapps里面,解压后目录应该是xmlcrm(最新版本可能为openmeetings)
4. 到解压后的OpenMeetings项目下Install目录中(新版本可能为conf)按照你自己的数据库来修改目录中的任意一个 xxx_hibernate.cfg.xml文件并另存为hibernate.cfg.xml,我的是MySQL所以就直接把 mysql_hibernate.cfg.xml文件改名然后把数据库地址用户名密码写上去就OK了。
5. 打开config.xml文件,看看端口啊,地址啊,有没有什么要修改的。
6. 启动Red5服务器。如果是在Windows下Red5设成了服务的,在Windows的服务中重启。
7. 开浏览器输入地址http://localhost:5080/xmlcrm/Install(注 意大小写;Install根据版本也有可能为conf;另外5080是默认端口,如果修改了就按照你自己的弄)先进入安装界面,东西随便填。注意邮件服务 器,如果你像我一样没有邮件服务器的话,就不填,只是暂时只能由管理员来添加帐号而无法直接注册,呵呵。然后其中要填入两个工具地址,就在页面上已经提供 了下载了。
8. 配置完了点击Send按钮,然后去喝杯咖啡或者茶什么的,因为要5-10分钟。。。=。=#
9. 全部搞定访问 http://localhost:5080/xmlcrm就可以登陆了,你登陆的时候会是管理员,可以在顶上选择Manage来进行管理。同时提供白板可以画画,还可以共享桌面,呵呵。
先玩玩看看效果吧,晚点我再介绍修改。
(二)
看了效果后如果有兴趣,我们就可以开始着手修改OpenMeetings了。
要 修改当然先是要拿到源代码了。我们先大致了解一下OpenMeetings的源代码结构。OpenMeetings分为两部分:一部分是客户端, 由OpenLaszlo和一些Flash文件组成,负责生成最终的客户端swf文件;另一部分是服务器端,由Java代码编写而成。我们必须分别下载并编 译这两个部分,注意这两个部分版本必须一样。下面分别说明这两个部分的部署过程。
服务器端
1. 用SVN从这个地址Check out出代码http://openmeetings.googlecode.com/svn/branches/dev/xmlcrm/java/
2. 到install目录中(新版本可能为conf)按照你自己的数据库来修改目录中的任意一个 xxx_hibernate.cfg.xml文件并另存为hibernate.cfg.xml,我的是MySQL所以就直接把 mysql_hibernate.cfg.xml文件改名然后把数据库地址用户名密码写上去就OK了。
3. 代码可以用eclipse直接import,不过编译OpenMeetings推荐使用ant,项目已经提供了一个build.xml文件,直接在 eclipse里面Run as Ant就可以编译整个项目,编译结果将在项目下的dist目录下。(这里有个小问题,本人下载的r980版本中的build.xml文件居然编译的时候没 有包含编译java文件,导致部署一直失败,解决方法只需要在最后一行的depends=”clean, prepare, compile, hibernate”最后加一个jar就可以了,改为 depends=”clean, prepare, compile, hibernate, jar”)
4. 将编译完成的dist中的openmeetings文件夹复制到red5的webapps下,重启red5服务器,服务器端部署完成。
(如 果嫌部署太麻烦,可以将build.xml文件中<property name=”dist.dir” value=”dist”/>这一行value的值改为你的red5的webapps如:<property name=”dist.dir” value=”C:\Program Files\Red5\webapps” />,并将<delete dir=”${dist.dir}”/>这一行删掉或注释掉。这样每次运行build.xml文件的时候就可以直接部署到red5下了)
客户端
1. 下载并安装OpenLaszlo,http://www.openlaszlo.org
2. 用SVN从这个地址Check out 出代码http://openmeetings.googlecode.com/svn/branches/dev/laszlo/client/
3. 代码也可以用eclipse直接import,但编译需要使用OpenLaszlo,这个以后再说。
4. 复制刚才代码下xmlcrm下的videoconference文件夹到OpenLaszlo下,{OpenLaszlo目录}/Server/lps- 4.0.9/(4.0.9为我的版本号,根据服务器版本不同而不同)Windows默认安装是这个地址:C:/Program Files/Openlaszlo Server 4.0.9/Server/lps-4.0.9/videoconference/(其中4.0.9同上解)
5. 修改videoconference/config.xml文件,端口啊、地址啊都改成你自己的。rtmphostlocal标签中的内容是你的red5服务器安装位置。
数据库配置与测试
本来在上一篇里面写过一点点数据库配置,有兄弟在问,这里就再说下
1. 安装一种数据库,数据库的类型随便,只需要保证hibernate支持类型就行了,这里可以看哪些支持http://www.hibernate.org/80.html,不需要建立任何数据库或库表,等下程序会帮你建立
2. 完成上面两步,注意服务器端的第2步,那里必须保证正确
3. 启动red5服务器
4. 服务器端安装
访问 http://localhost:5080/openmeetings/Install, 程序会自动进入Step 1安装,上面框填入你的信息,中间框邮件服务器那一项如果没有可以留空,下面框填入SWFTool和MagicImage两个必须的工具的安装后的路径, 如果没有安装这两个软件的话可以点击输入框下面的连接去下载,安装完成后再填入。然后选择Senden,之后进展会很慢不要关闭页面也不要以为死机了,可 以做些别的事情例如和身边的美女同事聊聊天什么的,大约5-10分钟后安装完成,此时数据库中已经多了一个库了。直接访问http://localhost:5080/openmeetings应该可以看见输出结果,但由于其中的swf是事先编译好的,不是我们编译出来的,所以我们还需要学习下面的客户端安装
5. 客户端安装
(1) Proxied方法
现在保证red5服务器中刚才部署的服务器端在运行,然后启动OpenLaszlo服务器,并在浏览器中输入:http://localhost:8080/lps-4.0.9/videoconference/maindebug.lzx?lzr=swf8http://localhost:8080/lps-4.0.9/videoconference/main.lzx?lzr=swf8 即可看到结果(4.0.9根据具体版本号变更,如果OpenLaszlo不在本机,请修改localhost为OpenLaszlo服务器地址
(2) SOLO方法
还 可以使用SOLO模式编译(如何SOLO模式编译可以参看我另外一篇文章 OpenLaszlo下的Proxied和SOLO两种编译方法)在客户端目录中生成swf文件,然后将客户端目录中的 main.lzx.lzr=swf8.swf 复制到服务器端部署好的目录中覆盖原来的同名swf文件(即{red5路径}/webapps/openmeetings),然后仅启动red5服务器, 访问http://localhost:5080/openmeetings同样可以看见结果
关于Laszlo开发工具
Laszlo的开发工具网上大多数都是介绍使用Eclipse插件IDE for Laszlo作为开发工具,但此工具在2006年12月的时候就因为太不活跃而被eclipse留档停止了。现在比较推荐的是Spket,http://www.spket.com/,它是免费软件,如果要用于商业目的则需要付费。当然你也可以选择直接使用文本编辑器开发。
好了,差不多了,现在代码也有了,部署也通过了,想改什么都行了,嘿嘿。俺先去摆弄两下iTouch,下次再来说修改和编译^_^。
(三)
要修改代码,其实说到前面两步就差不多了,因为接下来的事情,就是读懂和理解代码,然后按照自己的需求来修改,各人需求不同,自然修改的方案也有很多不同。
不过介于OpenMeetings客户端的开发语言为OpenLaszlo,相信很多人都从来没有接触过,这里我就大致的说下。
学习简单的OpenLaszlo语法
(比较懒的兄弟可以跳过这节直接转到下面的“懒人视频聊天室”,呵呵)
推荐大家去看一看OpenLaszlo Explorer中的Laszlo in 10 Minutes,启动Laszlo服务器,然后访问http://127.0.0.1:8080/lps-4.0.9.1/laszlo-explorer/index.jsp就 可以看见(Windows下的安装后直接双击桌面图标就能够自动触发浏览器访问此地址)。这个是给大家对于OpenLaszlo的语法进行一个简单的介 绍。另外,点击Documentation下面的LZX Reference还能够看到更详细的每个标签和指令的介绍。这些应该都会在修改代码过程中有所帮助。我这里介绍几个修改代码时可能会用的多的:
1. 类的继承、定义与使用
2. 事件与触发
3. 基本元素view, text
4. 数据绑定(dataset)
看这些相信最多花费你1-2个小时的时间,然后你就可以开始修改了。
在调式模式下启动OpenMeetings
首先说下我修改时的调试方法,我是在后台启动部署了OpenMeetings服务器端的Red5和部署了客户端的OpenLaszlo两个服务器,然后访问http://127.0.0.1:8080/lps-4.0.9.1/videoconference/main.lzx?lzr=swf8,即可编译并启动OpenMeetings客户端
然 而,在OpenMeetings客户端的根路径下其实有两个主文件,一个main.lzx和maindebug.lzx,这两个都可以用来整合编 译并启动OpenMeetings客户端,但maindebug.lzx是带调试界面的,更便于修改用,我们可以把访问地址改为http://127.0.0.1:8080/lps-4.0.9.1/videoconference/maindebug.lzx?lzr=swf8,这样每次运行都会有一个调试框,里面会显示很多客户端本身就带有的调试信息。当然你也可以自己在代码中写入调试信息,Debug.write(xxxx);运行时即会将xxxx的内容显示在调试框中。
懒人视频聊天室
有很多兄弟肯定还是比较懒的,接下来我将几个简单又比较通用的修改帖上来,按照这个修改完成以后基本上就是一个简单的视频聊天室了,下面的步骤不分先后,你可以根据自己的需求决定哪些需要修改哪些不需要:
1. 去掉邮件注册
前面我们介绍了OpenMeetings安装的时候必须设置一个邮件服务器,如果没有邮件服务器则前台是无法注册的。现在我们就把这个烦人的邮件注册去掉。
服务器端文件中,找到org.xmlcrm.app.data.user.Usermanagement类,找到下面一行
Long user_id = this.registerUserInit(3, 1, 0, 1, login, Userpass,lastname, firstname, email, age, street, additionalname,fax, zip, states_id, town, language_id, true, new LinkedHashMap());
将倒数第二个true改为false,部署以后再到前台注册,现在已经不会提示Invalid EMail了
2. 修改界面左上角网站名称和连接
修改config.xml文件中:
<currentappname>xxx</currentappname>为网站名称(可以为中文)
<currentappnameurl>、<currentappnamebugurl>标签为自己的网站URL
3. 修改登录框,设置默认语言为中文
每次登陆以后默认都是英文的,要选择一下语言而且登陆以后才会变成中文,我们可以让它一开始就是中文。
然 后修改xmlcrm/hibernate/rtmphib.lzx文件<attribute name=”userlang” value=”1″ type=”number” />这一句,value由1改为9(9是chinese simplified在语言那个下拉菜单的顺序)。
修 改xmlcrm/auth/checkLoginData.lzx文件combox name=”language”标签下的handler name=”oninit”事件内容,两行this.selectItemAt(0);全都改为this.selectItemAt(8);,这样系统会 在初始状态下默认选择简体中文(8=9-1)。
这样重新编译,你的界面就初始为简体中文了。
(貌似也可以用管理员帐户在后台直接改)
4. 去掉登录框上不需要的部分
登陆框下面的语言选择,颜色选择和带宽我都去掉了,方法如下:
auth/checkLoginData.lzx 文件,其中每个labeltext标签和其下缩进的一个表单标签(combobox /customedittext)一起代表一行的输入框和其前面的名称,将不需要的都在标签最后加入 visible=”false”属性(我去掉了最后三项)。
同时注意剩余的labeltext和表单标签中的y值为其所在的纵向坐标,需要修改之让其匹配界面应在的位置。可以参考原删除的标签的y位置。最后的simplelabelbutton就不要改了,因为是按照相对高度定位的。
最后,修改整个窗体的高度,顶部的class标签最后的height属性,改为应有的值,大概是每删除一个表单标签-30,例如删除了3项输入框,就是原有高度260 – (3 x 30) = 170。
5. 修改登入后界面,直接到私人房间界面
对于一个聊天室,登陆以后其实直接到房间列表就够了,所以你需要。。。
/xmlcrm /navi/mainnavi.lzx文件,找到mainnavi类,最后一个handler name=”oninit”,修改代码行if (i==0) t1.onclick.sendEvent();中间if条件为i==2。这样进入后就会自动进入“会议”菜单
然后找到 mainmenumeetingsitem类,下面的handler name=”onclick”,最后一行else this._menuRef.subviews[0].onclick.sendEvent();改为else this._menuRef.subviews[1].onclick.sendEvent();这样进入后就会自动进入“私人会议”列表界面
6. 去掉房间列表页面中右侧的聊天窗口
进入房间列表页面以后,可以看见右侧有一个聊天窗口,如果你希望屏蔽他们的话。。。
根 据需要修改/xmlcrm/content/meetings/publicmeetings.lzx(公共房间列表)/xmlcrm/content /meetings/privatemeetings.lzx(私人房间列表),删除<roomlistdetails x=”510″ y=”50″ name=”_roomlistdetails” />一行即可
7. 屏蔽顶部菜单
顶部菜单可以进行一些操作,但对于一个聊天室,这些操作其实有些多余,下面是删除办法。
/xmlcrm /navi/mainnavi.lzx文件,找到mainnavi类,先在其中找到第一个view标签(就在紧接一堆attribute下 面,不含有name属性的那个),然后为其加上name属性name=”navibar”。然后还是mainnavi类中,找到最后一个handler name=”oninit”,在Debug.write(”this: “,this);后添加代码:
if (value.length == 4) {
this.navibar.setAttribute(”visibility”, “hidden”);
this.itemlist.setAttribute(”visibility”, “hidden”);
this.subitemlist.setAttribute(”visibility”, “hidden”);
}
这 样,当管理员登陆的时候看到的还是原来的界面。普通用户登陆则看不到顶部菜单。如果只希望屏蔽一级菜单,而希望留下“公共会议”和“私人会议”菜单,则 不要第三行this.subitemlist.setAttribute(”visibility”, “hidden”);即可。
8. 屏蔽右上角菜单,仅剩下Logout登出
登陆进去以后,屏幕右上角总是显示三项:用户、退出、报告错误。如果不希望有用户和报告错误两项的话,就按照下面的做。
/xmlcrm/navi/mainnavi.lzx文件,找到helpandbugs类,将其中name=”btn1″和name=”btn2″的两个view标签及其包含内容全部删去即可
9. 修改未翻译的文字
即使选择了简体中文,系统依然会有很多地方的显示是英文的,我们需要手工的将部分未翻译过来的单词自己翻译一下,有三种办法:
(1) 在服务器端代码(不是客户端代码)中找到webapp\openmeetings\languages\,里面存的是所有的国际化文 件,english.xml为英语,chinese simplified.xml为中文,用文本编辑器打开以后可以按照你自己的希望对不满意的翻译进行修改。修改以后需要用管理员帐号登陆,然后在【管理】 -【Language-Editor】中Import修改后的xml文件到chinese simplified。
(2) 用管理员帐号登陆,然后在【管理】-【Language-Editor】可以直接对数据库中的语言进行翻译,比较方便。
(3) 直接访问数据库表fieldlanguagesvalues,用select * from fieldlanguagesvalues where language_id = 9即可查看所有的简体中文国际化记录,直接修改value的值也能达到同样的结果,用数据库的好处是查找比较方便,呵呵
另外还有部分语言是硬写在代码里的,这些只需要对整个项目搜索那段英文再修改为中文即可,例如:/conference/popups/changedevice.lzx 中Do not ask again改为中文“下次不再提示”
10. 删除进入房间后顶部菜单中不需要的功能
进入房间后,顶部一排有很多功能菜单,申请主持、文件上传、投票等等,这些功能对于一个纯粹的聊天室来说,有些多余,而且这些功能全都可以在其他地方实现,所以你可以根据需要将顶上的部分功能菜单给删除。
/xmlcrm /content/conference/conferencemenubar.lzx文件中找到conferencemenubar类, 其下每一个labelmenu标签代表一个菜单项,顺序为从左至右,将不需要的菜单项删去或注释掉即可。再在上面一点找到一堆command标签,根据快 捷键将不要的也删除或屏蔽,以避免有人使用快捷键调用功能。
而房间上中的按钮和显示则在文件/conference/moderation/moderationpanel.lzx的moderationpanel类中,同样将不需要的屏蔽即可
11. 国际化房间里主要面板的标题
进入房间后,发现不管怎么修改语言数据,那三块板子顶上的标题就是不变,这是因为这三个标题没有绑定国际化的原因。
/xmlcrm/content/conference/conference.lzx中,找到videoboard类,删去title属性,加上labelid=”313″;
找到whiteboardpanel类,删去title属性,加上labelid=”315″;
找到filespanel类,删去title属性,加上labelid=”314″
12. 删除房间里左下角框中不需要的功能
房间里左下角框里面是有聊天、文件和成员三个选项的,文件用来控制白板,还有些用,而投票在视频聊天室里面恐怕用不上,所以去掉。
/conference/tabbar/conferencecontainertab.lzx中,找到conferencecontainertab类,3个openmeetingsTabButton标签每个代表一个tab按钮,屏蔽不需要的
13. 修改房间人数限制
有些兄弟认为4人房间的聊天室太无聊。。。不过好像也是。。。又不是打麻将。。所以。
/xmlcrm /conference/roomlistItem.lzx文件中<attribute name=”maxUsers” value=”4″ type=”number” />一行,修改value的值即是修改最大人数。最大人数修改以后展示的时候界面可能有些乱,这个就你自己去调整了,因为我做的时候没有这个需求, 所以没有测试过实际效果,呵呵~~
客户端文件结构简单介绍
这里只介绍几个对界面修改比较有用的文件:
/config.xml       一些全局参数定义
/main.lzx       主文件,用来整合其他文件
/maindebug.lzx      带debug的主文件
/xmlcrm/hibernate/rtmphib.lzx  定义并实例化hibrtmpconnection类,负责主要流程调度及部分默认配置,比较重要
/xmlcrm/hibernate/netremotecallhib.lzx 定义netremotecallhib类,继承于netremotecall类,负责调用后台服务器端Java方法,使用很多
/xmlcrm/content/meetings/publicmeetings.lzx 定义公共会议列表相关类
/xmlcrm/content/meetings/privatemeetings.lzx 定义私人会议列表相关类
/xmlcrm/conference/roomlistItem.lzx 定义roomlistItem类,代表会议房间列表页面中的一个房间展示
/xmlcrm/auth/checkLoginData.lzx  定义checkLoginData类,负责登陆框的显示
/xmlcrm/navi/mainnavi.lzx   定义登录后的主界面展示相关类
/xmlcrm/content/conference/conferencemenubar.lzx 定义房间左上角菜单
/conference/moderation/moderationpanel.lzx 定义房间上中的显示和按钮
/xmlcrm/content/conference/conference.lzx 定义房间主要的三个面板类
/conference/tabbar/conferencecontainertab.lzx 定义房间左下角聊天窗口中的内容
/conference/video/basevideoobject.lzx 视频对象的基类,定义了视频图像的外框显示
/conference/video/videoobjectbroadcast.lzx 视频播放类,定义了会议房间中的本人的视频显示
/conference/video/videoobjectplayBroadcast.lzx 视频播放类,定义了会议房间中的其他人的视频显示
/conference/video/videocontainer.lzx 视频容器类,定义了房间内左上角框里的所有视频对象的展示
/conference/whiteboard/ 白板相关类
/conference/tabcontent/chat  房间内的聊天窗口相关类
/conference/tabcontent/files 房间内的文件窗口相关类
部署
要 部署的时候建议把整个客户端生成一个swf文件然后复制到服务器端(即使用SOLO方式编译,如果不知道如何编译,参考我的另一篇文章 OpenLaszlo下的Proxied和SOLO两种编译方法 ), 这样服务器端部署的时候就不需要再开启OpenLaszlo服务器了。另外注意,将修改过的config.xml文件和swf文件一起拷贝到服务器去,否 则有些修改又没了,呵呵。(如果swf文件和red5是部署在同一台机器上的,建议你把config.xml文件中rtmphostlocal留空,这样 可以省去很多麻烦)
拷贝过去后先修改index.jsp文件中SWFObject的第一个参数,使之指向你的swf文件。然后访问http://localhost:5080/openmeetings/即可看到效果,部署完成。
然 后,然后。。。如果你在自己的机器上部署了,希望外网的朋友来和你一起测试或使用的话,注意要配置路由上用虚拟主机端口映射,开放1935、 8088、5080三个端口指向自己(当然也可以直接将自己设为DMZ。。如果感觉自己够安全的话。。),如果是非SOLO方式还要为Laszlo服务器 开放8080;另外,机器上如果有Kapersky之类的话需要关闭,否则会拦截外网的端口访问。
写在最后
好了,东西写的差不多了,虽然我自己修改这个所做的远不止写的这些,但我想我也只能写到这里了。
我写这些东西的目的只是希望大家能够得到一点启发,每个人需求都不一样,我相信根据我的修改肯定达不到你的要求,但相信你通过边做边学习这些之后,完成后面的事情应该不是什么难事了。
我平时少上IM,我的邮箱是fallen_lord@126.com,有兴趣的朋友可以mail我交流,呵呵~~
(四)
本来是没什么东西好写的了,不过这几天的持续改造中又出现了各种让人比较头疼的问题,准备将这篇文章作为持续更新,遇到比较疑难的问题我会一直发上来。
1. 改进摄像头
这不知道是否算的上个bug,google了一下,中文网页没见人提过,英文的话。。俺英文比较差看不太懂,呵呵。
现象是这样的,进入房间后显示的视频,会根据不同的摄像头被切掉一部分,有的摄像头只切掉边缘一小块,而有的摄像头甚至只显示了原面积的1/9,平时可以看见一个身体的,这里却只能看见一只眼睛。
由于我的需求是需要让不同的视频框有不同的大小,俺花了一个下午的功夫才搞定摄像头视野被裁切的问题,下面是修改的部分,大家可以自己修改试试。
/conference/remote/devvideoview.lzx文件中,在类devvideoview中增加两条attribute:
<attribute name=”_myWidth” value=”160″ />
<attribute name=”_myHeight” value=”120″ />
修改<method name=”init”>中:
vid._width = this.width;
vid._height = this.height;
改为:
vid._width = this.myWidth;
vid._height = this.myHeight;
修改<method name=”setWidth” args=”w”>中:
if (!this._clipinitdone) {
this.width = w;
return;
}
改为:
if (!this._clipinitdone) {
this.width = 576;
this.myWidth = w;
return;
}
修改<method name=”setHeight” args=”h”>中:
if (!this._clipinitdone) {
this.height = h;
return;
}
改为:
if (!this._clipinitdone) {
this.height = 432;
this.myHeight = h;
return;
}
2. 修复房间用户数量不增加问题
我的版本r988有这个问题,感觉这也算一个bug。
问 题的现象是,用户加入房间后房间的用户数量始终为0,这样主要是房间人数上限就没有起到作用了。后来看了下程序,发现是客户端调用rooms_id不正 确导致的,只需要修改/xmlcrm/content/conference/roomlistItem.lzx文件,将所有的 this.obj.rooms_id全都改为this.obj.room.rooms_id即可解决问题。
3. 服务器端代码嵌入中文,ant提示中文警告的问题
这 个其实不算是openmeetings的问题,不过开始还是让我头痛了一把。由于ant编译的默认编码是根据系统的编码来确定的,因此如果java文件 存成utf-8而系统编码又是GBK(win2000)或者GB18030(winxp)里面又含有中文,那么ant编译的时候就会提示警告。如果只是注 释是中文,则警告也不会有什么影响,但是如果有字符串里面写着中文,就出问题了。
解决方法是查找build.xml文件中所有的javac标签,为其加上属性encoding=”UTF-8″即可解决问题。
4. RED5服务器0.7以上版本无法配置针对项目的log的问题
这 个问题是由于red5服务器最新版由log4j改为使用logback导致的。如果使用red5 0.63或以下版本,原来的openmeetings中的配置是没有问题的,如果使用0.7或以上版本,则openmeetings需要修改才能使之按照 项目配置正常输出log。方法如下:
(1) 在openmeetings下的lib/red5中删除以下jar包,这里注意,如果项目中有其他的log4j-xxx.jar也要删除
slf4j-api-xxx.jar
log4j-xxx.jar
slf4j-log4j12-xxx.jar
jcl104-over-slf4j-xxx.jar
slf4j-simple.jar
slf4j-simple-xxx.jar
commons-logging-xxx.jar
(2) 在red5安装路径下的lib中找到如下jar包:
slf4j-api-xxx.jar
logback-core-xxx.jar
logback-classic-xxx.jar
log4j-over-slf4j-xxx.jar
jcl104-over-slf4j-xxx.jar
复制到openmeetings下的lib/red5中并将其加入eclipse的classpath
(3)  在openmeetings项目中webapps/openmeetings/WEB-INF/web.xml文件中删除以下段落
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
以及以下段落
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
(4)  删除openmeetings项目中所有的log4j.properties和log4j.xml,应该是有两个 webapps/openmeetings/WEB-INF/log4j.properties和src/app/log4j.properties
(5) 最后在src/app/添加logback.xml文件,内容如下:
<?xml version=”1.0″ encoding=”UTF-8″?>
<configuration>
<appender name=”STDOUT” class=”ch.qos.logback.core.ConsoleAppender”>
<layout class=”ch.qos.logback.classic.PatternLayout”>
<Pattern>
%d{MM-dd HH:mm:ss.SSS} %-5level %logger{36} – %msg%n
</Pattern>
</layout>
</appender>
<root>
<level value=”DEBUG” />
<appender-ref ref=”STDOUT” />
</root>
<logger name=”org.hibernate”>
<level value=”WARN” />
</logger>
<logger name=”org.apache”>
<level value=”WARN” />
</logger>
<logger name=”org.springframework”>
<level value=”WARN” />
</logger>
</configuration>
(5) 这样不需要修改代码,重新启动项目就可以看到logback的输出了,平时的使用和log4j一摸一样,同样是导入 org.apache.log4j.Logger类进行操作,因为log4j-over-slf4j.jar包中的类覆盖了原log4j的类,呵呵
(6) 使用logback还有一个最大的好处,就是logback提供了eclipse的插件,可以直接将red5的内容输出到eclipse的控制台中进行输 出,非常方便。插件下载地址在: http://logback.qos.ch/consolePlugin.html
提醒一下。。。记得一定要配置插件的filter哦。。。不然会被log弄爆的,哈哈
好了,to be continue…

原文:http://kaka99.javaeye.com/blog/256478

本文出自 传播、沟通、分享,转载时请注明出处及相应链接。

本文永久链接: https://www.nickdd.cn/?p=1062

发表评论

您的电子邮箱地址不会被公开。

Ɣ回顶部