Web application directories and data are lost during build and deploy of the application in tomcat - eclipse

I am developing a sample web application in spring tool suite. I find that during the builds in the Tomcat local host, I loose all the data that was stored prior to the build. Data include directories and their contents that were stored by the applicatin prior to the new build. I use the sample application to store pictures. The problem is all of the pictures are lost after a new build. Is there a parameter that needs to be set to preserve the directories and the data. Is is this an expected process and that I need to backup all the application data prior to the build?
If I deploy on a cloud server using a .war file, will it behave the same way.
Please let me know if I need to post any files here.
Thanks
Balaji

Once you republish to Tomcat all new files form your workspace/project folder will be copied to the webapps folder, as well as all files in your webapps folder, which do not exist in your workspace, will be removed. If you upload files into f.e. webapps/YourProjectName/uploads/* directly, they will be removed because they do not exist in your workspace.
The best way is to separate your projects files (everything in your .war) from custom files like user data or uploads, by saving the the latter in a directory outside your webapps folder. Once you are republishing they are not going to be removed.
Otherwise, if you need something like 'example images' in your app to show to your customers (lets say they do not change that often) you can copy them into your workspace, so they will be republished every time.

Related

Glassfish step by step hot deploy

Hello i would like ask how it is possible configure glassfish server for something like live, hot deployment:
every time when i change some code of my jsp,html,js or css file i always need to clean and build project than deploy project to glassfish and again, again and again. That cost a lot of my time. I waste time for that. It will be easy when i could work on files which already use a started glasfish (deployed). But this files is in WAR file "project.war" and through my IDE (Netbeans) i cant edit this files (jsp,css,html or js). Netbeans made this file non editable.
Do you have idea how to speed up my development? I Will grateful for help.
Here is my glasfish home folder and all of 2 deployed applications are empty
yes, you can. if you need change xhtml, js, css only you can do this after your war was deployed. You can find all the files in the folder of your application
****\glassfish-4.1\glassfish\domains\domain1\applications\MyWebApplication\
when you complete your changes you need copy them to project folder and rebuild war

Automate Deployement of changed files in JBoss without Eclipse

What my Requirement is: When doing any sort of modification in my project's file(s), I want those particular files to get redeployed automatically without manually doing rebuild/redeploy/restart.
That is, I want changes to reflect on my webpage as soon as I change any file and save it. Changed file should automatically be redeployed in server.
What I've tried so far:
Changed standalone.xml file in JBoss for redeploying the app whenever any files gets changed. But this does not fulfill my requirement properly. Also this method generated Out of Memory error many a times.
Thought of using JRebel but it is not available for free.
Tried using DCE VM, but no help.
Please suggest any alternate as redeploying project manually takes a lot of time. I want to automate this process by deploying only the changed files in the exploded ear. I don't want to use any IDE.

Problems with relative paths in Eclipse.

I am trying to use relative paths in a Dynamic Web Project in Eclipse. I am NOT using them in the Servlet, but in another class that is called by the Servlet. The file I am trying to access to is a property file located in
MyProject/WebContent/WEB-INF/propertyFile.properties
I have tried almost every relative path...
WebContent/WEB-INF/propertyFile.properties
/WebContent/WEB-INF/propertyFile.properties
./WebContent/WEB-INF/propertyFile.properties
MyProject/WebContent/WEB-INF/propertyFile.properties
/MyProject/WebContent/WEB-INF/propertyFile.properties
WEB-INF/propertyFile.properties
/WEB-INF/propertyFile.properties
./WEB-INF/propertyFile.properties
...and so on...what can I do?
Thanks in advance!
You nee to understand that file IO read files, from the filesystem, and relative to the directory from which the JVM (i.e. your web container) is started.
Remember that, once your app is deployed to production, there won't be any MyProject or WebContent folder. That's what exists on your development machine. The only thing that will exist in production is the war file deployed in the application server.
What you actually want is to load a resource, located in the deployed web application (i.e. which is inside your war file).
To do that, you must use ServletContext.getResourceAsStream():
InputStream in = servletContext.getResourceAsStream("/WEB-INF/propertyFile.properties");

How to Copy Files on War Start

I have a number for Word Docs and PDFs that need to be copied to a file storage on start of my Grails app.
I figured I can just leverage BootStrap.groovy to check for existing files then copy if none found. However, I don't know the best practice of including the files into the WAR file.
How can I copy these files?
I don't know if it is a best practice, however we have all our external files into web-app directory. i.e. We have directories reports and pdf besides css and images directories. All that files are package and deploy into war file.

Deploy war file with modifiable properties files

I am building a web service and am packaging it into a war file for deployment. Right now all of my config files (.properties and .xml) are being packaged into my .war file. This isn't going to work as some of these files will need to be modified for each individual installation. I know that some servlet containers will leave the .war files intact which would mean the config files would never be easily modified. My question is this: what is the best practice for deploying a .war file with these external config files? I'm thinking that the config files will need to be shipped separate from the .war file and placed into a directory that is in the classpath. Is there a default directory setup like this in Tomcat that these files can just be dropped into and my web service will be able to find without much trouble?
Maybe I shouldn't be using a war file for this setup? Maybe I should just be providing a zip file (with the same contents as the war file) and the deployment will simply be to extract the zip into the webapps directory?
I do not know any default directory in Tomcat to store configuration, my
attempts to solve the same issue have been :
1 - Move configuration to the DB and provide scripts or webpages to modify values.
2 - Have a script to deploy the war. The script would merge configuration from a user directory into web.xml or other deployed config files.
3 - Have webapps look first in a user directory for configuration and
if not found then look for configuration files deployed by the war.
Least favorite is 3 - it require all webapps to check two places for configuration and
you end up with two different xml files on the server with different values and it is not always clear which one is used.
Next favorite is 2 - the webapps can be written without knowledge of multiple config files, but you run into issue when someone does a deploy from Tomcat manager instead of using your script.
Favorite is 1. This just works in most cases. Problem is when you don't have a DB or
want to configure how you connect to the DB.
If having the file visible from all webapps is not an issue, you could put it $CATALINA_HOME/lib.
One solution is to modify property file after deployment of war file is to use ServletContext.getRealpath() method to get the real path means path of file in the server where it is deployed and then modify that file it will modify file in container only not the original file. So you need to backup it if it is important modification for you. So by this you do not need to redeploy war file as it is already modifying file from deployed container.
This solution can edit a file that is in webpages folder also from the java class.
If you want more description or how to do it then let me know i have did it.