在Payara Micro上成功运行后,Liquibase-CDI抛出WELD异常

时间:2018-06-12 14:21:09

标签: liquibase weld

我正在尝试使用liquibase-cdi在我的JEE8应用程序中实现liquibase。 Liquibase启动,成功运行所有迁移,但随后抛出以下异常,导致部署失败

Payara 5.182.RC5 例外:

16:05:10.263 [main] DEBUG liquibase.executor.jvm.JdbcExecutor - Release Database Lock
16:05:10.265 [main] DEBUG liquibase.executor.jvm.JdbcExecutor - UPDATE PUBLIC.DATABASECHANGELOGLOCK SET LOCKED = FALSE, LOCKEDBY = NULL, LOCKGRANTED = NULL WHERE ID = 1
16:05:10.266 [main] INFO liquibase.lockservice.StandardLockService - Successfully released change log lock
2018-06-12T16:05:10.286+0200] [] [SEVERE] [NCLS-CORE-00026] [javax.enterprise.system.core] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1528812310286] [levelValue: 1000] [[
  Exception during lifecycle processing
org.glassfish.deployment.common.DeploymentException: CDI deployment failure:WELD-000049: Unable to invoke public void liquibase.integration.cdi.CDILiquibase.onStartup() on liquibase.integration.cdi.CDILiquibase@5f0b2fe1 -- WELD-000049: Unable to invoke public void liquibase.integration.cdi.CDILiquibase.onStartup() on liquibase.integration.cdi.CDILiquibase@5f0b2fe1
    at org.jboss.weld.bootstrap.events.AbstractDeploymentContainerEvent.fire(AbstractDeploymentContainerEvent.java:38)
    at org.jboss.weld.bootstrap.events.AfterDeploymentValidationImpl.fire(AfterDeploymentValidationImpl.java:28)
    at org.jboss.weld.bootstrap.WeldStartup.validateBeans(WeldStartup.java:499)
    at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:93)
    at org.glassfish.weld.WeldDeployer.processApplicationLoaded(WeldDeployer.java:511)
    at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:422)
    at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:131)
    at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:333)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.prepare(ApplicationLifecycle.java:496)
    at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:540)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:549)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:545)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:360)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:544)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:575)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:567)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:360)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:566)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1475)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:111)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1857)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1733)
    at com.sun.enterprise.admin.cli.embeddable.DeployerImpl.deploy(DeployerImpl.java:133)
    at fish.payara.micro.impl.PayaraMicroImpl.deployAll(PayaraMicroImpl.java:1553)
    at fish.payara.micro.impl.PayaraMicroImpl.bootStrap(PayaraMicroImpl.java:1036)
    at fish.payara.micro.impl.PayaraMicroImpl.main(PayaraMicroImpl.java:199)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at fish.payara.micro.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
    at fish.payara.micro.boot.loader.Launcher.launch(Launcher.java:107)
    at fish.payara.micro.boot.loader.Launcher.launch(Launcher.java:70)
    at fish.payara.micro.boot.PayaraMicroLauncher.main(PayaraMicroLauncher.java:79)
    at fish.payara.micro.PayaraMicro.main(PayaraMicro.java:397)
]]

[2018-06-12T16:05:10.287+0200] [] [SEVERE] [] [javax.enterprise.system.core] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1528812310287] [levelValue: 1000] Exception while loading the app

[2018-06-12T16:05:10.293+0200] [] [SEVERE] [AS-WEB-GLUE-00192] [javax.enterprise.web] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1528812310293] [levelValue: 1000] Undeployment failed for context 

我的CDI课程:

@Dependent
public class LiquibaseCdiIntegration {

    @Resource
    private DataSource myDataSource;

    @Produces
    @LiquibaseType
    public CDILiquibaseConfig createConfig() {
        CDILiquibaseConfig config = new CDILiquibaseConfig();
        config.setChangeLog("liquibase/changelog.xml");
        return config;
    }

    @Produces
    @LiquibaseType
    public DataSource createDataSource() throws SQLException {
        return myDataSource;
    }

