I have been trying for three days to deploy a Spring application (jdk/jre 11) with IntelliJ on a dockerized Payara application server without success, since my requests are getting error 404 not found. So I guessed it was my application's fault to finally find out after hours of testing that no Spring application can run without this error.
Whether it is a simple rest api:
@RestController("/")
public class Controller {
@GetMapping("index")
public ResponseEntity<String> testValidationService() {
return new ResponseEntity<>("it works", HttpStatus.OK);
}
}
or it is a simple html page with a simple controller to redirect to it, I get error 404. It's really hard to believe that something so simple can not work.
Of course all of the above are working on localhosted Payara and of course I have tried all the solutions suggested in other threads without success. Please note that admin panel of dockerized Payara shows that the deployment is successful so the app is running. Please also note that other Java 11 applications (without Spring framework) are working fine) So the question is one and very simple:
How can I deploy a simple hello world spring application (jdk 11) (war packaging) (without 404 errors) in this version of dockerized payara payara/server-full:5.2022.2-jdk11?
You can easily reproduce my issue using the following Dockerfile:
FROM payara/server-full:5.2022.2-jdk11
EXPOSE 4848 8080 8181 9009
COPY target/springapp.war $DEPLOY_DIR
After built you can run it using the following command:
docker run --publish 8080:8080 --publish 4848:4848 [image_name]
EDIT
Logs after @dekkard's suggestions:
from the container:
[Entrypoint] running /opt/payara/scripts/init_1_generate_deploy_commands.sh
Adding deployment target /opt/payara/deployments/springapp.war to post boot commands
[Entrypoint] ignoring /opt/payara/scripts/init.d/*
Executing Payara Server with the following command line:
/usr/lib/jvm/zulu11-ca-amd64/bin/java
-cp
/opt/payara/appserver/glassfish/modules/glassfish.jar
-XX:+UnlockDiagnosticVMOptions
--add-opens=java.base/java.net=ALL-UNNAMED
--add-opens=java.base/sun.net.www.protocol.jrt=ALL-UNNAMED
--add-opens=java.management/sun.management=ALL-UNNAMED
--add-exports=java.base/jdk.internal.ref=ALL-UNNAMED
--add-opens=java.naming/javax.naming.spi=ALL-UNNAMED
--add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED
--add-opens=java.base/java.nio=ALL-UNNAMED
--add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
--add-opens=java.base/java.lang=ALL-UNNAMED
--add-opens=java.logging/java.util.logging=ALL-UNNAMED
--add-opens=java.base/sun.net.www.protocol.jar=ALL-UNNAMED
--add-opens=java.base/jdk.internal.loader=ALL-UNNAMED
--add-opens=java.base/java.util=ALL-UNNAMED
--add-opens=java.base/sun.nio.ch=ALL-UNNAMED
-XX:NewRatio=2
-XX:+UseContainerSupport
-XX:MaxRAMPercentage=70.0
-Xbootclasspath/a:/opt/payara/appserver/glassfish/lib/grizzly-npn-api.jar
-Xss512k
-server
-javaagent:/opt/payara/appserver/glassfish/lib/monitor/flashlight-agent.jar
-Djavax.xml.accessExternalSchema=all
-Djavax.net.ssl.trustStore=/opt/payara/appserver/glassfish/domains/domain1/config/cacerts.jks
-Djdk.tls.rejectClientInitiatedRenegotiation=true
-Djdk.corba.allowOutputStreamSubclass=true
-Dfelix.fileinstall.dir=/opt/payara/appserver/glassfish/modules/autostart/
-Dorg.glassfish.additionalOSGiBundlesToStart=org.apache.felix.shell,org.apache.felix.gogo.runtime,org.apache.felix.gogo.shell,org.apache.felix.gogo.command,org.apache.felix.shell.remote,org.apache.felix.fileinstall
-Dcom.sun.aas.installRoot=/opt/payara/appserver/glassfish
-Dfelix.fileinstall.poll=5000
-Djava.security.policy=/opt/payara/appserver/glassfish/domains/domain1/config/server.policy
-Dosgi.shell.telnet.maxconn=1
-Dfelix.fileinstall.bundles.startTransient=true
-Dcom.sun.enterprise.config.config_environment_factory_class=com.sun.enterprise.config.serverbeans.AppserverConfigEnvironmentFactory
-Dfelix.fileinstall.log.level=2
-Djavax.net.ssl.keyStore=/opt/payara/appserver/glassfish/domains/domain1/config/keystore.jks
-Djava.security.auth.login.config=/opt/payara/appserver/glassfish/domains/domain1/config/login.conf
-Dfelix.fileinstall.disableConfigSave=false
-Dorg.glassfish.grizzly.DEFAULT_MEMORY_MANAGER=org.glassfish.grizzly.memory.HeapMemoryManager
-Dfelix.fileinstall.bundles.new.start=true
-Dcom.sun.aas.instanceRoot=/opt/payara/appserver/glassfish/domains/domain1
-Dosgi.shell.telnet.port=6666
-Dgosh.args=--nointeractive
-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as
-Dorg.jboss.weld.serialization.beanIdentifierIndexOptimization=false
-Dosgi.shell.telnet.ip=127.0.0.1
-Djdk.attach.allowAttachSelf=true
-DANTLR_USE_DIRECT_CLASS_LOADING=true
-Djava.awt.headless=true
-Dcom.ctc.wstx.returnNullForDefaultNamespace=true
-Djdbc.drivers=org.h2.Driver
-Dorg.glassfish.grizzly.nio.DefaultSelectorHandler.force-selector-spin-detection=true
-Djava.library.path=/opt/payara/appserver/glassfish/lib:/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib
com.sun.enterprise.glassfish.bootstrap.ASMain
-prebootcommandfile
/opt/payara/config/pre-boot-commands-final.asadmin
-upgrade
false
-read-stdin
true
-postbootcommandfile
/opt/payara/config/post-boot-commands-final.asadmin
-domainname
domain1
-domaindir
/opt/payara/appserver/glassfish/domains/domain1
-asadmin-args
--host,,,localhost,,,--port,,,4848,,,--user,,,admin,,,--passwordfile,,,/opt/payara/passwordFile,,,--secure=false,,,--terse=false,,,--extraterse=false,,,--echo=false,,,--interactive=false,,,--autoname=false,,,start-domain,,,--verbose=false,,,--watchdog=false,,,--debug=false,,,--domaindir,,,/opt/payara/appserver/glassfish/domains,,,domain1
-instancename
server
-type
DAS
-verbose
false
-asadmin-classpath
/opt/payara/appserver/glassfish/lib/client/appserver-cli.jar
-debug
false
-asadmin-classname
com.sun.enterprise.admin.cli.AdminMain
-watchdog
false
Launching Payara Server on Felix platform
May 30, 2022 8:36:06 PM com.sun.enterprise.glassfish.bootstrap.osgi.BundleProvisioner createBundleProvisioner
INFO: Create bundle provisioner class = class com.sun.enterprise.glassfish.bootstrap.osgi.BundleProvisioner.
Registered com.sun.enterprise.glassfish.bootstrap.osgi.EmbeddedOSGiGlassFishRuntime@7a378326 in service registry.
Reading in commandments from /opt/payara/config/pre-boot-commands-final.asadmin
#!## LogManagerService.postConstruct : rootFolder=/opt/payara/appserver/glassfish
#!## LogManagerService.postConstruct : templateDir=/opt/payara/appserver/glassfish/lib/templates
#!## LogManagerService.postConstruct : src=/opt/payara/appserver/glassfish/lib/templates/logging.properties
#!## LogManagerService.postConstruct : dest=/opt/payara/appserver/glassfish/domains/domain1/config/logging.properties
[#|2022-05-30T20:36:11.341+0000|INFO|Payara 5.2022.2|javax.enterprise.logging|_ThreadID=28;_ThreadName=RunLevelControllerThread-1653942971189;_TimeMillis=1653942971341;_LevelValue=800;_MessageID=NCLS-LOGGING-00009;|
Running Payara Version: Payara Server 5.2022.2 #badassfish (build 306)|#]
[#|2022-05-30T20:36:11.350+0000|INFO|Payara 5.2022.2|javax.enterprise.logging|_ThreadID=28;_ThreadName=RunLevelControllerThread-1653942971189;_TimeMillis=1653942971350;_LevelValue=800;_MessageID=NCLS-LOGGING-00010;|
Server log file is using Formatter class: com.sun.enterprise.server.logging.ODLLogFormatter|#]
[#|2022-05-30T20:36:11.816+0000|INFO|Payara 5.2022.2|org.glassfish.ha.store.spi.BackingStoreFactoryRegistry|_ThreadID=30;_ThreadName=RunLevelControllerThread-1653942971199;_TimeMillis=1653942971816;_LevelValue=800;|
Registered fish.payara.ha.hazelcast.store.HazelcastBackingStoreFactoryProxy for persistence-type = hazelcast in BackingStoreFactoryRegistry|#]
[#|2022-05-30T20:36:14.412+0000|INFO|Payara 5.2022.2|fish.payara.nucleus.hazelcast.HazelcastCore|_ThreadID=28;_ThreadName=RunLevelControllerThread-1653942971189;_TimeMillis=1653942974412;_LevelValue=800;|
Hazelcast Instance Bound to JNDI at payara/Hazelcast|#]
[#|2022-05-30T20:36:14.413+0000|INFO|Payara 5.2022.2|fish.payara.nucleus.hazelcast.HazelcastCore|_ThreadID=28;_ThreadName=RunLevelControllerThread-1653942971189;_TimeMillis=1653942974413;_LevelValue=800;|
JSR107 Caching Provider Bound to JNDI at payara/CachingProvider|#]
from payara:
[2022-05-30T20:36:06.293+0000] [] [INFO] [NCLS-GFLAUNCHER-00005] [javax.enterprise.launcher] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1653942966293] [levelValue: 800] [[
JVM invocation command line:
/usr/lib/jvm/zulu11-ca-amd64/bin/java
-cp
/opt/payara/appserver/glassfish/modules/glassfish.jar
-XX:+UnlockDiagnosticVMOptions
--add-opens=java.base/java.net=ALL-UNNAMED
--add-opens=java.base/sun.net.www.protocol.jrt=ALL-UNNAMED
--add-opens=java.management/sun.management=ALL-UNNAMED
--add-exports=java.base/jdk.internal.ref=ALL-UNNAMED
--add-opens=java.naming/javax.naming.spi=ALL-UNNAMED
--add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED
--add-opens=java.base/java.nio=ALL-UNNAMED
--add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
--add-opens=java.base/java.lang=ALL-UNNAMED
--add-opens=java.logging/java.util.logging=ALL-UNNAMED
--add-opens=java.base/sun.net.www.protocol.jar=ALL-UNNAMED
--add-opens=java.base/jdk.internal.loader=ALL-UNNAMED
--add-opens=java.base/java.util=ALL-UNNAMED
--add-opens=java.base/sun.nio.ch=ALL-UNNAMED
-XX:NewRatio=2
-XX:+UseContainerSupport
-XX:MaxRAMPercentage=70.0
-Xbootclasspath/a:/opt/payara/appserver/glassfish/lib/grizzly-npn-api.jar
-Xss512k
-server
-javaagent:/opt/payara/appserver/glassfish/lib/monitor/flashlight-agent.jar
-Djavax.xml.accessExternalSchema=all
-Djavax.net.ssl.trustStore=/opt/payara/appserver/glassfish/domains/domain1/config/cacerts.jks
-Djdk.tls.rejectClientInitiatedRenegotiation=true
-Djdk.corba.allowOutputStreamSubclass=true
-Dfelix.fileinstall.dir=/opt/payara/appserver/glassfish/modules/autostart/
-Dorg.glassfish.additionalOSGiBundlesToStart=org.apache.felix.shell,org.apache.felix.gogo.runtime,org.apache.felix.gogo.shell,org.apache.felix.gogo.command,org.apache.felix.shell.remote,org.apache.felix.fileinstall
-Dcom.sun.aas.installRoot=/opt/payara/appserver/glassfish
-Dfelix.fileinstall.poll=5000
-Djava.security.policy=/opt/payara/appserver/glassfish/domains/domain1/config/server.policy
-Dosgi.shell.telnet.maxconn=1
-Dfelix.fileinstall.bundles.startTransient=true
-Dcom.sun.enterprise.config.config_environment_factory_class=com.sun.enterprise.config.serverbeans.AppserverConfigEnvironmentFactory
-Dfelix.fileinstall.log.level=2
-Djavax.net.ssl.keyStore=/opt/payara/appserver/glassfish/domains/domain1/config/keystore.jks
-Djava.security.auth.login.config=/opt/payara/appserver/glassfish/domains/domain1/config/login.conf
-Dfelix.fileinstall.disableConfigSave=false
-Dorg.glassfish.grizzly.DEFAULT_MEMORY_MANAGER=org.glassfish.grizzly.memory.HeapMemoryManager
-Dfelix.fileinstall.bundles.new.start=true
-Dcom.sun.aas.instanceRoot=/opt/payara/appserver/glassfish/domains/domain1
-Dosgi.shell.telnet.port=6666
-Dgosh.args=--nointeractive
-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as
-Dorg.jboss.weld.serialization.beanIdentifierIndexOptimization=false
-Dosgi.shell.telnet.ip=127.0.0.1
-Djdk.attach.allowAttachSelf=true
-DANTLR_USE_DIRECT_CLASS_LOADING=true
-Djava.awt.headless=true
-Dcom.ctc.wstx.returnNullForDefaultNamespace=true
-Djdbc.drivers=org.h2.Driver
-Dorg.glassfish.grizzly.nio.DefaultSelectorHandler.force-selector-spin-detection=true
-Djava.library.path=/opt/payara/appserver/glassfish/lib:/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib
com.sun.enterprise.glassfish.bootstrap.ASMain
-prebootcommandfile
/opt/payara/config/pre-boot-commands-final.asadmin
-upgrade
false
-read-stdin
true
-postbootcommandfile
/opt/payara/config/post-boot-commands-final.asadmin
-domainname
domain1
-domaindir
/opt/payara/appserver/glassfish/domains/domain1
-asadmin-args
--host,,,localhost,,,--port,,,4848,,,--user,,,admin,,,--passwordfile,,,/opt/payara/passwordFile,,,--secure=false,,,--terse=false,,,--extraterse=false,,,--echo=false,,,--interactive=false,,,--autoname=false,,,start-domain,,,--verbose=false,,,--watchdog=false,,,--debug=false,,,--domaindir,,,/opt/payara/appserver/glassfish/domains,,,domain1
-instancename
server
-type
DAS
-verbose
false
-asadmin-classpath
/opt/payara/appserver/glassfish/lib/client/appserver-cli.jar
-debug
false
-asadmin-classname
com.sun.enterprise.admin.cli.AdminMain
-watchdog
false]]
proof of successful deployment:
