金蝶容器运维指南

您所在的位置:网站首页 金蝶初始登录用户名 金蝶容器运维指南

金蝶容器运维指南

2024-03-15 23:52| 来源: 网络整理| 查看: 265

金蝶容器介绍

​ 在进行28所项目的时候,由于项目国产化的需要,因此AI服务器在开发的过程中必须使用Tomcat、Jetty、Undertow等容器的国产化替代产品,因为国家的政策法规已经将信息安全问题上升到国家的高度,在项目开发过程中使用的产品必须是自主可控、而且源代码安全的。

​ 金蝶Apusic应用服务器 AAS是应用系统的运行平台,为应用系统提供便捷开发、灵活部署、可靠运行、高效管理及快速集成等关键支撑。支持Java企业级规范和主流应用框架,广泛应用于电子政务和企业核心关键应用。

​ 28所项目、AI服务器、以及未来的大船项目中,均会采用相同的国产化形态软件,AAS+国产化数据库的应用结构来进行开发,因此结合28所项目、所里AI服务器项目的金蝶容器使用实践,总结以往的经验,温故而知新。把相关金蝶容器的使用经验记录如下。

AAS架构

AAS产品架构

技术白皮书

金蝶容器技术白皮书

应用场景

​ 电子政务系统、电子商务系统、企业CRM系统等JavaEE应用都需要使用JavaEE应用服务器。

安装包目录结构 目录结构

较为重要的由两个文件夹,一个是根目录下的文件夹,只要能够较为熟悉的了解两层目录中文件夹和文件的基本含义,即可对容器有初步的理解并且使用。

Apusic应用目录结构

​ 在Apusic应用目录结构中较为重要的文件夹为domains文件夹,该文件中包含用户通过bin/config创建的自定义域。我们可以把自己制作的war包或者文件见部署在domains**self-defined-domain**中。

应用程序部署在APUSIC_HOME\domains\self-defined-domain\applications\目录下,如果不创建自定义域则放置在APUSIC_HOME\domains\mydomain\applications\

应用目录结构中的具体作用如下表所示