    @Produces
    @LiquibaseType
    public ResourceAccessor create() {
        return new ClassLoaderResourceAccessor(getClass().getClassLoader());
    }
}

来自我的pom.xml

    <dependency>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-core</artifactId>
        <version>3.6.1</version>
    </dependency>

    <dependency>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-cdi</artifactId>
        <version>3.6.1</version>
    </dependency>

由于我的changelog.xml成功运行,我不会将其粘贴到此处。

编辑:(可能相关)

尝试部署到 Payara Micro 5.181 时,会发生以下错误:

[2018-06-12T16:20:16.355+0200] [] [WARN] [] [org.jboss.weld.Validator] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1528813216355] [levelValue: 900] WELD-001473: javax.enterprise.inject.spi.Bean implementation liquibase.integration.cdi.CDIBootstrap$1@1798c749 declared a normal scope but does not implement javax.enterprise.inject.spi.PassivationCapable. It won't be possible to inject this bean into a bean with a passivating scope (@SessionScoped, @ConversationScoped). This can be fixed by assigning the Bean implementation a unique id by implementing the PassivationCapable interface.

No valid EE environment for injection of liquibase.integration.cdi.CDILiquibase
No valid EE environment for injection of de.ccsys.sns.monitoring.config.LiquibaseCdiIntegration
No valid EE environment for injection of de.ccsys.sns.monitoring.config.LiquibaseCdiIntegration
No valid EE environment for injection of de.ccsys.sns.monitoring.config.LiquibaseCdiIntegration
16:20:16.615 [main] INFO liquibase.integration.cdi.CDILiquibase - Booting Liquibase 3.6.1
[2018-06-12T16:20:16.736+0200] [] [WARNING] [NCLS-CORE-00069] [javax.enterprise.system.core] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1528813216736] [levelValue: 900] [[
  Exception while dispatching an event
org.glassfish.api.invocation.InvocationException
    at org.glassfish.api.invocation.InvocationManagerImpl.postInvoke(InvocationManagerImpl.java:178)
    at org.glassfish.weld.WeldDeployer.processApplicationLoaded(WeldDeployer.java:522)
    at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:426)
    at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:131)
    at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:333)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.prepare(ApplicationLifecycle.java:493)
    at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:512)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:549)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:545)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:360)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:544)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:575)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:567)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:360)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:566)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1475)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:111)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1857)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1733)
    at com.sun.enterprise.admin.cli.embeddable.DeployerImpl.deploy(DeployerImpl.java:134)
    at fish.payara.micro.impl.PayaraMicroImpl.deployAll(PayaraMicroImpl.java:1531)
    at fish.payara.micro.impl.PayaraMicroImpl.bootStrap(PayaraMicroImpl.java:1019)
    at fish.payara.micro.impl.PayaraMicroImpl.main(PayaraMicroImpl.java:201)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at fish.payara.micro.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
    at fish.payara.micro.boot.loader.Launcher.launch(Launcher.java:107)
    at fish.payara.micro.boot.loader.Launcher.launch(Launcher.java:70)
    at fish.payara.micro.boot.PayaraMicroLauncher.main(PayaraMicroLauncher.java:79)
    at fish.payara.micro.PayaraMicro.main(PayaraMicro.java:383)
]]

有人能指出我在正确的方向吗?

1 个答案:

答案 0 :(得分:0)

我也不得不处理这个问题。类似的配置Java EE8Payara 5.183,并使用Liquibase 3.6.1

问题与WELD (CDI)如何包装在数据库脚本执行期间Liquibase引发的异常有关。错误原因的显式消息未在日志中打印,但通常与liquibase变更集的指令中的错误有关。

在我的情况下,我正在添加一个主键,但是我忘记了放置约束名称。我修复该问题后,它开始起作用。
如果有人遇到相同的错误,请先检查变更集中的说明​​。

以上答案基于Liquibase-CDI fails to deploy after successful run,由该问题的所有者报告(已经提到他的问题已解决)。但是,对于有相同问题的其他人,有必要详细说明其原因和可能的解决方法。