deploying war file to tomcat servers - java

System Information: I have a system with 10 tomcat server and load balancer in linux operating system.
Configration: I am running tomcats in linux screen
Problem: When i have to deploy new war file , i need to stop 10 tomcat server, remove old war and extracted old war folder, copy new war file to webapps directory and start it
Question: Is there any way to do this operations faster ?

The best solution is using Curl(linux command) with tomcats manager.
Detailed usage: Using Curl with tomcats manager
I have create a page that uploads war file to file store which all of my tomcats can access then calling curl commands for each server in java.

Normally you don't have to stop the tomcat server to delete the previous war file. When you delete the war file it will automatically delete the corresponding directory of if.
Use a bash script to delete and copy the files.

Related

Tomcat 7 web configuration

We have tomcat 7.0.55 in our unix server. We have deployed web applications manually inside webapps folder of tomcat instance. By default the clusterinfo.1200.properties and log4j logs are stored in .businessobjects folder under home directory of the user account in which tomcat runs.
While accessing the InfoView web application we get the below error,
"AccessControlException:"java.io.filePermission:Access Denied \home\<user account of tomcat>\.businessobjects\clusterinfo.properties"
Tomcat 7 has restriction to access the file outside the tomcat directory on the first logon. However on refreshing the page we are able to access the application.
I have tried the following steps.
stopped the tomcat instance
Moved .buisnessobjects from home directory to inside tomcat installed directory.
Created symlink as .businessobjects in home directory to point to the folder inside tomcat directory.
Started the tomcat instance.
It works. But I need to know where the configuration change has to be made in web application to place the clusterinfo property file and log4j file inside tomcat directory.
I am a novice in Java. Please let me know the file and its location to make this changes.
Desperately looking for a solution :-(
Did you try to grant more permissions on this file with chmod.
The exception explicitly says that its java.io.filePermission. So the problem is that jvm can't read your properties file because your OS prevents it from doing so based on the file permissions.
You can see file permissions with ls -l filepath.
I vaguely remember that you had to change owner of the accesed files in order for tomcat to work so chown tomcat7 \home\<user account of tomcat>\.businessobjects\clusterinfo.properties wouldn't hurt, but I don't remember if it was only applicable to deployed artifacts like *.war files or such.

Deploy JSP webproject to tomcat [duplicate]

I have copied the sample.war file into the webapps directory of Tomcat, and I can access localhost:8080.
Now how will Tomcat deploy it, I mean do I need to open it in browser? How can I access the application?
You can access your application from: http://localhost:8080/sample
Deploying or redeploying of war files is automatic by default - after copying/overwriting the file sample.war, check your webapps folder for an extracted folder sample.
If it doesn't open properly, check the log files (e.g. tomcat/logs/catalina.out) for problems with deployment.
step-1. here I'm deploying pos.war First go to tomcat webapps folder and paste it
step-2. go to tomcat->bin folder start tomcat by clicking startup.bat
step-3. go to browser write localhost:port/project name eg. localhost:8080/pos (here my tomcat run on port 8080)
Done....
You just need to put your war file in webapps and then start your server.
it will get deployed.
otherwise you can also use tomcat manager a webfront to upload & deploy your war remotely.
Manual steps - Windows
Copy the .war file (E.g.: prj.war) to %CATALINA_HOME%\webapps ( E.g.: C:\tomcat\webapps )
Run %CATALINA_HOME%\bin\startup.bat
Your .war file will be extracted automatically to a folder that has the same name (without extension) (E.g.: prj)
Go to %CATALINA_HOME%\conf\server.xml and take the port for the HTTP protocol. <Connector port="8080" ... />. The default value is 8080.
Access the following URL:
[<protocol>://]localhost:<port>/folder/resourceName
(E.g.: localhost:8080/folder/resourceName)
Don't try to access the URL without the resourceName because it won't work if there is no file like index.html, or if there is no url pattern like "/" or "/*" in web.xml.
The available main paths are here: [<protocol>://]localhost:<port>/manager/html (E.g.: http://localhost:8080/manager/html) and they have true on the "Running" column.
Using the UI manager:
Go to [<protocol>://]localhost:<port>/manager/html/ (usually localhost:8080/manager/html/)
This is also achievable from [<protocol>://]localhost:<port> > Manager App)
If you get:
403 Access Denied
go to %CATALINA_HOME%\conf\tomcat-users.xml and check that you have enabled a line like this:
<user username="tomcat" password="tomcat" roles="tomcat,role1,manager-gui"/>
In the Deploy section, WAR file to deploy subsection, click on Browse....
Select the .war file (E.g.: prj.war) > click on Deploy.
In the Applications section, you can see the name of your project (E.g.: prj).
In addition to the ways already mentioned (dropping the war-file directly into the webapps-directory), if you have the Tomcat Manager -application installed, you can deploy war-files via browser too. To get to the manager, browse to the root of the server (in your case, localhost:8080), select "Tomcat Manager" (at this point, you need to know username and password for a Tomcat-user with "manager"-role, the users are defined in tomcat-users.xml in the conf-directory of the tomcat-installation). From the opening page, scroll downwards until you see the "Deploy"-part of the page, where you can click "browse" to select a WAR file to deploy from your local machine. After you've selected the file, click deploy. After a while the manager should inform you that the application has been deployed (and if everything went well, started).
Here's a longer how-to and other instructions from the Tomcat 7 documentation pages.
There are two ways:
Either you can do hot deployment (Hot deployment means deploying when server is running/up).
Or you can do cold deployment (Cold deployment means deploying when server is stopped).
Just use tomcat manager console for console deployment or simply copy and paste your application in webapp folder of your server's tomcat_home directory.
Note: Make sure if your war file size is more than 52 MB (the default configuration value),
you need to make two little changes in web.xml file of Manager application of your webapp folder(Manager application is provided by Apache tomcat by default upon installing the server).
Go to the web.xml of the manager application (for instance it could
be under /tomcat7/webapps/manager/WEB-INF/web.xml.
Increase the max-file-size and max-request-size values in web.xml file:
<multipart-config>
<!– 50MB max –>
<max-file-size>52428800</max-file-size>
<max-request-size>52428800</max-request-size>
<file-size-threshold>0</file-size-threshold>
</multipart-config>
Increase the size by putting the values for <max-file-size> and <max-request-size> according to your requirement.
This has been working for me:
Create your war file (mysite.war) locally.
Rename it locally to something besides .war, like mysite.www
With tomcat still running, upload mysite.www to webapps directory.
After it finishes uploading, delete the previous version mysite.war
List the directory, watching for the directory /mysite to disappear.
Rename mysite.www to be mysite.war
List the directory, watching for the new /mysite to be created.
If you try uploading the new file as a war file, with tomcat still running, it will attempt to expand it before it is all there. It will fail. Having failed, it will not try again. Thus, uploading a www file, then renaming it, allows the whole war file to be present before tomcat notices it.
Hint, don't forget to check that the war file's owner is tomcat (Use chown)
If you installed tomcat7 using apt-get in linux then, deploy your app to /var/lib/tomcat7/webapps/
eg.
sudo service tomcat7 stop
mvn clean package
sudo cp target/DestroyTheWorldWithPeace.war /var/lib/tomcat7/webapps/
#you might also want to make sure war file has permission (`777` not just `+x`)
sudo service tomcat7 start
Also, keep tailing the tomcat log so that you can verify that your app is actually making peace with tomcat.
tail -f /var/lib/tomcat7/logs/catalina.out
The deployed application should appear in http://172.16.35.155:8080/manager/html
For deploying the war file over tomcat,
Follow the below steps :
Stop the tomcat. powershell->services.msc->OK->Apache Tomcat 8.5->stop(on left hand side).
Put the .war file inside E:\Tomcat_Installation\webapps i.e. webapps folder i.e. put.war (put.war is just an example)
After starting the tomcat(to start tomcat powershell->services.msc->OK->Apache Tomcat
8.5->start )
you will get one folder inside E:\Tomcat_Installation\webapps**put**
In this way you can deploy your war file in Apache Tomcat.
1.Generate a war file from your application
2. open tomcat manager, go down the page
3. Click on browse to deploy the war.
4. choose your war file.
There you go!
The application name goes into the context of your tomcat deployed URL,
eg. http://localhost:Port/applicationName.
If your application name is simple then, it should be http://localhost:8080/sample.
By default, Port is 8080, but if you wish to change it, or want to know the port where tomcat is running, simply go to server.xml file in <tomcat-apache-dir>/conf/server.xml, there you can find port & change,
eg. <Connector port="8080" redirectPort="8443" connectionTimeout="20000" protocol="HTTP/1.1"/>
If anything goes wrong, check the log files (e.g. <tomcat-apache-dir>/logs/catalina.out)
Perform the following steps:
Stop the Tomcat
Right Click on Project and click on "Clean and Build"
Go to your project Directory and inside Dist Folder you will get war file that you copy on your tomcat
webApp Folder
Start the tomcat
automatic war file extract and run your project
I followed the instruction in the following link, it works for me.
http://www.coderanch.com/t/487178/Tomcat/war-file-show-load
Stop Tomcat
Delete all the logs in tomcat/logs and all files in tomcat/conf/Catalina/localhost
Remove the war file and the directory it created (if it did) from tomact/webapps
Start Tomcat
While watching the logs, copy the war file to the webapps directory again
After this, keep an eye on the catalina.xxxx-xx-xx.log to find out the issue.

How to deploy a war file in Tomcat 7

I have copied the sample.war file into the webapps directory of Tomcat, and I can access localhost:8080.
Now how will Tomcat deploy it, I mean do I need to open it in browser? How can I access the application?
You can access your application from: http://localhost:8080/sample
Deploying or redeploying of war files is automatic by default - after copying/overwriting the file sample.war, check your webapps folder for an extracted folder sample.
If it doesn't open properly, check the log files (e.g. tomcat/logs/catalina.out) for problems with deployment.
step-1. here I'm deploying pos.war First go to tomcat webapps folder and paste it
step-2. go to tomcat->bin folder start tomcat by clicking startup.bat
step-3. go to browser write localhost:port/project name eg. localhost:8080/pos (here my tomcat run on port 8080)
Done....
You just need to put your war file in webapps and then start your server.
it will get deployed.
otherwise you can also use tomcat manager a webfront to upload & deploy your war remotely.
Manual steps - Windows
Copy the .war file (E.g.: prj.war) to %CATALINA_HOME%\webapps ( E.g.: C:\tomcat\webapps )
Run %CATALINA_HOME%\bin\startup.bat
Your .war file will be extracted automatically to a folder that has the same name (without extension) (E.g.: prj)
Go to %CATALINA_HOME%\conf\server.xml and take the port for the HTTP protocol. <Connector port="8080" ... />. The default value is 8080.
Access the following URL:
[<protocol>://]localhost:<port>/folder/resourceName
(E.g.: localhost:8080/folder/resourceName)
Don't try to access the URL without the resourceName because it won't work if there is no file like index.html, or if there is no url pattern like "/" or "/*" in web.xml.
The available main paths are here: [<protocol>://]localhost:<port>/manager/html (E.g.: http://localhost:8080/manager/html) and they have true on the "Running" column.
Using the UI manager:
Go to [<protocol>://]localhost:<port>/manager/html/ (usually localhost:8080/manager/html/)
This is also achievable from [<protocol>://]localhost:<port> > Manager App)
If you get:
403 Access Denied
go to %CATALINA_HOME%\conf\tomcat-users.xml and check that you have enabled a line like this:
<user username="tomcat" password="tomcat" roles="tomcat,role1,manager-gui"/>
In the Deploy section, WAR file to deploy subsection, click on Browse....
Select the .war file (E.g.: prj.war) > click on Deploy.
In the Applications section, you can see the name of your project (E.g.: prj).
In addition to the ways already mentioned (dropping the war-file directly into the webapps-directory), if you have the Tomcat Manager -application installed, you can deploy war-files via browser too. To get to the manager, browse to the root of the server (in your case, localhost:8080), select "Tomcat Manager" (at this point, you need to know username and password for a Tomcat-user with "manager"-role, the users are defined in tomcat-users.xml in the conf-directory of the tomcat-installation). From the opening page, scroll downwards until you see the "Deploy"-part of the page, where you can click "browse" to select a WAR file to deploy from your local machine. After you've selected the file, click deploy. After a while the manager should inform you that the application has been deployed (and if everything went well, started).
Here's a longer how-to and other instructions from the Tomcat 7 documentation pages.
There are two ways:
Either you can do hot deployment (Hot deployment means deploying when server is running/up).
Or you can do cold deployment (Cold deployment means deploying when server is stopped).
Just use tomcat manager console for console deployment or simply copy and paste your application in webapp folder of your server's tomcat_home directory.
Note: Make sure if your war file size is more than 52 MB (the default configuration value),
you need to make two little changes in web.xml file of Manager application of your webapp folder(Manager application is provided by Apache tomcat by default upon installing the server).
Go to the web.xml of the manager application (for instance it could
be under /tomcat7/webapps/manager/WEB-INF/web.xml.
Increase the max-file-size and max-request-size values in web.xml file:
<multipart-config>
<!– 50MB max –>
<max-file-size>52428800</max-file-size>
<max-request-size>52428800</max-request-size>
<file-size-threshold>0</file-size-threshold>
</multipart-config>
Increase the size by putting the values for <max-file-size> and <max-request-size> according to your requirement.
This has been working for me:
Create your war file (mysite.war) locally.
Rename it locally to something besides .war, like mysite.www
With tomcat still running, upload mysite.www to webapps directory.
After it finishes uploading, delete the previous version mysite.war
List the directory, watching for the directory /mysite to disappear.
Rename mysite.www to be mysite.war
List the directory, watching for the new /mysite to be created.
If you try uploading the new file as a war file, with tomcat still running, it will attempt to expand it before it is all there. It will fail. Having failed, it will not try again. Thus, uploading a www file, then renaming it, allows the whole war file to be present before tomcat notices it.
Hint, don't forget to check that the war file's owner is tomcat (Use chown)
If you installed tomcat7 using apt-get in linux then, deploy your app to /var/lib/tomcat7/webapps/
eg.
sudo service tomcat7 stop
mvn clean package
sudo cp target/DestroyTheWorldWithPeace.war /var/lib/tomcat7/webapps/
#you might also want to make sure war file has permission (`777` not just `+x`)
sudo service tomcat7 start
Also, keep tailing the tomcat log so that you can verify that your app is actually making peace with tomcat.
tail -f /var/lib/tomcat7/logs/catalina.out
The deployed application should appear in http://172.16.35.155:8080/manager/html
For deploying the war file over tomcat,
Follow the below steps :
Stop the tomcat. powershell->services.msc->OK->Apache Tomcat 8.5->stop(on left hand side).
Put the .war file inside E:\Tomcat_Installation\webapps i.e. webapps folder i.e. put.war (put.war is just an example)
After starting the tomcat(to start tomcat powershell->services.msc->OK->Apache Tomcat
8.5->start )
you will get one folder inside E:\Tomcat_Installation\webapps**put**
In this way you can deploy your war file in Apache Tomcat.
1.Generate a war file from your application
2. open tomcat manager, go down the page
3. Click on browse to deploy the war.
4. choose your war file.
There you go!
The application name goes into the context of your tomcat deployed URL,
eg. http://localhost:Port/applicationName.
If your application name is simple then, it should be http://localhost:8080/sample.
By default, Port is 8080, but if you wish to change it, or want to know the port where tomcat is running, simply go to server.xml file in <tomcat-apache-dir>/conf/server.xml, there you can find port & change,
eg. <Connector port="8080" redirectPort="8443" connectionTimeout="20000" protocol="HTTP/1.1"/>
If anything goes wrong, check the log files (e.g. <tomcat-apache-dir>/logs/catalina.out)
Perform the following steps:
Stop the Tomcat
Right Click on Project and click on "Clean and Build"
Go to your project Directory and inside Dist Folder you will get war file that you copy on your tomcat
webApp Folder
Start the tomcat
automatic war file extract and run your project
I followed the instruction in the following link, it works for me.
http://www.coderanch.com/t/487178/Tomcat/war-file-show-load
Stop Tomcat
Delete all the logs in tomcat/logs and all files in tomcat/conf/Catalina/localhost
Remove the war file and the directory it created (if it did) from tomact/webapps
Start Tomcat
While watching the logs, copy the war file to the webapps directory again
After this, keep an eye on the catalina.xxxx-xx-xx.log to find out the issue.

Tomcat6 not deploying my webapp

I have access to a Tomcat server that is currently deploy two webapps. When I put my own webapp in the apache-tomcat-6.xxx/webapps directory, it doesn't deploy it. I tried downloading the Tomcat sample webapp, and deployed it in the webapps directory, and it still doesn't deploy.
Is there anything I have to do beyond putting the webapps in the apache*/webapps directory to get them to deploy? I have tried starting/restarting Tomcat ad nauseam.
Thanks,
ktm
When you say you put your own webapp, I assume you are putting your webapp.war file? Make sure you delete the existing webapp directory first before you place webapp.war. Tomcat will automatically inflate the war file to create that webapp directory.
Did you try stopping and starting tomcat?
Is your server getting started? And if yes than your project directory is created in webapps.
Also look for environment variable.
Check to see if the security manager is running. If it is you will need to edit the catalina.policy file to allow your web application to be deployed and accessed.
If you export your .war file from eclipse, make sure your project's dynamic web module facet version is not more than what your production server can handle. For example, version 3.0 works for Tomcat 7, but doesn't work on Tomcat 6, which needs it to be set as 2.5. To knock the project facet version down a notch, see this question.
Ensure that permissions on your war file belongs to the tomcat user and group. Make sure to remove the deployed directory first, and then restart the server.
$ sudo rm -fr /path/to/tomcat/webapps/<yourwebapp>
$ sudo chown tomcat:tomcat /path/to/tomcat/webapps/<yourwebapp.war>
Now restart the server
I had a problem with tomcat 6's deployment system. For some reason the file $CATALINA_HOME/conf/Catalina/localhost/MyAppName.xml was zero-length... I'm not sure about what caused it, but I deleted the zero-lenght XML, deleted the WAR and then I repeated the deployment process (copied the WAR to the webapps directory) and it deployed correctly. I found the failure message in a log file... now I know it for the next time, but I though it would be worth to share just in case...
Hope it helps...
i also meet the problem,i redownload tomcat and check service.xml carefully,finnally i find my WEB-INF/web.xml not exsit.
The problem that I faced was there were too many java processes that were running. Somehow it was not letting Tomcat start and did not throw any error.
For that I killed all the java processes and then restarted the Tomcat and it worked.
In Linux:
> ps -aux | grep java
> kill -9 [pid_from_last_command]

War deployment on Tomcat takes ages

I have a Grails application, built to a war file (~30mb). When I attempt to deploy the war file on Tomcat 6 via the application manager, it takes upwards of 10 minutes to deploy, or hangs indefinitely. When it hangs I can restart Tomcat and the app is usually deployed, however sometimes I have to repeat the process. I've also noticed that during deployment, the Java process maxes out the CPU and the RAM is at ~10-15%.
I'm fairly new to Java, so I don't know if this is normal, but I can't imagine how it could be. Is there something I can do to make this run smoother/faster? Is there a better way to deploy than Tomcat's app manager?
I upload the WAR to my home directory, cd to /usr/local/tomcat, then run the following commands:
bin/shutdown.sh
rm webapps/ROOT.war
rm -rf webapps/ROOT
cp ~/ROOT.war webapps
bin/startup.sh
Definitely check the Tomcat logs for any errors/warnings.
You probably have some expensive/sensitive code logic in one of the ServletContextListeners. They are usually initialized during startup. If so, then I would debug/profile it for any performance matters/leaks.
As noted I would copy the war to the webapps folder and let tomcat do the deployment, its also quicker saving you time.
Both Tomcat and Jetty will support a hot deploy. They simply monitor the deploy directory for changes, so you can just copy the .war file into that directory, and the server will undeploy/redeploy.
If using a remote server check the lag is not the time take to upload the war to a remote server over the network.
Don't use application manager. My way is to upload it somewhere out of the webapps directory and then copy it to webapps directory. Takes a lot less of deplyoment time.
It's not always that you have sufficient access rights to manually put files in the webapps folder -- you are supposed to use the Tomcat Application Manager for .war file deployment, and need to make it work.
For me, it has been common that the process of uploading of a .war file to the server cannot complete; it gets stuck somewhere in the middle and the file is only partially uploaded to the server, no matter how many times I retry. In such situations, I have found it worthwhile to try another browser. For instance, I've found myself stuck using Google Chrome but once I switched to a freshly started Firefox browser, things worked out.
This may be relate to this BUG of JDK
I readed this article, Tomcat7 starts too late on Ubuntu 14.04 x64 and resolved my problem.
Try to resolve it by replacing
securerandom.source=file:/dev/urandom
with
securerandom.source=file:/dev/./urandom
in $JAVA_PATH/jre/lib/security/java.security

Categories

Resources