The document discusses issues with traditional Java application servers and argues that they are outdated for modern applications. It notes that application servers do not fully isolate applications, that dependencies on specific application server versions and libraries hinder portability, and that their deployment and monitoring tools do not integrate well with standard operating system tools. It suggests that modern applications would be better served by packaging all dependencies into executable JAR files and providing their own lightweight infrastructure instead of relying on application servers.
3. Multiple Applications
App 1 App 2 App 3 App 4
• Isolation
• ClassLoader
• Can lead to non-trivial problems
Eberhard Wolff - @ewolff
App Server
4. Eberhard Wolff - @ewolff
Isolation
• ClassLoader is not enough
• CPU?
• Memory?
• Filesystems?
• Applications are not truly isolated
• This isolation is what Operating
Systems do
5. What It Is More Like…
App 1
App Server
App 1
Eberhard Wolff - @ewolff
App 1
App Server
App 1
App Server
App Server
App 1
App Server
App 1
App Server
Cluster
6. Infrastructure: Net / Threads
• Support i.e. for HTTP and thread
pooling
Eberhard Wolff - @ewolff
• Connection pooling
• Can be done inside the application
• Embedded servers (Tomcat, Jetty)
7. Infrastructure: Libraries
• EJB, CDI, JPA, JSF...
• Version tied to App Server version
• App depends on Application Server
• New libraries can’t be used until new
App Server in production
• Number of commercially supported
Java EE 7 servers?
• Zero
Eberhard Wolff - @ewolff
8. Infrastructure: Libraries
• Usually not every need covered
• …so additional libraries are used
• App Server libraries can be replaced by
libraries
• Makes application more portable
• If you need additional libraries
anyway…
• …why not just package all of them?
Eberhard Wolff - @ewolff
9. Eberhard Wolff - @ewolff
Infrastructure:
Application independent?
• Each application has its own
infrastructure
• E.g. database connections
• + specific configuration
10. Eberhard Wolff - @ewolff
Dependencies
App Server / Application
Application
App Server
Libraries
Infrastructure
Specific
configuration
Cyclic dependency
i.e. one component
1 App Server
per Application
11. You Don‘t Agree?
• Can you deploy your application on a
different server?
• On a different version of the same server?
• Without modifications to the server?
• Do you deploy other applications on the
App Server?
• Could you?
• Is the application server or an installation
script in your version control?
Eberhard Wolff - @ewolff
13. Eberhard Wolff - @ewolff
Deployment
• Deployment Format: WAR, EAR, JAR...
• Can’t define dependencies outside
application
• i.e. App Server version, database etc
• Operations usually work with deb, RPM…
• Completely different tool chain
• Also: Usually Unix services to start
applications
14. Eberhard Wolff - @ewolff
Monitoring
• Provided by JMX
• Can be integrated in SMNP etc
• J
• Works outside App Servers, too
17. 1 App per server ..or per cluster
App Server part of the application
Deployment & monitoring OK
but not standard tools
Eberhard Wolff - @ewolff
App Server...
• …container for multiple applications
• ... provide infrastructure
• …support deployment
• …support monitoring
18. The Price We Pay
App
Server
Eberhard Wolff - @ewolff
Slow Turn
Around
Standard
OPs Tools
Continuous
Delivery
Micro
Services
App Server specific
OPs tools
Deployment
complex
One infrastructure
doesn’t fit all
One App Server
Smaller per Micro Service?
deployment units
20. The Re-Rise of the Applications
• Create a JAR files
• …that contains a main class
• Custom infrastructure
• E.g. HTTP server
• Or Batch
• …
Eberhard Wolff - @ewolff