最近想着OPN充值的OCI云资源都没怎么用,眼看着一年就快过去了,怎么着都得把资源用一用,才不至于让资本家薅去一条羊腿。于是又开始趁着上班闲余的时候做一些试验。
尝试在Mac上安装OCI的CLI,
bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"
却发现一直报curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused的错误。梯子架了全局模式貌似也不生效。
这讨厌的DNS污染问题。
打开https://www.ipaddress.com/,输入raw.githubusercontent.com,得到githubusercontent.com的真正IP地址。
修改/etc/hosts文件,增加以下几行:
199.232.96.133 raw.githubusercontent.com
199.232.96.133 user-images.githubusercontent.com
199.232.96.133 avatars2.githubusercontent.com
199.232.96.133 avatars1.githubusercontent.com
重新运行CLI安装命令,成功完成。
习惯于从Oracle的github站点下载dockerfile,修改后生成自己所需的镜像。但是最近有个项目,自己生成镜像文件后发现磁盘居然满了,连容器都没法跑起来。查了一下镜像占用的磁盘空间,一下子被数字吓到了。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
1c98d8816e19 About an hour ago 3.57GB
localhost/oracle/soasuite 12.2.1.3 078faf1a877d 7 days ago 13.5GB
oracle/fmw-infrastructure 12.2.1.3 d37d67bf7981 8 days ago 5.56GB
oracle/database 18.3.0-ee d9b807a62d9b 2 weeks ago 18GB
被动辄10几个G镜像,这容器怎么跑。但是为了项目可以快速测试,也只能想办法减少镜像的尺寸。看到github上有人吐槽这个问题,O记的工程师建议是去Oracle Container Registry上pull镜像。
去https://container-registry.oracle.com看了一眼,发现同样的image确实要小很多。于是从善如流,决定pull镜像下来用。
先login到站点
docker login container-registry.oracle.com
输入用户名密码后,运行pull镜像命令,连续试了几次都是报了镜像not found: does not exist or no pull access的错。
查了老半天原因,最后发现原来坑爹的O记是需要在Oracle Container Registry的页面上接受协议,才能有下载到镜像。
登录网站,在你需要下载的镜像页面点击协议,在弹出窗口接受协议,然后页面会显示当前用户协议的有效时间。再到系统里用命令pull镜像,正常下载。
好久没写东西,强迫自己水一个。最近有报道说黑客利用Weblogic Server的漏洞去挖矿,获得了至少611个门罗币(XMR),总价值达到了22.6万美元。第一反应是把自家的服务器打上补丁,打了patch后想看看有没有生效,才发现以前”java -weblogic.version”的方法不好使了。
放狗搜了一把,才知道从weblogic版本12.1.2.0.0后,因为使用opatch的方式统一管理补丁,所以查看PSU的方式也改变了。
依据Doc ID 1676652.1的方法如下:
cd $MW_HOME/OPatch
./opatch lsinventory
从Weblogic控制台可以看到当前的Weblogic版本:
Go to the Servers link
Customize this table
Check the WebLogic Version box and add it to the right side
Click Apply
把公司的内容管理系统全面迁移到Docker上重新部署,把备份的归档文件导入时发现报错没法导入,最后把自定义的元数据去掉后导入成功。但是原来利用文件类型的层级关系定义了很多子类型,都去掉的话很多查询的条件不能使用,积累的内容基本废了一半。
把WebCenter Content从11g升级到12c,用归档程序把原有的文件迁移到新版本,文件ID使用与原来相同的自动编号规则,当签入新文件时,系统总是报 “Content Server Request Failed Content item ‘TF_XXX’ was not successfully checked in. The content ID ‘TF_48509’ is not unique.”。
查看Content Server日志,错误信息如下:
An error has occurred. The stack trace below shows more information.
!csUserEventMessage,jeetqiu,139.159.32.66!$!csUnableToCheckIn,TF_007207!csCheckinIDNotUnique2,TF_007207
intradoc.common.ServiceException: !csUnableToCheckIn,TF_007207!csCheckinIDNotUnique2,TF_007207
*ScriptStack CHECKIN_NEW_SUB
3:doScriptableAction,dDocName=3:doSubService,dDocName=CHECKIN_NEW_SUB,dDocName=3:makeNewRevClass,dDocName=
at intradoc.server.ServiceRequestImplementor.buildServiceException(ServiceRequestImplementor.java:2259)…
第一时间上Oracle Support找相关的答案,Doc ID 446390.1和Doc ID 1320842.1都有相关的描述,不过都是修改counters表的RevClassID来达到目的。照着文章修改了RevClassID,但不知道是WebCenter Coneent 12C的机制更新还是什么原因,修改后并没有起作用。
后来无意中在一个链接看到Doc ID 1395583.1 How WebCenter Content 11g Uses Sequences to Uniquely Identify Content,从中知道IdcSeqRevClassID是管自动生成序号的,于是找到当前最大序号。
Select MAX(dDocName) from revisions
再修改IdcSeqRevClassID的起始值至最大序号+1,重新回到content系统,签入新文件,一切正常。
Oracle WebCenter Portal 12C创建新Portal时,走完创建向导,门户创建完成,然后报错。
Create Portal
Portal creation completed with errors.
createSpaceError
这算是最近折腾WCP比较坑的一个问题,花费了大量的时间与精力解决这个问题。开始时在Oracle Support找答案,发现在WCP 12C早期版本是有这样一个不能创建Portal的bugs,于是下载了所有能找到的系统补丁,用Opatch一一打上去,但是不能创建Portal的问题依旧;
只能回到原点,仔细去看Portal Server的Log。因为我们的门户是自己写的Portal Extension,看见有些Bean有报错,于是把矛头对准了自己的工程代码,好不容易把代码调得完全没有报错,发布到系统上无法创建Portal(在这里不得不吐槽一把O记,11g的Portal Framework方式没有了,现在改写portal只能用extension方式,程序的调试那可叫一个费时间,哥们有一半的工作时间是浪费在等待中)。
看来也不是代码的问题,又乖乖的回去一行行的看Log。还是最后无意在想到,在公司的环境里用Weblogic内置的ldap是没这个问题的,而客户的环境是配置了外部的LDAP做用户身份验证就不能创建门户了,看来问题的症结还是用户权限设置。重新配置了门户的权限设置,最后终于能成功创建门户了。
新部署的WebCenter Portal服务器,写了Portal Extension后发布到服务器,门户不能正常运行。找到问题修正后门户能访问,但是发现WebCenter Portal不断抛出一个java.lang.IllegalArgumentException: URI scheme is not “file”的错误,并记录到日志文件。
WebCenter Portal不断在日志生成级别为[Warning]的URI scheme is not “file”错误,完整消息如下:
[2016-09-23T11:56:53.293+08:00] [WC_Portal] [WARNING] [] [org.eclipse.persistence.jaxb.BeanValidationHelper] [tid: [ACTIVE].ExecuteThread: ’21’ for queue: ‘weblogic.kernel.Default (self-tuning)’] [userId: weblogic] [ecid: 74e955f6-ec4b-4aa5-8713-c12464770bc1-000002c8,0] [APP: webcenter] [partition-name: DOMAIN] [tenant-name: GLOBAL] [DSID: 0000LTL6BfOFw000jzwkno1Nt9jz000003] Error parsing validation.xml the async way[[
java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: URI scheme is not “file”
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at org.eclipse.persistence.jaxb.BeanValidationHelper.getConstraintsMap(BeanValidationHelper.java:139)
at org.eclipse.persistence.jaxb.BeanValidationHelper.isConstrained(BeanValidationHelper.java:120)
at org.eclipse.persistence.jaxb.JAXBBeanValidator.isConstrainedObject(JAXBBeanValidator.java:255)
at org.eclipse.persistence.jaxb.JAXBBeanValidator.shouldValidate(JAXBBeanValidator.java:206)
at org.eclipse.persistence.jaxb.JAXBMarshaller.validateAndTransformIfNeeded(JAXBMarshaller.java:587)
at org.eclipse.persistence.jaxb.JAXBMarshaller.marshal(JAXBMarshaller.java:481)
at org.glassfish.jersey.jaxb.internal.AbstractRootElementJaxbProvider.writeTo(AbstractRootElementJaxbProvider.java:201)
at org.glassfish.jersey.jaxb.internal.AbstractRootElementJaxbProvider.writeTo(AbstractRootElementJaxbProvider.java:180)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.invokeWriteTo(WriterInterceptorExecutor.java:265)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:250)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
at org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:106)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:86)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
at weblogic.jaxrs.server.internal.ChunkedOutputWriter.aroundWriteTo(ChunkedOutputWriter.java:65)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1130)
at org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:683)
at org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:424)
at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:414)
at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:312)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:292)
at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154)
at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:460)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:386)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:334)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:286)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:260)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:137)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:350)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at oracle.webcenter.content.integration.servlets.ContentServletFilter.doFilter(ContentServletFilter.java:168)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at oracle.webcenter.jaxrs.services.portal.controller.swagger.SwaggerApiOriginFilter.doFilter(SwaggerApiOriginFilter.java:44)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at oracle.adf.share.http.ServletADFFilter.doFilter(ServletADFFilter.java:77)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at oracle.webcenter.portal.context.impl.PortalRequestServletFilter$1.call(PortalRequestServletFilter.java:53)
at oracle.webcenter.portal.context.impl.PortalRequestServletFilter$1.call(PortalRequestServletFilter.java:48)
at oracle.webcenter.portal.context.impl.PortalRequestExecutorImpl.execute(PortalRequestExecutorImpl.java:47)
at oracle.webcenter.portal.context.impl.PortalRequestServletFilter.doFilter(PortalRequestServletFilter.java:47)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:141)
at java.security.AccessController.doPrivileged(Native Method)
at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)
at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:649)
at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:124)
at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:232)
at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:94)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:141)
at java.security.AccessController.doPrivileged(Native Method)
at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)
at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:649)
at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:124)
at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:232)
at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:94)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:224)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:141)
at java.security.AccessController.doPrivileged(Native Method)
at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)
at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:649)
at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:124)
at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:232)
at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:94)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:32)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3654)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3620)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326)
at weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:196)
at weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203)
at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71)
at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2423)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2280)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2258)
at weblogic.servlet.internal.ServletRequestImpl.runInternal(ServletRequestImpl.java:1626)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1586)
at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:270)
at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:348)
at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:333)
at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:54)
at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)
at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:617)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:397)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:346)
Caused by: java.lang.IllegalArgumentException: URI scheme is not “file”
at java.io.File.<init>(File.java:421)
at org.eclipse.persistence.jaxb.ValidationXMLReader.parseValidationXML(ValidationXMLReader.java:147)
at org.eclipse.persistence.jaxb.ValidationXMLReader.call(ValidationXMLReader.java:67)
at org.eclipse.persistence.jaxb.ValidationXMLReader.call(ValidationXMLReader.java:1)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
一开始以为是自己代码的问题,从头到尾Debug了N遍找问题,但是一发布到WebCenter Portal,问题依旧。这令人不得不怀疑是WebCenter Portal的问题了。Google了一把,发现原来是产品的一个bug,据说O记会在下一个版本修复。
虽说这个问题不影响使用,但是做为非典型的强迫症患者,看着这样的消息连写代码都受影响。不能完全解决只能把这个报错信息关掉了。
打开WebCenter Portal所在的服务器EM,找到Portal服务器,选择Log Configuration,在Log Level选项卡下找BeanValidationHelper,把Logging Level从WARNING改为SEVERE,保存更改,这下终于天下太平了。
坑爹的O记。
当想把WebCenter Space扩展程序发布至WebCenter Portal 12c时出现这个错误。
[Deployer:149140]The task cannot be processed further until the current edit session is activated.
The user is the current owner of the domain configuration edit lock.
Activate (or cancel) the edit session. The user can exit the deployer tool without affecting the task.
说成人话就是重启管理服务器或者在开发机器上把Default Domain删除了再重建即可解决。
使用Oracle Lab中的SitesDemo站点作为实验基础,配置短地址进行访问。并配置Apache服务器做为转发。
1.配置WebRoots
登录后台管理界面,进入Admin UI。选择“Admin”-“WebRoots”进行配置。如下图:
配置的root url为http://localhost:9080/cs/demo .注意最后的demo是任意配置的,可以起一个有意义的名称。在后面我们还需要使用到这个名字(配置到filter中)。
2.配置URL的模板
可以针对某些资产设置一个URL模板,这样可以自动生成对应的短地址URL,不用一个个的进行配置,减轻了工作量。
也可以不配置模板,自行在对应的资产上配置URL。
我们现在对Page建立一个URL模板,进入“Admin”-“Asset Types”-“Page”-“URL Pattern”,如下图进行配置:
Pattern中设定了对应的规则。
3.配置Filter
查找WebCenter site的CS应用安装目录,修改其中的web.xml。增加名称的filter。如下图:
增加了demo的配置。注意这里的名字必须和在第一步配置的最后一级目录名称相同。
4.重启WebCenter Site
5.对首页的地址进行配置
登录后台管理界面,进入Contributor UI。双击Site Tree中的SitesHome,查看其中的URL配置。如下图:
在上图中可以看到两个地址,下方的地址:http://localhost:9080/cs/demo/siteshome.html是根据前面配置的Pattern的自动生成的地址。
同时也可以另行配置自定义的地址,上方的地址:http://localhost:9080/cs/demo/home.html就是自行配置的地址。
一个Page可以配置多个地址。
6.页面访问
在地址栏输入:http://localhost:9080/cs/demo/home.html或http://localhost:9080/cs/demo/siteshome.html都可以对首页进行访问。如下图:
注意看一下访问的地址:
对应的页面中代码:
7.Apache配置
我们的目标是使用域名直接进行访问。所以使用了Apache进行转发。
配置情况如下:
增加一台虚拟主机,将原CS应用下的SitesDemo目录复制到apache的web目录下(SitesDemo中放置了css、images、js等静态信息)。
在Host中配置了www.vhost2.com指向到本机。
重启Apache后,访问地址:http://www.vhost2.com:90/home.html ,看到如下的结果:
注意看一下调用的地址:
实际上没有使用Apache中的静态文件。还是使用了cs应用下的文件。
8.调整Site引用静态文件的代码
修改代码,取消了<%=request.getContextPath()%>/ ,将调用地址直接变成相对地址。如下图:
保存后再次访问http://www.vhost2.com:90/home.html,页面正常打开。如下图:
查看下方访问的地址,已经开始访问Apache下的文件。
但是当我们访问http://localhost:9080/cs/demo/home.html时,发现发生问题。如下图:
还是由于地址的变化引起。
解决方法:
增加一个配置文件,配置URL是否需要包装。
编写一个公共的方法。当读取到配置文件中不要包装时,还是按照原来的方式获取访问地址;如果配置文件中要求包装,则按原有方式获取访问地址后,将domain的部分截取掉。这样的话在只要在管理环境和访问环境中配置不同的配置项就好。
继续试用WCC 12c,比起11g,WCC 12c最大的改进当属是采用了全新的Alta UI,当然了,其它的一些功能就只有慢慢试了。
和WCS一样,安装的前提是JDK 8,Oracle Database 12c,Weblogic Server 12c,具体的安装步骤可以参考这篇文章安装Oracle WebCenter Sites 12c (part 1) ,RCU的设置及安装可参考安装Oracle WebCenter Sites 12c (part 2) 。这篇文章从安装WCC开始。
1. 安装WCC软件
1.1 启动安装向导
输入命令,“c:\Program Files\Java\jdk1.8.0_65\bin\java.exe” -jar fmw_12.2.1.0.0_wccontent_generic.jar启动安装向导。
1.2 自动更新
跳过,点Next.
1.3 安装位置
选择Oracle Home位置,Next
1.4 先决条件检查
检查成功后,Next
1.5 安装汇总
点Install,开始安装WCC软件。
安装进行中
1.6 完成WCC软件安装
2. 配置WCC域
2.1 运行RCU创建所需的数据库表空间
2.2 创建域
转至 ORACLE_HOME/oracle_common/common/bin目录下,运行config.cmd,启动WCC应用域创建向导。
创建新Domain
选择域模板
Domain模式和JDK
数据源
数据库配置
输入信息后点Get RCU Configuration
Credentials
配置管理服务器
完成域配置及安装
2.3 启动管理服务器
利用命令startNodeManager.cmd和startWeblogic.cmd启动Node Manager和Admin Server,通过地址http://localhost:7001/console登入控制台。
启动UCM_Server1
确认管理服务器已处于Running状态。
2.4 访问WCC服务器,完成初始化配置
访问地址http://localhost:16200/cs,登录WCC,完成初始化设定
重新启动服务器,即可正常使用WCC了。
如果要使用Alta UI,必须启动WCCADF_server1,通过地址http://localhost:16225/wcc,即可体验New UI。
近期评论