Java 11 更新后 JBPM 服务器启动问题

问题描述 投票:0回答:1

Java 11 升级后,JBPM 服务器未启动。 [openjdk 11.0.18]

使用版本 [openjdk 11.0.4] 可以正常启动。

JBPM服务器版本:7.41.0-FINAL。我尝试使用更高版本的 JBPM,但问题仍然存在。服务器未启动。

这是错误的片段,

19:29:51,838 ERROR [org.jboss.errai.reflections.Reflections] (Thread-120) could not create Vfs.Dir from url. ignoring the exception and continuing: org.jboss.errai.reflections.ReflectionsException: could not create Dir using org.jboss.errai.common.metadata.JbossVFsTypeHandler from url vfs:/content/jbpm-casemgmt.war/WEB-INF/lib/kie-api-7.41.0.Final.jar/
        at deployment.jbpm-casemgmt.war//org.jboss.errai.reflections.vfs.Vfs.fromURL(Vfs.java:137)
        at deployment.jbpm-casemgmt.war//org.jboss.errai.reflections.vfs.Vfs.fromURL(Vfs.java:124)
        at deployment.jbpm-casemgmt.war//org.jboss.errai.reflections.Reflections.scan(Reflections.java:245)
        at deployment.jbpm-casemgmt.war//org.jboss.errai.common.metadata.MetaDataScanner.<init>(MetaDataScanner.java:120)
        at deployment.jbpm-casemgmt.war//org.jboss.errai.common.metadata.MetaDataScanner.createInstance(MetaDataScanner.java:97)
        at deployment.jbpm-casemgmt.war//org.jboss.errai.common.metadata.MetaDataScanner.createInstance(MetaDataScanner.java:84)
        at deployment.jbpm-casemgmt.war//org.jboss.errai.common.metadata.MetaDataScanner.createInstance(MetaDataScanner.java:80)
        at deployment.jbpm-casemgmt.war//org.jboss.errai.common.metadata.ScannerSingleton.lambda$static$0(ScannerSingleton.java:49)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.RuntimeException: java.nio.file.NoSuchFileException: /content
        at deployment.jbpm-casemgmt.war//org.jboss.errai.reflections.vfs.ZipDir.<init>(ZipDir.java:43)
        at deployment.jbpm-casemgmt.war//org.jboss.errai.reflections.vfs.ZipDir.<init>(ZipDir.java:33)
        at deployment.jbpm-casemgmt.war//org.jboss.errai.common.metadata.JbossVFsTypeHandler.createDir(JbossVFsTypeHandler.java:94)
        at deployment.jbpm-casemgmt.war//org.jboss.errai.reflections.vfs.Vfs.fromURL(Vfs.java:134)
        ... 9 more

其他错误日志,

19:30:08,811 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-8) MSC000001: Failed to start service jboss.deployment.unit."business-central.war".WeldStartService: org.jboss.msc.service.StartException in service jboss.deployment.unit."business-central.war".WeldStartService: Failed to start service
        at [email protected]//org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1731)
        at [email protected]//org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1559)
        at [email protected]//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
        at [email protected]//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1982)
        at [email protected]//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
        at [email protected]//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-000049: Unable to invoke public void org.guvnor.structure.backend.organizationalunit.config.SpaceConfigCleanUp.postConstruct() on org.guvnor.structure.backend.organizationalunit.config.SpaceConfigCleanUp@73c784f
        at [email protected]//org.jboss.weld.bootstrap.events.AbstractDeploymentContainerEvent.fire(AbstractDeploymentContainerEvent.java:38)
        at [email protected]//org.jboss.weld.bootstrap.events.AfterDeploymentValidationImpl.fire(AfterDeploymentValidationImpl.java:28)
        at [email protected]//org.jboss.weld.bootstrap.WeldStartup.validateBeans(WeldStartup.java:505)
        at [email protected]//org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:93)
        at [email protected]//org.jboss.as.weld.WeldStartService.start(WeldStartService.java:98)
        at [email protected]//org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1739)
        at [email protected]//org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1701)
        ... 6 more
jboss jbpm
1个回答
0
投票

这是 WildFly / JBoss 的已知问题:WFLY-16322

问题是 JAR 文件的新默认内容类型 application/java-archive(请参阅 JDK-8281809),它会触发 JBoss 返回

VirtualJarInputStream
而不是
VirtualFile
。结果是
reflections
库中的 ClassCastException

解决方法,直到修复程序适用于您的 WildFly / JBoss:

解决方法1

您可以将系统属性

content.types.user.table
设置为不包含新内容类型的属性文件:

-Dcontent.types.user.table=.../content-type.properties

您可以使用

content-type.properties
工具从
JDK_HOME/lib/modules
中提取默认的
JDK_HOME/bin/jimage
并将其用作模板。

解决方法2

构建您自己的

UrlType
,替换默认实现:

public class JbossVfsUrlType implements Vfs.UrlType {

    static {
        Vfs.getDefaultUrlTypes().remove(DefaultUrlTypes.jboss_vfs);
        Vfs.addDefaultURLTypes(new JbossVfsUrlType());
    }

    public Vfs.Dir createDir(final URL url) {
        try {
            final Object content = url.openConnection().getContent();
            final VirtualFile virtualFile;
            if (content instanceof VirtualFile) {
                virtualFile = (VirtualFile) content;
            } else { 
                // This is the difference to the default implementation:
                virtualFile = VFS.getChild(VFSUtils.toURI(url));
            }
            final File physicalFile = virtualFile.getPhysicalFile();
            final String name = virtualFile.getName();
            File file = new File(physicalFile.getParentFile(), name);
            if (!file.exists() || !file.canRead()) {
                file = physicalFile;
            }
            return file.isDirectory() ? new SystemDir(file) : new ZipDir(new JarFile(file));
        } catch (final IOException | URISyntaxException e) {
            throw new ReflectionsException("could not open url connection as VirtualFile [" + url + "]", e);
        }

    }

    public boolean matches(final URL url) {
        return "vfs".equals(url.getProtocol());
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.