When I execute liquibase in JBoss I get the following WARN but everything is updated correctly:
12:32:01,499 WARN [org.jboss.modules] (ServerService Thread Pool -- 49) Failed to define class liquibase.sdk.watch.WatchCommand$DynamicContentHandler in Module "deployment.WebStories.war:main" from Service Module Loader: java.lang.LinkageError: Failed to link liquibase/sdk/watch/WatchCommand$DynamicContentHandler (Module "deployment.WebStories.war:main" from Service Module Loader)
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:407) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:254) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:73) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.Module.loadModuleClass(Module.java:518) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:182) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120) [jboss-modules.jar:1.2.0.CR1]
at liquibase.servicelocator.DefaultPackageScanClassResolver.loadClass(DefaultPackageScanClassResolver.java:358) [liquibase-core-3.2.2.jar:]
at liquibase.servicelocator.DefaultPackageScanClassResolver.loadImplementationsInJar(DefaultPackageScanClassResolver.java:406) [liquibase-core-3.2.2.jar:]
at liquibase.servicelocator.DefaultPackageScanClassResolver.findAllClasses(DefaultPackageScanClassResolver.java:226) [liquibase-core-3.2.2.jar:]
at liquibase.servicelocator.DefaultPackageScanClassResolver.find(DefaultPackageScanClassResolver.java:116) [liquibase-core-3.2.2.jar:]
at liquibase.servicelocator.DefaultPackageScanClassResolver.findImplementations(DefaultPackageScanClassResolver.java:84) [liquibase-core-3.2.2.jar:]
at liquibase.servicelocator.ServiceLocator.findClassesImpl(ServiceLocator.java:202) [liquibase-core-3.2.2.jar:]
at liquibase.servicelocator.ServiceLocator.findClasses(ServiceLocator.java:177) [liquibase-core-3.2.2.jar:]
at liquibase.database.DatabaseFactory.<init>(DatabaseFactory.java:25) [liquibase-core-3.2.2.jar:]
at liquibase.database.DatabaseFactory.getInstance(DatabaseFactory.java:40) [liquibase-core-3.2.2.jar:]
at liquibase.integration.servlet.LiquibaseServletListener.executeUpdate(LiquibaseServletListener.java:211) [liquibase-core-3.2.2.jar:]
at liquibase.integration.servlet.LiquibaseServletListener.contextInitialized(LiquibaseServletListener.java:106) [liquibase-core-3.2.2.jar:]
at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3339) [jbossweb-7.2.0.Final.jar:7.2.0.Final]
at org.apache.catalina.core.StandardContext.start(StandardContext.java:3777) [jbossweb-7.2.0.Final.jar:7.2.0.Final]
at org.jboss.as.web.deployment.WebDeploymentService.doStart(WebDeploymentService.java:156) [jboss-as-web-7.2.0.Alpha1-redhat-4.jar:7.2.0.Alpha1-redhat-4]
at org.jboss.as.web.deployment.WebDeploymentService.access$000(WebDeploymentService.java:60) [jboss-as-web-7.2.0.Alpha1-redhat-4.jar:7.2.0.Alpha1-redhat-4]
at org.jboss.as.web.deployment.WebDeploymentService$1.run(WebDeploymentService.java:93) [jboss-as-web-7.2.0.Alpha1-redhat-4.jar:7.2.0.Alpha1-redhat-4]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [rt.jar:1.7.0_11]
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) [rt.jar:1.7.0_11]
at java.util.concurrent.FutureTask.run(FutureTask.java:166) [rt.jar:1.7.0_11]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_11]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_11]
at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_11]
at org.jboss.threads.JBossThread.run(JBossThread.java:122)
Caused by: java.lang.NoClassDefFoundError: org/eclipse/jetty/server/handler/AbstractHandler
at java.lang.ClassLoader.defineClass1(Native Method) [rt.jar:1.7.0_11]
at java.lang.ClassLoader.defineClass(ClassLoader.java:791) [rt.jar:1.7.0_11]
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) [rt.jar:1.7.0_11]
at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:338) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:402) [jboss-modules.jar:1.2.0.CR1]
... 31 more
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.server.handler.AbstractHandler from [Module "deployment.WebStories.war:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120) [jboss-modules.jar:1.2.0.CR1]
... 36 more
12:32:01,532 WARN [org.jboss.modules] (ServerService Thread Pool -- 49) Failed to define class liquibase.sdk.supplier.database.AllDatabaseTypes in Module "deployment.WebStories.war:main" from Service Module Loader: java.lang.LinkageError: Failed to link liquibase/sdk/supplier/database/AllDatabaseTypes (Module "deployment.WebStories.war:main" from Service Module Loader)
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:407) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:254) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:73) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.Module.loadModuleClass(Module.java:518) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:182) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120) [jboss-modules.jar:1.2.0.CR1]
at liquibase.servicelocator.DefaultPackageScanClassResolver.loadClass(DefaultPackageScanClassResolver.java:358) [liquibase-core-3.2.2.jar:]
at liquibase.servicelocator.DefaultPackageScanClassResolver.loadImplementationsInJar(DefaultPackageScanClassResolver.java:406) [liquibase-core-3.2.2.jar:]
at liquibase.servicelocator.DefaultPackageScanClassResolver.findAllClasses(DefaultPackageScanClassResolver.java:226) [liquibase-core-3.2.2.jar:]
at liquibase.servicelocator.DefaultPackageScanClassResolver.find(DefaultPackageScanClassResolver.java:116) [liquibase-core-3.2.2.jar:]
at liquibase.servicelocator.DefaultPackageScanClassResolver.findImplementations(DefaultPackageScanClassResolver.java:84) [liquibase-core-3.2.2.jar:]
at liquibase.servicelocator.ServiceLocator.findClassesImpl(ServiceLocator.java:202) [liquibase-core-3.2.2.jar:]
at liquibase.servicelocator.ServiceLocator.findClasses(ServiceLocator.java:177) [liquibase-core-3.2.2.jar:]
at liquibase.database.DatabaseFactory.<init>(DatabaseFactory.java:25) [liquibase-core-3.2.2.jar:]
at liquibase.database.DatabaseFactory.getInstance(DatabaseFactory.java:40) [liquibase-core-3.2.2.jar:]
at liquibase.integration.servlet.LiquibaseServletListener.executeUpdate(LiquibaseServletListener.java:211) [liquibase-core-3.2.2.jar:]
at liquibase.integration.servlet.LiquibaseServletListener.contextInitialized(LiquibaseServletListener.java:106) [liquibase-core-3.2.2.jar:]
at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3339) [jbossweb-7.2.0.Final.jar:7.2.0.Final]
at org.apache.catalina.core.StandardContext.start(StandardContext.java:3777) [jbossweb-7.2.0.Final.jar:7.2.0.Final]
at org.jboss.as.web.deployment.WebDeploymentService.doStart(WebDeploymentService.java:156) [jboss-as-web-7.2.0.Alpha1-redhat-4.jar:7.2.0.Alpha1-redhat-4]
at org.jboss.as.web.deployment.WebDeploymentService.access$000(WebDeploymentService.java:60) [jboss-as-web-7.2.0.Alpha1-redhat-4.jar:7.2.0.Alpha1-redhat-4]
at org.jboss.as.web.deployment.WebDeploymentService$1.run(WebDeploymentService.java:93) [jboss-as-web-7.2.0.Alpha1-redhat-4.jar:7.2.0.Alpha1-redhat-4]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [rt.jar:1.7.0_11]
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) [rt.jar:1.7.0_11]
at java.util.concurrent.FutureTask.run(FutureTask.java:166) [rt.jar:1.7.0_11]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_11]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_11]
at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_11]
at org.jboss.threads.JBossThread.run(JBossThread.java:122)
Caused by: java.lang.NoClassDefFoundError: org/junit/experimental/theories/ParameterSupplier
at java.lang.ClassLoader.defineClass1(Native Method) [rt.jar:1.7.0_11]
at java.lang.ClassLoader.defineClass(ClassLoader.java:791) [rt.jar:1.7.0_11]
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) [rt.jar:1.7.0_11]
at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:338) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:402) [jboss-modules.jar:1.2.0.CR1]
... 31 more
Caused by: java.lang.ClassNotFoundException: org.junit.experimental.theories.ParameterSupplier from [Module "deployment.WebStories.war:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120) [jboss-modules.jar:1.2.0.CR1]
... 36 more
12:32:01,546 WARN [org.jboss.modules] (ServerService Thread Pool -- 49) Failed to define class liquibase.sdk.supplier.database.AllDatabases in Module "deployment.WebStories.war:main" from Service Module Loader: java.lang.LinkageError: Failed to link liquibase/sdk/supplier/database/AllDatabases (Module "deployment.WebStories.war:main" from Service Module Loader)
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:407) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:254) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:73) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.Module.loadModuleClass(Module.java:518) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:182) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120) [jboss-modules.jar:1.2.0.CR1]
at liquibase.servicelocator.DefaultPackageScanClassResolver.loadClass(DefaultPackageScanClassResolver.java:358) [liquibase-core-3.2.2.jar:]
at liquibase.servicelocator.DefaultPackageScanClassResolver.loadImplementationsInJar(DefaultPackageScanClassResolver.java:406) [liquibase-core-3.2.2.jar:]
at liquibase.servicelocator.DefaultPackageScanClassResolver.findAllClasses(DefaultPackageScanClassResolver.java:226) [liquibase-core-3.2.2.jar:]
at liquibase.servicelocator.DefaultPackageScanClassResolver.find(DefaultPackageScanClassResolver.java:116) [liquibase-core-3.2.2.jar:]
at liquibase.servicelocator.DefaultPackageScanClassResolver.findImplementations(DefaultPackageScanClassResolver.java:84) [liquibase-core-3.2.2.jar:]
at liquibase.servicelocator.ServiceLocator.findClassesImpl(ServiceLocator.java:202) [liquibase-core-3.2.2.jar:]
at liquibase.servicelocator.ServiceLocator.findClasses(ServiceLocator.java:177) [liquibase-core-3.2.2.jar:]
at liquibase.database.DatabaseFactory.<init>(DatabaseFactory.java:25) [liquibase-core-3.2.2.jar:]
at liquibase.database.DatabaseFactory.getInstance(DatabaseFactory.java:40) [liquibase-core-3.2.2.jar:]
at liquibase.integration.servlet.LiquibaseServletListener.executeUpdate(LiquibaseServletListener.java:211) [liquibase-core-3.2.2.jar:]
at liquibase.integration.servlet.LiquibaseServletListener.contextInitialized(LiquibaseServletListener.java:106) [liquibase-core-3.2.2.jar:]
at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3339) [jbossweb-7.2.0.Final.jar:7.2.0.Final]
at org.apache.catalina.core.StandardContext.start(StandardContext.java:3777) [jbossweb-7.2.0.Final.jar:7.2.0.Final]
at org.jboss.as.web.deployment.WebDeploymentService.doStart(WebDeploymentService.java:156) [jboss-as-web-7.2.0.Alpha1-redhat-4.jar:7.2.0.Alpha1-redhat-4]
at org.jboss.as.web.deployment.WebDeploymentService.access$000(WebDeploymentService.java:60) [jboss-as-web-7.2.0.Alpha1-redhat-4.jar:7.2.0.Alpha1-redhat-4]
at org.jboss.as.web.deployment.WebDeploymentService$1.run(WebDeploymentService.java:93) [jboss-as-web-7.2.0.Alpha1-redhat-4.jar:7.2.0.Alpha1-redhat-4]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [rt.jar:1.7.0_11]
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) [rt.jar:1.7.0_11]
at java.util.concurrent.FutureTask.run(FutureTask.java:166) [rt.jar:1.7.0_11]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_11]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_11]
at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_11]
at org.jboss.threads.JBossThread.run(JBossThread.java:122)
Caused by: java.lang.NoClassDefFoundError: org/junit/experimental/theories/ParameterSupplier
at java.lang.ClassLoader.defineClass1(Native Method) [rt.jar:1.7.0_11]
at java.lang.ClassLoader.defineClass(ClassLoader.java:791) [rt.jar:1.7.0_11]
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) [rt.jar:1.7.0_11]
at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:338) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:402) [jboss-modules.jar:1.2.0.CR1]
... 31 more
Caused by: java.lang.ClassNotFoundException: org.junit.experimental.theories.ParameterSupplier from [Module "deployment.WebStories.war:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398) [jboss-modules.jar:1.2.0.CR1]
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120) [jboss-modules.jar:1.2.0.CR1]
... 36 more
12:32:01,652 ERROR [stderr] (ServerService Thread Pool -- 49) INFO 23/10/14 12:32: liquibase: Successfully acquired change log lock
12:32:02,336 ERROR [stderr] (ServerService Thread Pool -- 49) INFO 23/10/14 12:32: liquibase: Reading from public.databasechangelog
12:32:02,383 ERROR [stderr] (ServerService Thread Pool -- 49) INFO 23/10/14 12:32: liquibase: Successfully released change log lock
Any stacktrace in the server startup is considered an error, despite it is marked as a WARN, INFO or NOTHING.
Why does that happen?
What can I do to remove this stacktrace from the server startup?
Liquibase internally scans your classpath using your classloader to find classes that may be Liquibase extensions. Part of that scanning is hitting a few classes that are bundled with the liquibase jar but are not part of the normal liquibase update
process.
In particular, it is checking code that displays the database and liquibase state that can be helpful in demos and troubleshooting and other code that can be used for testing extensions.
These non-standard use classes reference additional dependencies such as jetty and junit and which are normally not available in production environments and so Liquibase expects some ClassNotFoundExceptions and DEBUG-level logs them, moves on, and updates correctly as you are seeing.
In your case, it appears that the JBoss classloader has an additional feature to log at WARN level any ClassNotFoundExceptions it runs into throwing it up the chain to the point that Liquibase ignores it.
A future release of Liquibase will better split between the "tools" codebase and the "standard" codebase, but for now your options would be:
I have used this class, which very probably will not work on jetty, but on all other servers (tomcat, jboss/wildfly, weblogic, websphere, glassfish, tomee, ...) I've tested it on tomcat and wildfly.
package org.eclipse.jetty.server.handler;
/**
* Workaround for this issues in liquibase.
* http://stackoverflow.com/questions/26530677/why-failed-to-define-class-warn-from-server-startup.
* https://liquibase.jira.com/browse/CORE-2024.
*
* @author cilap
*
*/
public class AbstractHandler {
/**
* Trace to logfile the workaround.
*/
public AbstractHandler() {
System.err.println("Workaround for http://stackoverflow.com/questions /26530677/why-failed-to-define-class-warn-from-server-startup and "
+ "https://liquibase.jira.com/browse/CORE-2024");
System.err.println("please remove this from the repository as soon as the bug is fixed on liquibase.");
}
}
This is not nice but it works.
Edit1:
The Classloader is searching for the Class org.eclipse.jetty.server.handler.AbstractHandler
Since we are not on the Jetty, the class cannot be found by the classloader.
One option would be to add the jetty jar file into the tomcat or the wildfly, BUT this will very probably cause issues on tomcat/wildfly, since they implement also expected interfaces and classes which both, Jetty and Wildfly/tomcat provide. To avoid this - until it is fixed by Liquibase - you have to provide the Classloader a dummy implementation of AbstractHandler. So the classloader is happy and finds the AbstractHandler and the WARN message is gone.
As said this is not nice but is a workaround to get rid of the odd messages in the logfile and console. If we are lucky, liquibase may incorporate a fix for this minor bug in 3.4 or maybe in 4.0.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With