opencms 安装细节探讨

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

引入:

因为项目需求,我们要用到openCMS。虽然以前用过很多类似的内容管理系统类似Vignette,Fatwire,但是openCMS虽然大体功能差不多,具体并没用过,所以这里做了一些研究,会陆续把这些研究心得分享出来。这里先从openCMS安装讲起,虽然简单,但也有一些值得探讨的问题。


安装亮点1:不可以重复配置openCMS。

我们知道,第一次运行openCMS需要做配置,配置的请求URL是:http://localhost:8080/opencms/setup/ ,但是运行第一次之后就不可以运行第二次了,理由是在安装过程中,它会去调用CmsSetupBean类的prepareSetup10()方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
      * Prepares step 10 of the setup wizard.<p>
      */
    publicvoidprepareStep10() {
  
         if  (isInitialized()) {
             // lock the wizard for further use 
             lockWizard();
             // save Properties to file "opencms.properties" 
             saveProperties(getProperties(),CmsSystemInfo.FILE_PROPERTIES,  false );
  
             setSchemaGeneration( false );
             m_peristenceConfigurator.save();
         }
     }

而这个方法会去调用lockWizard()方法后保存opencms.properties让其生效,lockWizard方法的实现就是把opencms.properties中key为wizard.enabled设为false:

1
2
3
4
publicvoidlockWizard() {
  
         setExtProperty( "wizard.enabled" , CmsStringUtil.FALSE);
}

这会导致我们的opencms.properties被更改:

1
2
3
4
5
6
7
#
# Enable/Disable OpenCms Setup Wizard
# The wizard sets the flag to false after the setup.
# To use the wizard again, reset it manually to true.
# By setting no value, wizard can always be used.
#################################################################################
wizard.enabled=false

而下次运行时候,它会去判断此属性,判断点在CmsAutoSetup类的main()方法中调用的run()方法的第一行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
      * Performs the setup.<p>
      * @throws Exception 
      */
    publicvoidrun() throwsException {
  
         if  (m_bean.getWizardEnabled()) {
  
             longtimeStarted = System.currentTimeMillis();
  
             CmsSetupTests setupTests =  new  CmsSetupTests();
           
         }
}



安装亮点2: 正确设置max_allowed_packet这个mysql系统变量的大小。

在opencms安装过程中,它会对一些DB变量做检查,其代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/**
      * Returns an optional warning message ifneeded, <code>null</code> if not.<p>
     
      * @param db the selected database key
     
      * @return html warning, or <code>null</code> if no warning
      */
    publicString checkVariables(String db) {
  
         StringBuffer html =  new  StringBuffer( 512 );
         if  (m_con ==  null ){
             return  null // prior error,trying to get a connection
         }
         Exception exception =  null ;
         if  (db.equals( "mysql" )){
             String statement =  "SELECT @@max_allowed_packet;" ;
             Statement stmt =  null ;
             ResultSet rs =  null ;
             longmaxAllowedPacket =  0 ;
             try  {
                 stmt = m_con.createStatement();
                 rs = stmt.executeQuery(statement);
                 if  (rs.next()) {
                     maxAllowedPacket = rs.getLong( 1 );
                 }
             catch  (Exception e) {
                 exception = e;
             finally  {
                 if  (stmt !=  null ){
                     try  {
                         stmt.close();
                     catch  (SQLException e) {
                         // ignore
                     }
                 }
             }
             if  (exception ==  null ){
                 intmegabyte =  1024  1024 ;
                 if  (maxAllowedPacket >  0 ) {
                     html.append( "<p>MySQL system variable <code>'max_allowed_packet'</code>is set to " );
                     html.append(maxAllowedPacket);
                     html.append( " Byte (" );
                     html.append((maxAllowedPacket / megabyte) +  "MB).</p>\n" );
                 }
                 html.append( "<p>Please note that it will not be possible for OpenCms tohandle files bigger than this value in the VFS.</p>\n" );
                 intrequiredMaxAllowdPacket =  16 ;
                 if  (maxAllowedPacket < (requiredMaxAllowdPacket * megabyte)){
                     m_errors.add( "<p><b>Your <code>'max_allowed_packet'</code>variable is set to less than "
                         + (requiredMaxAllowdPacket* megabyte)
                         " Byte("
                         + requiredMaxAllowdPacket
                         "MB).</b></p>\n"
                         "<p>The required value for running OpenCms isat least "
                         + requiredMaxAllowdPacket
                         "MB."
                         "Please change your MySQL configuration (in the<code>my.ini</code> or <code>my.cnf</code>file).</p>\n" );
                 }
             else  {
                 html.append( "<p><i>OpenCms was not able to detect the value of your<code>'max_allowed_packet'</code>variable.</i></p>\n" );
                 html.append( "<p>Please note that it will not be possible for OpenCms tohandle files bigger than this value.</p>\n" );
                 html.append( "<p><b>The recommended value for running OpenCms is 16MB,please set it in your MySQL configuration (in your<code>my.ini</code> or <code>my.cnf</code>file).</b></p>\n" );
                 html.append(CmsException.getStackTraceAsString(exception));
             }
         }
         if  (html.length() ==  0 ) {
             return  null ;
         }
         return  html.toString();
     }

从这里可以看出,对于数据库是mysql的情形,它会先去执行数据库查询读取max_allowed_packet的值,这个变量主要让mysql限制服务器接受的单个数据包的大小(因为在openCMS中,经常要存富文本内容,所以这个值还是要设置大点为好),并且如果它<16MB, 则报错our max_allowed_packet variable is set to less than 16MB。而默认的mysql这个值配置是4MB,所以第一次setup出错。我们在my.ini中将其改为30MB,这样才过了这关:

wKiom1R6f1XxxiwOAAEsVJYPJ_0634.jpg



安装亮点3:opencms中资产的存储。

opencms中,这些资产都是以BLOB形式存储的:

wKioL1R6f4GSuLD4AAK72Iz3D_c513.jpg





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1584636,如需转载请自行联系原作者
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
安全 搜索推荐 数据挖掘
文件解析的终极工具:Apache Tika
文件解析的终极工具:Apache Tika
255 0
|
JavaScript 算法 前端开发
Mac下编译dinky-web(踩坑篇)
Mac下编译dinky-web(踩坑篇)
196 0
|
Apache Java 应用服务中间件
|
SQL 缓存 Java
Ruoyi集成flyway后启动报错的解决方法
本文简单介绍了ruoyi系统以及flyway数据库版本控制技术。并说明了如何在ruiyi中集成flyway组件。重点阐述了集成flyway的过程中会遇到的问题以及针对这个问题的三种不同的解决方案。
721 0
Ruoyi集成flyway后启动报错的解决方法
|
XML Java 应用服务中间件
eclipse关于xml文件有两种方式显示 Design方式-图形化方式,Source-源码方式
eclipse关于xml文件有两种方式显示 Design方式-图形化方式,Source-源码方式
1139 0
eclipse关于xml文件有两种方式显示 Design方式-图形化方式,Source-源码方式
|
Android开发
用Links方式安装Eclipse插件真方便
使用Eclipse一年多了,一直都是把所有插件直接安装在plugins和features目录下,虽然目录变得比较乱但也不怎么影响使用。最近因为工作需要,经常更换Eclipse和一些插件的版本,我发现每新装一个Eclipse就要花不少时间来装那几个常用插件,印象里有一种方法可以让插件以链接的方式存在,就在网上查了一下,请看这篇文章,讲得很明白。
1376 0