目录内容adminconsoleApusic管理控制台运行所需文件,如果使用的安装包包含adminconsole,则安装完后adminconsole在此目录中bin一些命令行脚本,通常,您需要修改其中setenv.cmd(setenv)文件,将其中JAVA_HOME设置为正确的JVM所在目录classes服务器运行时,会将此目录置为系统CLASSPATH最前端,默认情况下,此目录为空common服务器运行时,会将此目录中的jar包(含zip)置于系统CLASSPATH中,位于sp目录中的jar包之后,lib目录中的jar包之前lib服务器运行时,会将此目录中的jar包(含zip)置于系统CLASSPATH中,位于common目录中的jar包之后sp补丁程序所在位置,服务器运行时,会将此目录中的jar包(含zip)置于系统CLASSPATH中,位于classes目录之后,common目录中的jar包之前; 默认情况下,此目录为空domainsApusic应用服务器的域,见[下表](file:///C:/Users/宋姗姗/Desktop/宋姗姗/AAS-V9.0_2019-1-7/readme.html#table2)。src一些第三方jar包的源码包templates创建domain时所用到的模板tools包含管控api文档,以及工具脚本和readme.txt说明文档

注意:在tools文件中包含了许多的非交互式脚本,用来简化AAS容器的全局配置。

tools非交互式脚本介绍

域目录结构

​ Apusic应用服务器的域信息保存在APUSIC_HOME/domains目录下,每个域的信息保存在同名的子目录中,安装服务器后domains目录下包含预定义的mydomain域。mydomain中的子目录及子目录描述如下表:

目录内容applications凡放到此文件夹中的ear、war、rar等符合J2EE规范的文件或文件夹,都会被自动部署到Apusic应用服务器上bin一些命令行脚本,通常,您需要运行其中startapusic.cmd(startapusic)脚本来启动Apusic应用服务器config服务器中的数据库连接池、web服务器、JMS服务、日志服务等相关配置文件、负载均衡示例配置文件等deploy服务器从未运行过时,此目录不存在,当服务器启动以后,会自动创建此文件夹。此文件夹中放置了应用系统运行时所产生的一些中间过程文件,譬如,由jsp文件生成的servlet等lib允许用户在这里放置一些公用的jar包(譬如数据库JDBC Driver等),此文件夹中的jar包(含zip)会自动置于系统CLASSPATH的尾部logs服务器日志文件store系统用户存储文件,JMS消息存储文件等

​ APUSIC_HOME/domains目录下还包含预定义的samples域,samples域预部署了若干个示例应用,用以演示JavaEE5的最新技术。samples域的目录结构与mydomain基本一致,但多了一个src目录,存放示例应用的源代码及构建脚本。

证书

​ 由于AAS的运行是付费的,因此必须从金蝶获取符合时间的证书,当前可用的证书如下:

把该证书置于根目录下即可

\AAS-V9.0_2019-1-7

若证书时间过期,则在运行时会弹出如下的问题:

证书过期

Linux管理

​ 金蝶容器与Tomcat容器一样,zip安装包支持Windos和Linux环境下运行。在启动运行程序时,在mydomains\applications文件夹中

在上述的行文以及下述的行文中,并不创建自定义域,而仅仅使用预先安装的mydomain域来演示程序。

使用如下的脚本来控制应用程序的启停。

应用程序启停

由于Windows和Linux端应用程序的管理别无二致,Linux端金蝶的使用是日后工作的重点,因此如下使用Linux端来演示应用程序的启停管理

配置应用端口

我们可以采用如下的方式创建一个新的域,较为重要步骤是要确定域监听的的端口和SSL端口。

创建域使用config脚本,该脚本位于APUSIC_HOME\config,其他以默认方式执行即可。该行命令执行完毕,则可以在APUSIC_HOME\domains目录下看见自定义的域。

windos环境创建域 C:\Users\AAS-V9.0_2019-1-7\bin>config.cmd Using APUSIC_ENDORSED_DIRS: C:\Users\AAS-V9.0_2019-1-7\lib\endorsed ----------------------------------------------------------- | 欢迎进入Apusic域配置向导 | | 版本 :Apusic Application Server 9.0 | | | | 深圳市金蝶中间件有限公司 | | 版权所有 | ----------------------------------------------------------- 选择任务 ... ------------ 您希望执行下面的哪一个任务? 1- 创建一个新的Apusic域 2- 删除一个现有的Apusic域 3- 构建一个新的Apusic域模板 请选择相应的数字: 1 欢迎进入域创建向导中心 ---------------------- 该向导将会帮助您创建一个全新的Apusic域,同时也会在您的计算机上创建一些相关文件和需要的目录. 按键继续: 选择域来源 ... -------------- 选择将要创建的域的来源.您能够指定一个域模板来创建域,也可以不使用域模板创建域. ->1- 选择系统默认模板 2- 选择自定义模板 请选择相应的数字,或按键接受默认选择:1 选择系统默认模板 ... -------------------- 标准模板与集群模板的区别是: 基于集群模板创建的domain拥有集群服务。 ->1- 标准 2- 集群 请选择相应的数字,或按键接受默认选择:1 域配置 ... ---------- 您想在哪一位置安装该域? 默认位置 = C:\Users\AAS-V9.0_2019-1-7\domains 请输入一个绝对路径,或按键接受默认位置 安装路径: 请为该域输入一个有效的名称,域名称是该域的有效标识. 已存在的域名称: 1- mydomain 域名称: sqh 服务器配置 ... -------------- 设置服务器监听端口 默认端口 = 6888 请输入您的服务器监听端口,按键接受默认选择 监听端口 : 8888 设置服务器SSL安全监听端口 默认端口 = 6889 请输入您的服务器SSL安全监听端口,按键接受默认选择 SSL监听端口 : 7888 高级选项配置 ... ---------------- 这里将会帮助您继续进行数据源配置,J2EE应用程序配置. 默认选择 = 否 请选择,或按键接受默认选择 是否希望配置一些高级选项? (Y|N): 请稍后... --------- .................................................................................................................................................................................. 您所选择的任务成功执行完毕. Linux创建域 root@sqh-virtual-machine:/usr/local/aas/bin# ./config ----------------------------------------------------------- | Welcome to Apusic Domain Configuration Wizard | | Version :Apusic Application Server 9.0 | | | | Copyright 2006 ShenZhen Kingdee Middleware Inc. | | All rights reserved | ----------------------------------------------------------- Select Task ... --------------- Which task would you like to perform? 1- Create a new Apusic Domain 创建一个新域 2- Remove a existing Apusic Domain 3- Build a new Apusic Domain Template CHOOSE TASK BY NUMBER: 1 WELCOME TO CREATE DOMAIN WIZARD 欢迎来到创建域向导 ------------------------------- This wizard will help you to create a new domain, and it will create some files and directories on your computer. PRESS TO CONTINUE: Select Apusic Domain Source ... 选择Apusic域来源 ------------------------------- Select the source for which the domain will be created. You can create the domain without domain template or by selecting an existing Apusic domain template. ->1- Select the system default template 选择系统默认模板 2- Select a custom template CHOOSE DOMAIN SOURCE BY NUMBER, OR PRESS TO ACCEPT THE DEFAULT:1 Select The System Default Template ... -------------------------------------- The difference between Standard Edition template and Cluster Edition template is that Cluster Edition is a cluster enable domain template. ->1- Standard Template 标准模板 2- Cluster Template CHOOSE DEFAULT TEMPLATE BY NUMBER, OR PRESS TO ACCEPT THE DEFAULT:1 Apusic Domain Configuration ... ------------------------------- Where would you like to install the domain? Defalut location = /usr/local/aas/domains ENTER AN ABSOLUTE PATH, OR PRESS TO ACCEPT THE DEFAULT Domain Location: Enter the name for the domain,the name is a valid identity of the domain. Domain names already exists: 1- mydomain 2- samples Domain Name: screenshot Apusic Server Configuration ... ------------------------------- Set up the server listening port 设置该域监听端口 HTTP default port = 6888 Apusic默认使用6888 Please enter your server listening port,PRESS TO ACCEPT THE DEFAULT Listen Port : 4444 Set up the server security listening port HTTPS端口 default port = 6889 Please enter your server security listening port,PRESS TO ACCEPT THE DEFAULT SSL Listen Port : 5555 Apusic Advanced Options Configuration ... ----------------------------------------- Here will help you to to continue the data source configuration, J2EE application configuration. Default value = NO ENTER YOUR CHOOSE, OR PRESS TO ACCEPT THE DEFAULT Do you want to define advanced options? (Y|N): n Please wait... -------------- ............... The task has been finished successfully. apusic.conf

创建域之后,可以通过修改配置文件APUSIC_HOME/domains/mydomain/config/ apusic.conf来修改端口号 在配置文件中apusic.conf中,关注参数Port和SecurePort、SSLEnabled

部署应用

​ 再金蝶容器中部署应用时,有两种部署方式。一种是通过war包的方式,另外一种则是通过文件夹的方式;在智慧营区项目实践过程中,我们采用war包的方式来部署应用。通过使用

mvn package

可以把项目的打包过后的目录拷贝至APUSIC_HOME\mydomain\applications目录下。

​ 具体拷贝内容如下图所示:

部署材料

war包部署

​ 与Tomcat容器一样,金蝶容器可以使用war包的方式进行部署,当在运行时会产生如下几种效果:

deploy文件夹

​ Apusic容器会把拷贝进入applications目录的war包解压到domains\mydomain\deploy,并且在该目录下可以看到如下的内容,可以通过cmd的tree命令查看目录层级

C:\Users\AAS-V9.0_2019-1-7\domains\mydomain\deploy\rest-0.0.1-SNAPSHOT>tree 卷 OS 的文件夹 PATH 列表 卷序列号为 68EB-2279 C:. ├─.extends │ ├─rest-0.0.1-SNAPSHOT ├─.system │ └─rest-0.0.1-SNAPSHOT └─tmpfiles ├─docroot │ ├─META-INF │ │ └─maven │ │ └─com.example │ │ └─rest │ └─WEB-INF │ ├─classes │ │ └─com │ │ └─example │ │ └─rest │ │ └─controller │ └─lib └─jsp

由此,可以分析出程序会解析war包,并把相关的资源拷贝到deploy目录。

日志产生

程序产生的日志位于applications同级目录下的logs目录domains\mydomain\logs

在Linux环境下,可以采用

tail -f ..\domains\mydomain\logs\apusic.log.0

来动态产看程序所产生的日志。

浏览器访问

点击跳转

访问请求验证 package com.example.rest.controller; import com.alibaba.fastjson.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; /** * 添加问候controller * * @author songquanheng * @Time: 2020/2/19-17:58 */ @RestController public class HelloController { Logger logger = LoggerFactory.getLogger(this.getClass()); @GetMapping("/hello") public String hello() { logger.info("Enter hello"); JSONObject result = new JSONObject(); result.fluentPut("code", 0) .fluentPut("msg", "success"); logger.info("Leave hello"); return result.toJSONString(); } }

则在程序正常运行之后,若想要访问hello接口,则应采用如下的方式:

http://hostname:port/war包名/@RequestMapping.value

上述URL中变化的位置为war包名的有无,若指定项目生成的war包为ROOT,则war包名为空采用如下的URL形式即可

http://hostname:port/@RequestMapping.value 文件夹部署

文件夹部署与war包部署很相似,没什么区别。不再赘述

部署材料

应用管理

​ 无论是在Linux还是windows环境中,灵活的使用进程号pid和端口号是控制应用的灵活方式。

如下的启动、终止脚本位于APUSIC_HOME\domains\mydomain\bin目录下。Windows环境下使用.cmd结尾的脚本,Linux使用另外的启动和停止脚本。如下的陈述以Linux为主

启动应用 ./mydomain/bin/startapusic

上述命令会在当前终端启动该应用程序,若当前终端关闭,则该应用程序终止,显然这不是希望的方式。

可以使用nohup命令来把当前进程放进后台,具体操作如下:

[Unauthorized System] root@lccy-os:/usr/local/yyzc/52-project/AAS-V9.0_2019-1-7/domains/mydomain/applications# nohup ../bin/startapusic 1> ../bin/nohup.out 2>&1 & [1] 28330 [Note] System unauthorized, Please contact the system supplier.

此时,会在…/bin目录下生成nohup.out,其中的内容为platform项目生成的日志。

使用数据重定向技术把相关的日志打入bin目录下的nohup.out文件。

注意:不要把日志文件打入applications目录下,因为Apusic默认会把该文件下的文件看作一个应用程序对待。

数据重定向可以将stanardout output和standard error output分别传送到其他的文件或设备区,分别使用如下的特殊字符。

终止应用 [Unauthorized System] root@lccy-os:/usr/local/yyzc/52-project/AAS-V9.0_2019-1-7/domains/mydomain/applications# ../bin/stopapusic

​ 需要注意的是,在金蝶容器中执行了上述的停止命令,虽然执行成功了,但程序其实并未执行成功,此时需要通过杀死进程的方式来解决该问题,可以使用如下的方式来获取pid

获取pid lsof lsof -i:port netstat 7/domains/mydomain/applications# netstat -ano | grep 8080 tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 关闭 (0.00/0/0) [Note] System unauthorized, Please contact the system supplier. [Unauthorized System] root@lccy-os:/usr/local/yyzc/52-project/AAS-V9.0_2019-1-7/domains/mydomain/applications# netstat -anop | grep 8080 tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 3745/java 关闭 (0.00/0/0) jps

jps(Java Virtual Machine Process Status Tool),可以用于

是java提供的一个显示当前所有java进程pid的命令,适合在linux/unix平台上简单察看当前java进程的一些简单情况。

jps命令使用如下所示:

-q:只输出进程 ID -m:输出传入 main 方法的参数 -l:输出完全的包名,应用主类名,jar的完全路径名 -v:输出jvm参数 -V:输出通过flag文件传递到JVM中的参数

jps命令在Linux环境和Windows环境下均可使用。

C:\UsersR\AAS-V9.0_2019-1-7\domains\mydomain\deploy>jps -v 21508 Jps -Dapplication.home=C:\Program Files\Java\jdk1.8.0_66 -Xms8m 21736 RemoteMavenServer -Djava.awt.headless=true -Didea.version==2018.1.5 -Xmx768m -Didea.maven.embedder.version=3.3.9 -Dfile.encoding=GBK 1612 Main -Djava.endorsed.dirs=C:\Users\AAS-V9.0_2019-1-7\lib\endorsed -Dcom.apusic.domain.home=C:\Users\AAS-V9.0_2019-1-7\domains\mydomain -Djava.net.preferIPv4Stack=true -Xms512m -Xmx1024m -XX:MaxPermSize=256m -verbose 22428 -Xms128m -Xmx750m -XX:ReservedCodeCacheSize=240m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Djb.vmOptionsFile=C:\Program Files\JetBrains\IntelliJ IDEA 2018.1.5\bin\idea64.exe.vmoptions -Didea.jre.check=true -Dide.native.launcher=true -Didea.paths.selector=IntelliJIdea2018.1 终止进程 [Unauthorized System] root@lccy-os:/usr/local/yyzc/52-project/AAS-V9.0_2019-1-7/domains/mydomain/applications# kill -9 1612 问题解决 跨域问题 跨域问题原因

​ 出于浏览器的同源策略限制。**同源策略(Sameoriginpolicy)**是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)

