1. 概述编辑
FineBI支持的Wildfly版本及对应的JDK版本:
Wildfly版本 | JDK版本 |
---|---|
Wildfly8~18 | JDK1.8 |
Jboss服务器从版本7以后,就改名为wildfly。本章我们以Wildfly9为例,介绍在Linux系统下进行的服务器部署,其他版本的部署方式与以下基本一致,wildfly8的部署方式参考Wildfly(Jboss)8服务器部署 。
注:部署前请先确认服务器环境的JDK版本,默认下载的FineBI安装包为JDK1.8版本,若与环境不符,需确保环境为JDK1.8版本,否则无法部署成功并使用。
2. 部署步骤编辑
2.1 前置步骤
下载jackson.tar ,上传至服务器后解压,将解压出来的jackson-annotations、jackson-core、jackson-databind三个文件夹拷贝进Wildfly目录 ../wildfly-9.0.0.Final/modules/system/layers/base/com/fasterxml/jackson/core中,替换原先的jackson-annotations、jackson-core、jackson-databind三个文件夹,且文件夹下子文件也一并覆盖替换。如下图:
2.2 部署步骤
1)下载 jersey-server-1.19.4.jar 将其拷贝进FineBI安装目录 %FineBI%/webapps/webroot/WEB-INF/lib 中
2)将服务器jdk环境中的 tools.jar 文件拷贝进FineBI安装目录 %FineBI%/webapps/webroot/WEB-INF/lib 中,如下图:
3)将FineBI工程文件夹webroot(%FineBI%/webapps/下)移动至wildfly目录 ../wildfly-9.0.0.Final/standalone/deployments 下,并将其重命名为webroot.war,如下图:
4)在 deployments 目录下新建一个文件,命名为 webroot.war.dodeploy,如下图:
5)进入wildfly目录 ../wildfly-9.0.0.Final/modules/system/layers/base/sun/jdk/main/ 下,编辑 module.xml 文件,在 <paths></paths>父标签末尾加入 <path name="com/sun/management"/>保存,如下图:
6)进入wildfly目录 ../wildfly-9.0.0.Final/bin,执行 ./standalone.sh命令启动wildfly会自动进行部署。
注:若之前部署失败,请先删除../wildfly-*.0.0.Final/standalone/目录下的/data、/tmp文件,再重新部署。
2.3 访问工程
部署完成后,在浏览器中输入http://虚拟机ip:8080/webroot/decision,可成功看到访问界面,证明部署成功。8080端口可根据需要进行修改。
2.4 服务器宕机风险参数设置
FineBI 对服务器有一定的配置要求,当服务器不能满足 BI 使用时,会出现宕机风险,相关参数配置详情参见:FineBI宕机风险参数说明。
3. 注意事项编辑
3.1 工程缺少类文件
1)问题描述
按照文档上述步骤部署 BI 工程,启动失败,有如下日志抛错信息:
2020-03-13 09:06:00,209 WARN [org.jboss.modules] (MSC service thread 1-6) Failed to define class com.sun.jersey.api.core.DefaultResourceConfig in Module "deployment.webroot.war:main" from Service Module Loader: java.lang.LinkageError: Failed to link com/sun/jersey/api/core/ResourceConfig (Module "deployment.webroot.war:main" from Service Module Loader)
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:437)
at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:269)
at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:77)
at org.jboss.modules.Module.loadModuleClass(Module.java:560)
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:197)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:455)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:404)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:385)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:130)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:353)
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:432)
at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:269)
at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:77)
at org.jboss.modules.Module.loadModuleClass(Module.java:560)
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:197)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:455)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:404)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:385)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:130)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:353)
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:432)
at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:269)
at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:77)
at org.jboss.modules.Module.loadModuleClass(Module.java:560)
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:197)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:455)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:404)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:385)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:130)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:353)
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:432)
at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:269)
at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:77)
at org.jboss.modules.Module.loadModuleClass(Module.java:560)
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:197)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:455)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:404)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:385)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:130)
at org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.scan(JaxrsScanningProcessor.java:201)
at org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.deploy(JaxrsScanningProcessor.java:105)
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:156)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NoClassDefFoundError: com/sun/jersey/core/util/FeaturesAndProperties
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:353)
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:432)
... 52 more
Caused by: java.lang.ClassNotFoundException: com.sun.jersey.core.util.FeaturesAndProperties from [Module "deployment.webroot.war:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:205)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:455)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:404)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:385)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:130)
... 56 more
2)原因分析
从日志信息中可以分析出是由于找不到对应的类导致的,缺少的类文件来自另一个 JAR 包 jersey-core-1.19.4.jar。
3)解决方案
下载 jersey-core-1.19.4.jar ,将 JAR 包放到%FineBI%/webapps/webroot/WEB-INF/lib目录下,重启服务器即可。