Web app deployment in Tomcat - java

Does Tomcat use a different Java Virtual Machine (JVM) for each web application running in its container, or does all web applications in Tomcat run under the same JVM?
So for a specific example: if a web application under webapps, enables JMX programmatically (via System properties) does this mean that JMX is enabled for all web applications running in the container?
I believe this is the case, but would like to confirm.
This question came up from my problem in this thread: question on tomcat and jmx. Any input on the subject is appreciated.

Tomcat runs in a single JVM, so every app deployed to a single tomcat instance runs in the same VM as every other application. They get different classloaders, so they're isolated from each other in that sense, but the JVM is the same.
So any feature enabled JVM-wide will be enabled for every application in that instance.

Related

Multiple Tomcat 8 Installs or Virtual Hosting

In the past when a new webapp or set of services was to be deployed, it was common practice to be given a new vm with tomcat installed on to deploy to. With my current position the client is only giving me one linux instance to deploy several webapps to. (Small internal usage, 0 scaling. Deploying to a single AWS EC2 linux machine)
The applications are required to be given unique domains. ie app1 and app2 could be mapped to smallapp1.com:8080/app1/login and smallerapp2.com:8080/app2/login (ports are for example only and not a requirement)
I currently have two installations of tomcat8 running on the instance and each application is deployed to a unique tomcat install and running on different ports. (one is 8080 and the other 8081).
If I were to want to deploy a handful of other small applications would I be better off using individual tomcat installations or should I be using Virtual Hosting?
I am new to deployment. In the past I was handed a deployment destination and procedure. In the new position I was simply given credentials to a single instance. I am not sure what is better practice or in which situation which is better than another. If it matters, each application is only ever going to be used by a maximum of 20 users at the same time.
TL;DR Using multiple installations of tomcat on the same instance or using the same tomcat installation to host multiple applications.
Virtualhosts is a better option because you are not bloating the server with several installations that could conflict with each other, and you are to take 1 port for each instance of tomcat.
Keep in mind that tomcat is a better solution for Java web applications, if you are not running servlets or JSPs you are better off using Apache Http server.

Should I run Jenkins without a servlet container in production i.e using java -jar jenkins.war

I'm new to Java and Java web applications. I'm trying to understand why I should use a Java application server like Tomcat instead of running it from command line.
Should I running Jenkins without a servlet container in production i.e using java -jar jenkins.war?
Is Tomcat more suitable for production environments?
Are there other advantages?
Please give me some idea why running the application in a servlet container is important.
Actually when you run Jenkins as "java -jar jenkins.war" it starts embedded servlet container anyway (Winstone or Jetty). Since main load on build server comes not from web users, but (surprise-surprise) from build jobs, I don't think servlet container type can affect performance. Moreover build jobs are started in separate JVM or even on slave machines.
Also all server/job/plugins configuration is stored in Jenkins home / config folder, so the way you started Jenkins does not affect server maintenance / backup tasks. Native installers also create user and start Jenkins as a service.
"Jenkins: The Definitive Guide" - "Running Jenkins as a stand-alone application may not be to everyone’s taste. For a production server, you might want to take advantage of the more sophisticated monitoring and administration features of a full blown Java application server such as JBoss, GlassFish, or WebSphere Application Server. And system administrators may be wary of the relatively little-known Winstone server, or may simply prefer Jenkins to fit into a known pattern of Java web application development. If this is the case, you may prefer to, or be obliged to, deploy Jenkins as a standard Java web application."

how to call struts-jsp application from a core java application programatically at run time?

i have a core java application and a struts2 (jsp) application which use tomcat server running on local host. i need to call or restart my struts application from my core java application if it meets certain conditions. Seeks your good suggestion or snippets to do so.

JBoss starting with only EJB Container

I am currently writing a web application which uses JBoss6.x as the application server, for load sharing what I have decided is to write some EJB's which can be either run locally on the same machine as the web application on the Jboss or in a separate machine which will be remotely connected which will have Jboss running on it.
Now the question here is, I would be needing only 1 JBoss server to serve the web application, all other Jboss in question should be running with only the EJB Containers. Is it possible to run only the EJB Container and the naming services so that I can remotely connect to the same? Pointers or specific links as to how to go about doing this would be much appreciated.

Java web application on apache tomcat

I am developing a web application in java using the Vaadin framework.
I am running that application on Apache Tomcat. What I want to ask is that, if I run that application on Apache Tomcat and access the same application using two different browsers on two different computers, then does the application then have two instances on Tomcat or does it have a single instance?? I have searched for it, but not been able to find a satisfactory answer.
Thanks !
If you run a web application in Tomcat, you'll have exactly one Tomcat instance, which will host your application. This single Tomcat instance (and therefore your web application) will be able to many different browser requests, from many different computers. This is exactly what web servers are designed to do: process requests from many different clients.
One instance of Tomcat, and many instances of your Vaadin app.
To access your Vaadin app, the user points their web browser to your Vaadin app's URL. Tomcat must already be running in order to accept the request from the web browser. When the already-running instance of Tomcat receives that request, Tomcat starts a new thread. In that thread a new instance of your subclass of the Vaadin "Application" class will be created and run.
So, if you have 5 simultaneous users running your Vaadin app, you will have one instance of Tomcat running. And that Tomcat instance will be running 5 sessions, each in its own thread running its own instance of your Vaadin "Application" subclass.
Anything marked "static" in your app applies to all 5 instances of your app, while anything not marked "static" applies only to a single instance of your app (a single user).

Categories