跨域实例

当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域

当前页面url 被请求页面url 是否跨域 原因 http://www.test.com/ http://www.test.com/index.html 否 同源(协议、域名、端口号相同) http://www.test.com/ https://www.test.com/index.html 跨域 协议不同(http/https) http://www.test.com/ http://www.baidu.com/ 跨域 主域名不同(test/baidu) http://www.test.com/ http://blog.test.com/ 跨域 子域名不同(www/blog) http://www.test.com:8080/ http://www.test.com:7001/ 跨域 端口号不同(8080/7001) 解决步骤

​ 在北京15所保障第二次测试时,由于AI相关的应用程序A在一个金蝶容器中,28所开发的应用程序B在另外一个金蝶容器中。在实际运行时发现,若B想要通过请求获取A中的图片资源时,页面报错,跨域。可以通过如下的配置解决该问题。

修改APUSIC_HOME\domains\mydomain\config\web.xml CORS com.thetransactioncompany.cors.CORSFilter cors.allowOrigin * cors.supportedMethods GET, POST, HEAD, PUT, DELETE cors.supportedHeaders Accept, Origin, X-Requested-With, Content-Type, Last-Modified cors.exposedHeaders Set-Cookie cors.supportsCredentials true CORS /*

从mvn仓库中下载两个jar包

java-property-utils-1.9.1.jarcors-filter-2.5.jar

并且把该两个文件拷贝到APIUSIC_HOME/lib目录内

JNDI配置 概念

java Naming and Directory Interface:java命名和目录接口

​ 主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。

一句话说:创建了一个目录,然后将创建的对象存进去,类似于在注册中心注册了一个东西,以后使用的时候,只需要在注册中心也就是目录中根据名字去查找,注册中心也就是目录会返回给你想要的。

​ JNDI提供了应用编程接口(application programming interface,API)和服务提供者接口(service provider interface,SPI)。这一点的真正含义是,要让应用与命名服务或目录服务交互,必须有这个服务的JNDI服务提供者,这正是JNDI SPI发挥作用的地方。服务提供者基本上是一组类,这些类为各种具体的命名和目录服务实现了JNDI接口—很像JDBC驱动为各种具体的数据库系统实现了JDBC接口一样。

​ 这样做的好处:比如更换数据库,只需要修改配置信息,名称不变,因此代码也不会变(也就是平常自己使用都是Class.forName,然后指定驱动类名,每次需要使用的时候都要加载并创建连接,如果更换了数据库,就需要修改代码中的驱动类名;而使用JNDI后,第一次加载数据库后根据配置文件信息创建连接,并将此连接放入目录中,以后不管在哪里使用只需要从目录中获取即可)

​ JNDI中的命名(Naming),就是将Java对象以某个名称的形式绑定(binding)到一个容器环境(Context)中,以后调用容器环境(Context)的查找(lookup)方法又可以查找出某个名称所绑定的Java对象。读者也许会感到奇怪:自己创建一个Java对象,将其绑定到JNDI容器环境中后又查询出来,这有什么意思?在真实的项目应用中,通常是由系统程序或框加程序先将资源对象绑定到JNDI环境中,以后在该系统或框架中运行的模块程序就可以从JNDI环境中查找这些资源对象了。例如,Tomcat服务器在启动时可以创建一个连接到某种数据库系统的数据源(DataSource)对象,并将该数据源(DataSource)对象绑定到JNDI环境中,以后在这个Tomcat服务器中运行的Servlet和JSP程序就可以从JNDI环境中查询出这个数据源(DataSource)对象进行使用,而不用关心数据源(DataSource)对象是如何创建出来的,这种方式极大地增强了系统的可维护性,当数据库系统的连接参数发生变更时,这只是Tomcat系统管理员一个人要关心的事情,而与所有的应用程序开发人员无关。

​ 上述行文的含义就是,我们在金蝶容器中配置数据库连接时,可以把DataSource对象注册进入JDNI命名中,就好像注入到容器中的组件,在使用时,只需要获得该组件的引用即可,而不关注DataSource是如何产生的。

应用场景

spring中连接数据库(不再使用Class.forName)

tomcat之类的应用服务器上配置的连接池

程序中不是使用Class.forName来获取链接的

而是使用Context lookup从池中获取有用的连接

在28所项目开发过程中,也是通过JDNI来统一数据库的访问。这样当以后需要更改数据库配置时,通过命名服务,代码不需要更改,只需要修改配置即可。

Tomcat和金蝶容器AAS都支持这种JDNDI配置。

金蝶容器配置步骤

金蝶容器、SpringBoot整合JNDI来获取数据源的配置步骤如下:

金蝶容器配置 Bean关联 金蝶容器web端

​ 基于浏览器的Web管理控制台,是内置在Apusic应用服务器之上的一个Web应用,能够通过Web管理控制台方便的对Apusic应用服务器进行各种管理配置工作。在访问Web管理控制台之前,首先要确保已经正确的启动了Apusic应用服务器。

按照以下步骤启动远程管理控制台:

在浏览器中输入以下URL:

http://hostname:port/admin

其中: hostname 指安装Apusic应用服务器软件的计算机的IP地址或主机名 port 是Apusic应用服务器的http端口、默认为6888

在登陆页面要键入在启动应用时输入的用户名和密码。金蝶容器的初始用户名和密码为

admin:Admin1234

注意:如果是自定义的域,在第一次部署程序时,会让用户输入用户名和密码。浏览器使用用户名和密码来可视化访问该容器。

日志查看

应用设置

​ 在28所项目进行的过程中,由于把项目制作成了ROOT.war,因此需要配置应用程序上下文,配置如下:

总结

​ 上述行文中,围绕金蝶容器,详细的总结了金蝶容器的目录结构、域创建、应用程序启停、日志查看等细节,并且在行文中把自己在使用金蝶容器过程中遇到的两个问题:跨域问题和JNDI整合进行了总结。详细的梳理了金蝶容器的使用,以期望能对后来使用金蝶容器的开发人员有所帮助。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3