jmatrix  介绍 matrix.org.cn
目  录 历史与定位 功能简介 技术架构 技术点探讨 未来
Jmatrix  由来与定位 Matrix 网站的历史原因 : ASP 系统 Java  开源的网站系统里没有合适的 网站全站系统 基于  Java 开源:探索开源的方式
jmatrix  历史 Matrix  网站  2003.6  成立,原来是  CS  网站 2003.9-2004.9  大家在讨论甚至开始写了点需求,来做 JSP 全站系统。未果 2004.9  开始  jmatrix  项目 2005.4  开始测试。后补充完善并正式投入使用 2005.8  经过几个月的试运行,发布  1.0 beta  版本 之前一年:因为工作原因空余时间有限,没有能开源发布出来,只是不断根据  matrix  网站的需求增改功能、修订 bug 。 现在:发布开源  jmatrx  ,当前版本是  1.4.6
目  录 历史与定位 功能简介 技术架构 技术点探讨 未来
功能简介 论坛 Forum  (分类、嵌套) 新闻 News 文章 Article 资源 Resource (Download Server) 评论 Review (Article/News/Resource) 通用功能 Common Upload/Favorate/Link/Editor/Recommend/Vote/Poll/Ipfilter/Message
目  录 历史与定位 功能简介 技术架构 技术点探讨 未来
技术架构 Database mysql/hsqldb/derby Persistence ibatis (cache) Business spring Presentation struts View sitemesh + JSTL + ajax Sync jms
目  录 历史与定位 功能简介 技术架构 技术点探讨 未来
技术点探讨 Spring 的使用 : config/transaction 双通问题的解决: AOP+JMS DWR  验证 : bean validator Sitemesh  的使用 : html/decorators Wiki 集成 : wikilink / xmlrpc logon 可配置 editor : BBCode/FCKeditor
Spring  的使用
Spring  的使用 2
双通问题 中国特定历史时期的特定问题 Mysql repl  连接不能保证 Service 方法: JMS + AOP 文件同步: WebSync  软件
双通问题 2 public   class  JmsRemoteServiceInvokeAdvice  implements  MethodBeforeAdvice { … .. public   void  before(Method method, Object[] args, Object target)  throws  Throwable { Class[] paramType =  null ; if  ( null  != args) { paramType =  new  Class[args.length]; for  ( int  i = 0; i < args.length; i++) { paramType[i] = args[i].getClass(); } } ServiceInvokeBean methodInvoke =  new  ServiceInvokeBean( method.getDeclaringClass().getName(),  method.getName(), paramType, args, ( new  java.util.Date()).toString()); jmsTemplate.convertAndSend(jmsQueueOut, methodInvoke); } }
DWR  验证 提供  js  写代码调用验证,是不太可靠的 典型的提交数据的方法,也是提交一个  bean  ,比如  Review  Commons-validator  就是针对  bean  做验证 于是借鉴下  struts  对  validator  的使用方式,对  dwr  提交数据做可配置验证,当前直接使用原来  struts  的  validator  配置文件,也输出国际化消息 在  DWR  侧,也是配置到他的配置里,需要对  dwr  本身做少量的修改,认识配置文件内容
DWR  验证 2 <servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>uk.ltd.getahead.dwr.ConverterManager</param-name> <param-value>cn.org.matrix.jmatrix.ajax.ValidatorConverterManager</param-value> </init-param> </servlet> <allow> <convert converter=&quot;bean&quot; match=&quot;cn.org.matrix.jmatrix.ajax.AjaxResult&quot; /> <convert converter=&quot;bean&quot; match=&quot;cn.org.matrix.jmatrix.content.domain.Review&quot;> <param name=&quot;validator&quot; value=&quot;reviewBean&quot;></param> </convert> <convert converter=&quot;bean&quot; match=&quot;cn.org.matrix.jmatrix.common.domain.Vote&quot;></convert> <create creator=&quot;spring&quot; javascript=&quot;ContentFacade&quot;> <param name=&quot;beanName&quot; value=&quot;contentFacade&quot;/> </create> </allow>
DWR  验证 3 protected  ActionErrors validate(HttpServletRequest request, String validationKey, Object validationBean) { ServletContext application = request.getSession().getServletContext(); ActionErrors errors =  new  ActionErrors(); Validator validator = Resources. initValidator (validationKey,  validationBean, application, request, errors, 1); try  { validator.validate(); }  catch  (ValidatorException e) { log .error(e.getMessage(), e); } return  errors; } String validationKey = (String) getApplication().getAttribute( Globals. AJAX_VALIDATOR  + &quot;_&quot; + Review. class .getName()); ActionMessages actionMessages = validate(getRequest(), validationKey, review);
Sitemesh  的使用 分析  HTML  分析结构,非常巧妙的办法 只需要关注主文件, header/footer 这些通过  decorator  自动搞定 不只是  jsp  文件会过滤,  HTML  文件也会过滤,只要是走  Servlet  容器 当前版本处理中文还有点问题,需要修改一个文件
Sitemesh 的使用2 <decorator name=&quot;main&quot; page=&quot;dec_main.jsp&quot;> <pattern>/*.shtml</pattern> </decorator> <decorator name=&quot;blank&quot; page=&quot;dec_blank.jsp&quot;> <pattern>/upload*.shtml</pattern> <pattern>/dynamic*.shtml</pattern> </decorator>
Wiki  集成 Wiki Link [MatrixJava]  [Jmatrix]  [SUN] 发布内容时编辑者主动加上  wiki_link Keywords Link 设置关键词 s 系统扫描内容,自动匹配加上  wiki link Wiki  用户 直接使用  matrix  用户,通过  xmlrpc  远程调用
可配置 editor 通过  spring  配置文件加载  editor  指定  editor name  即处理内容时 不同的  process  Jsp include  不同 这种可配置是否有很大的意义?
可配置 editor2 <bean id=&quot;contentProcessor&quot; class=&quot;cn.org.matrix.jmatrix.util.ContentProcessor&quot;> <property name=&quot;editors&quot;> <list> <ref bean=&quot;bbcode&quot;></ref> <ref bean=&quot;fckeditor&quot;></ref> </list> </property> <property name=&quot;defaultEditorName&quot;><value>bbcode</value></property> <property name=&quot;wikiBaseUrl&quot;><value>http://wiki.matrix.org.cn</value></property> </bean> <bean id=&quot;fckeditor&quot; class=&quot;cn.org.matrix.jmatrix.util.editor.CommonEditor&quot; > <property name=&quot;name&quot;><value>fckeditor</value></property> <property name=&quot;description&quot;><value>FCK Editor from sourceforge</value></property> <property name=&quot;parseWikiKeywordsLink&quot;><value>true</value></property> <property name=&quot;pageIncludeFile&quot;><value>/common/editor/includeFCKEditor.jsp</value></property> </bean>
可配置 editor3 <html:select property=&quot;selectEditor&quot;  onchange=&quot;document.forms[0].changeEditor.value='change';  document.forms[0].submit();&quot;> <html:optionsCollection property=&quot;contentEditorList“ label=&quot;name&quot; value=&quot;name&quot; /> </html:select> <jsp:include page=&quot;${articleForm.selectEditorPage}&quot; flush=&quot;true&quot;> <jsp:param name=&quot;editor_name&quot; value=&quot;editorContent&quot; /> <jsp:param name=&quot;editor_height&quot; value=&quot;400&quot; /> <jsp:param name=&quot;editor_init&quot; value=&quot;${articleForm.content2}&quot; /> <jsp:param name=&quot;editor_toolbarSet&quot; value=&quot;Basic&quot; /> </jsp:include>
目  录 历史与定位 功能简介 技术架构 几个技术点探讨 未来
未来 倾听与满足用户需求  Roller Blog 集成 用户, group blog 向  CMS  标准、规范靠拢 不一定用  JSR 170 扩展点  Extension Point Template Plugin
Thank you

ev2oik

  • 1.
    jmatrix 介绍matrix.org.cn
  • 2.
    目 录历史与定位 功能简介 技术架构 技术点探讨 未来
  • 3.
    Jmatrix 由来与定位Matrix 网站的历史原因 : ASP 系统 Java 开源的网站系统里没有合适的 网站全站系统 基于 Java 开源:探索开源的方式
  • 4.
    jmatrix 历史Matrix 网站 2003.6 成立,原来是 CS 网站 2003.9-2004.9 大家在讨论甚至开始写了点需求,来做 JSP 全站系统。未果 2004.9 开始 jmatrix 项目 2005.4 开始测试。后补充完善并正式投入使用 2005.8 经过几个月的试运行,发布 1.0 beta 版本 之前一年:因为工作原因空余时间有限,没有能开源发布出来,只是不断根据 matrix 网站的需求增改功能、修订 bug 。 现在:发布开源 jmatrx ,当前版本是 1.4.6
  • 5.
    目 录历史与定位 功能简介 技术架构 技术点探讨 未来
  • 6.
    功能简介 论坛 Forum (分类、嵌套) 新闻 News 文章 Article 资源 Resource (Download Server) 评论 Review (Article/News/Resource) 通用功能 Common Upload/Favorate/Link/Editor/Recommend/Vote/Poll/Ipfilter/Message
  • 7.
    目 录历史与定位 功能简介 技术架构 技术点探讨 未来
  • 8.
    技术架构 Database mysql/hsqldb/derbyPersistence ibatis (cache) Business spring Presentation struts View sitemesh + JSTL + ajax Sync jms
  • 9.
    目 录历史与定位 功能简介 技术架构 技术点探讨 未来
  • 10.
    技术点探讨 Spring 的使用: config/transaction 双通问题的解决: AOP+JMS DWR 验证 : bean validator Sitemesh 的使用 : html/decorators Wiki 集成 : wikilink / xmlrpc logon 可配置 editor : BBCode/FCKeditor
  • 11.
  • 12.
  • 13.
    双通问题 中国特定历史时期的特定问题 Mysqlrepl 连接不能保证 Service 方法: JMS + AOP 文件同步: WebSync 软件
  • 14.
    双通问题 2 public class JmsRemoteServiceInvokeAdvice implements MethodBeforeAdvice { … .. public void before(Method method, Object[] args, Object target) throws Throwable { Class[] paramType = null ; if ( null != args) { paramType = new Class[args.length]; for ( int i = 0; i < args.length; i++) { paramType[i] = args[i].getClass(); } } ServiceInvokeBean methodInvoke = new ServiceInvokeBean( method.getDeclaringClass().getName(), method.getName(), paramType, args, ( new java.util.Date()).toString()); jmsTemplate.convertAndSend(jmsQueueOut, methodInvoke); } }
  • 15.
    DWR 验证提供 js 写代码调用验证,是不太可靠的 典型的提交数据的方法,也是提交一个 bean ,比如 Review Commons-validator 就是针对 bean 做验证 于是借鉴下 struts 对 validator 的使用方式,对 dwr 提交数据做可配置验证,当前直接使用原来 struts 的 validator 配置文件,也输出国际化消息 在 DWR 侧,也是配置到他的配置里,需要对 dwr 本身做少量的修改,认识配置文件内容
  • 16.
    DWR 验证2 <servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>uk.ltd.getahead.dwr.ConverterManager</param-name> <param-value>cn.org.matrix.jmatrix.ajax.ValidatorConverterManager</param-value> </init-param> </servlet> <allow> <convert converter=&quot;bean&quot; match=&quot;cn.org.matrix.jmatrix.ajax.AjaxResult&quot; /> <convert converter=&quot;bean&quot; match=&quot;cn.org.matrix.jmatrix.content.domain.Review&quot;> <param name=&quot;validator&quot; value=&quot;reviewBean&quot;></param> </convert> <convert converter=&quot;bean&quot; match=&quot;cn.org.matrix.jmatrix.common.domain.Vote&quot;></convert> <create creator=&quot;spring&quot; javascript=&quot;ContentFacade&quot;> <param name=&quot;beanName&quot; value=&quot;contentFacade&quot;/> </create> </allow>
  • 17.
    DWR 验证3 protected ActionErrors validate(HttpServletRequest request, String validationKey, Object validationBean) { ServletContext application = request.getSession().getServletContext(); ActionErrors errors = new ActionErrors(); Validator validator = Resources. initValidator (validationKey, validationBean, application, request, errors, 1); try { validator.validate(); } catch (ValidatorException e) { log .error(e.getMessage(), e); } return errors; } String validationKey = (String) getApplication().getAttribute( Globals. AJAX_VALIDATOR + &quot;_&quot; + Review. class .getName()); ActionMessages actionMessages = validate(getRequest(), validationKey, review);
  • 18.
    Sitemesh 的使用分析 HTML 分析结构,非常巧妙的办法 只需要关注主文件, header/footer 这些通过 decorator 自动搞定 不只是 jsp 文件会过滤, HTML 文件也会过滤,只要是走 Servlet 容器 当前版本处理中文还有点问题,需要修改一个文件
  • 19.
    Sitemesh 的使用2 <decoratorname=&quot;main&quot; page=&quot;dec_main.jsp&quot;> <pattern>/*.shtml</pattern> </decorator> <decorator name=&quot;blank&quot; page=&quot;dec_blank.jsp&quot;> <pattern>/upload*.shtml</pattern> <pattern>/dynamic*.shtml</pattern> </decorator>
  • 20.
    Wiki 集成Wiki Link [MatrixJava] [Jmatrix] [SUN] 发布内容时编辑者主动加上 wiki_link Keywords Link 设置关键词 s 系统扫描内容,自动匹配加上 wiki link Wiki 用户 直接使用 matrix 用户,通过 xmlrpc 远程调用
  • 21.
    可配置 editor 通过 spring 配置文件加载 editor 指定 editor name 即处理内容时 不同的 process Jsp include 不同 这种可配置是否有很大的意义?
  • 22.
    可配置 editor2 <beanid=&quot;contentProcessor&quot; class=&quot;cn.org.matrix.jmatrix.util.ContentProcessor&quot;> <property name=&quot;editors&quot;> <list> <ref bean=&quot;bbcode&quot;></ref> <ref bean=&quot;fckeditor&quot;></ref> </list> </property> <property name=&quot;defaultEditorName&quot;><value>bbcode</value></property> <property name=&quot;wikiBaseUrl&quot;><value>http://wiki.matrix.org.cn</value></property> </bean> <bean id=&quot;fckeditor&quot; class=&quot;cn.org.matrix.jmatrix.util.editor.CommonEditor&quot; > <property name=&quot;name&quot;><value>fckeditor</value></property> <property name=&quot;description&quot;><value>FCK Editor from sourceforge</value></property> <property name=&quot;parseWikiKeywordsLink&quot;><value>true</value></property> <property name=&quot;pageIncludeFile&quot;><value>/common/editor/includeFCKEditor.jsp</value></property> </bean>
  • 23.
    可配置 editor3 <html:selectproperty=&quot;selectEditor&quot; onchange=&quot;document.forms[0].changeEditor.value='change'; document.forms[0].submit();&quot;> <html:optionsCollection property=&quot;contentEditorList“ label=&quot;name&quot; value=&quot;name&quot; /> </html:select> <jsp:include page=&quot;${articleForm.selectEditorPage}&quot; flush=&quot;true&quot;> <jsp:param name=&quot;editor_name&quot; value=&quot;editorContent&quot; /> <jsp:param name=&quot;editor_height&quot; value=&quot;400&quot; /> <jsp:param name=&quot;editor_init&quot; value=&quot;${articleForm.content2}&quot; /> <jsp:param name=&quot;editor_toolbarSet&quot; value=&quot;Basic&quot; /> </jsp:include>
  • 24.
    目 录历史与定位 功能简介 技术架构 几个技术点探讨 未来
  • 25.
    未来 倾听与满足用户需求 Roller Blog 集成 用户, group blog 向 CMS 标准、规范靠拢 不一定用 JSR 170 扩展点 Extension Point Template Plugin
  • 26.