War deployment - settings

Hi,

at least I got the war files created, following several information I found in the doc, forum and in the issue tracker.
But there are still some open questions:

Why don’t you create a step by step manual how to create war files like in Cuba?
And pls not that way, that you only refer to common Spring_boot documentations.

Where can I find a list of possible/needed property settings in the application.properties?

If creating war files, is there a similar thing like the build task in the Cuba version
in the build.gradle?
If yes, what about a little documentation how to do it?

Regards
Roland

Hi

Why not? One of the huge benefits of Jmix over CUBA is the spring boot ecosystem. If Jmix does not provide a dedicated how to guide, you as a user still have the possibility to see documentation / blog post from the SB ecosystem. This way you have a much higher chance of success, even if the documentation can still be improved on the Jmix side.

What do you consider needed property settings? You mean the ones that are required for running a simple app? This you can see if you create an empty project. These are the minimum amount of properties you need.

For all properties you can search the documentation for “properties”. They are grouped by sub component, e.g for the UI it is here: Backoffice UI Properties :: Jmix Documentation

Bye
Mario

1 Like

Hi Roland,

We’ve just added a section about building WAR files to the docs: Deployment :: Jmix Documentation

As for property settings, we are going to add an appendix with links to all sections describing application properties, so it will be easier to find all properties of a particular feature.

Regards,
Konstantin

2 Likes

Thx a lot, Konstantin.

Hi @krivopustov ,

I tried that.
Also followed spring documentation and additional infos I found on your JMIX sites…
But, it does not really work.
A lot of: waiting for changelog lock…
tried jmix.liquibase.enabled=false…

now I see log errors like this when deploying the war files (not for the _plain one)

because of the error messages, I only deployed the app.war and not the app_plain.war.
That works.
But, for dummies like me, it would be really helpful, if you put that into your doc too,
that only the App.war needs to be deployed :slightly_smiling_face:

15-Sep-2021 10:36:20.908 SEVERE [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployWAR Fehler beim deployen des Web-Applikationsarchivs [C:\Daten\apache-tomcat-9\webapps\dna.war]
java.lang.IllegalStateException: Error starting child
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:720)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:706)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:978)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1848)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:773)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:427)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1620)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:305)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1151)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1353)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1357)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1335)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/dna]]
at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
… 24 more
Caused by: org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean [HikariDataSource (HikariPool-4)] with key ‘dataSource’; nested exception is javax.management.InstanceAlreadyExistsException: com.zaxxer.hikari:name=dataSource,type=HikariDataSource
at org.springframework.jmx.export.MBeanExporter.registerBeanNameOrInstance(MBeanExporter.java:626)
at org.springframework.jmx.export.MBeanExporter.lambda$registerBeans$2(MBeanExporter.java:552)
at java.base/java.util.HashMap.forEach(HashMap.java:1336)
at org.springframework.jmx.export.MBeanExporter.registerBeans(MBeanExporter.java:552)
at org.springframework.jmx.export.MBeanExporter.afterSingletonsInstantiated(MBeanExporter.java:435)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:963)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:338)
at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:175)
at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:155)
at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:97)
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:174)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5166)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
… 25 more
Caused by: javax.management.InstanceAlreadyExistsException: com.zaxxer.hikari:name=dataSource,type=HikariDataSource
at java.management/com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:436)
at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerWithRepository(DefaultMBeanServerInterceptor.java:1855)
at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:955)
at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:890)
at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:320)
at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522)
at org.springframework.jmx.support.MBeanRegistrationSupport.doRegister(MBeanRegistrationSupport.java:138)
at org.springframework.jmx.export.MBeanExporter.registerBeanInstance(MBeanExporter.java:672)
at org.springframework.jmx.export.MBeanExporter.registerBeanNameOrInstance(MBeanExporter.java:616)
… 42 more

Probably you are running several apps on a single server.
Googling of the cause “Caused by: javax.management.InstanceAlreadyExistsException: com.zaxxer.hikari:name=dataSource,type=HikariDataSource” gives this result: java - javax.management.InstanceAlreadyExistsException: com.zaxxer.hikari:name=dataSource,type=HikariDataSource - Stack Overflow
Could you try what is suggested?

Hi Konstantin, thx…
the issue is solved when I only deploy the created app.war file and not also the created app_plain.war file.
After that it is working fine.
What I could not test yet, what happens, if I deploy app.war and i.e. another_app.war to the same Tomcat.

Hi Konstantin, Hello R.Walde

Lots of tries and I can’t do it.
Is Jmix 1.0 compatible with Apache Tomcat 10?

Hi,
we use Tomcat 9.
That works fine for us.
Roland

Hi,
Jmix 1.0 is NOT compatible with Tomcat 10. Use Tomcat 9 instead.
Tomcat 10 isn’t any better than 9 except it requires application to use “jakarta” package namespace.

Ok.Been using Tomcat 9 with Cuba without problems. Since recent CentOS crisis I’ve been playing with Rocky Linux, and installed Tomcat 10 just because. Many thanks. On Konstantin instructions Jmix war deploys without errors and seems to be running but http:///app-0.0.1-SNAPSHOT always give a 404 error.