{"id":18999,"date":"2013-11-21T01:00:42","date_gmt":"2013-11-20T23:00:42","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/?p=18999"},"modified":"2013-11-20T08:18:32","modified_gmt":"2013-11-20T06:18:32","slug":"save-and-refresh-with-java-web-projects","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2013\/11\/save-and-refresh-with-java-web-projects.html","title":{"rendered":"Save-and-Refresh With Java Web Projects"},"content":{"rendered":"<p>How do you configure your machine in order to have save-and-refresh for Java web projects? When you ask this question to developers, the answer starts with \u201coh, well\u2026\u201d, and continues with a description of something that sort-of works. And everyone has his own way.<\/p>\n<p>First \u2013 why do you need this? Because doing copying and restarting the server is a productivity killer \u2013 wastes a lot of your time. Without the productivity boost of syncing your project with the container, even for simple fixes, you may need a full build-and-deploy cycle before you can test it. And that may take a lot of time, depending on the size of the project.<\/p>\n<p>I\u2019ll write down a few, to complement <a href=\"http:\/\/stackoverflow.com\/questions\/998737\/integrating-tomcat-and-eclipse-as-a-hot-deploy-environment\/6189031#6189031\">my StackOverflow answer<\/a>:<\/p>\n<ul>\n<li>IDE integration \u2013 IDEs have an option to add a local server and deploy projects to it. That requires additional plugins, configuring what workspace files go where in the servlet container, and doesn\u2019t always work. And when there is Maven in the picture, it either doesn\u2019t work, or requires yet another plugin (as described in <a href=\"http:\/\/stackoverflow.com\/questions\/6083501\/maven-dependencies-not-visible-in-web-inf-lib\/6083776#6083776\">this answer of mine<\/a>)<\/li>\n<li>You use some tools for synchronizing directory structures. In Eclipse there\u2019s the <a href=\"http:\/\/andrei.gmxhome.de\/filesync\/\">FileSync plugin<\/a>, which let\u2019s you configure which workspace files go where in the servlet container. Other tools may exist for doing the same thing (e.g. <a href=\"http:\/\/www.cis.upenn.edu\/~bcpierce\/unison\/\">unison<\/a>) , or you may have written some script or plugin to do it.<\/li>\n<li>Running the servlet container from maven (if using maven) \u2013 either the <a href=\"http:\/\/tomcat.apache.org\/maven-plugin.html\">tomcat plugin<\/a> or the <a href=\"https:\/\/docs.codehaus.org\/display\/JETTY\/Maven+Jetty+Plugin\">jetty plugin <\/a> let you do that. The downside is that in order to run in debug mode, you need to attach external debugger (rather than using the built-in IDE-server integration for that). And it requires the plugin configuration. Also, have in mind that if using jetty (the faster option) for development, there might be difference in behaviour if your production container is tomcat. Not much of a hassle, but still something to have in mind.<\/li>\n<li>Manually copying the project files \u2013 this doesn\u2019t sound that terrible in the beginning, but then it starts bothering you \u2013 after all, it\u2019s a task asking to be automated.<\/li>\n<\/ul>\n<p>So, now you have your class files and resources (css, javascript, images, configuration files) copied to the servlet container. However, in order for them to work, you need some HotSwap functionality. That is, to let the jvm reload the class definitions. There are four options for that:<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<ul>\n<li>Regular <a href=\"http:\/\/docs.oracle.com\/javase\/1.4.2\/docs\/guide\/jpda\/enhancements.html\">HotSwap<\/a> \u2013 simply run the servlet container in debug mode. You get the bodies of your methods swapped whenever you change the class file. However, changing the method or class signatures requires restart. I\u2019ve always used this option, and it hasn\u2019t been that painful \u2013 after all method signature redefinition and refactoring don\u2019t happen too often, and even when they do, it\u2019s ok to restart the server, because you are not focused on getting some particular feature to work.<\/li>\n<li><a href=\"http:\/\/ssw.jku.at\/dcevm\/\">DCEVM<\/a> \u2013 a VM enhancement that allows complete reloading of classes. I haven\u2019t used it, but if it works properly, it should address the signature redefinition problem mentioned above.<\/li>\n<li><a href=\"http:\/\/zeroturnaround.com\/software\/jrebel\/\">JRebel <\/a>&#8211; a commercial alternative. I\u2019ve never used it, I\u2019ve heard it\u2019s good, and I know there are a lot of extras, that let you use it with various frameworks, so that reconfiguring the spring context, for example, doesn\u2019t need a restart. I don\u2019t think these things happen that often, and so I\u2019ve never recommended JRebel (being commercial), but it\u2019s an important option that you should consider.<\/li>\n<li>Restarting the server on every change. If the project is small, this takes very little time and might be an option. But I wouldn\u2019t recommend it even for small projects, as at least HotSwap is very easy to configure (and you need debug mode anyway)<\/li>\n<\/ul>\n<p>So many options \u2013 so typical for the Java world. And they work more or less fine. However, I decided to add one more option, that has almost zero-configuration \u2013 <a href=\"https:\/\/github.com\/Glamdring\/aardwark\">aardWARk<\/a>.<\/p>\n<p>It works by putting the aardwark.war file in your tomcat, renaming it, so that the name includes the path to your project directory, and it handles the syncrhonization. Note that this is an option added to the first list above. For hotswapping you\u2019d still need one of the three options in the second list. There is a more detailed setup guide on the <a href=\"https:\/\/github.com\/Glamdring\/aardWARk\">project page<\/a>, but there are a few things to emphasize:<\/p>\n<ul>\n<li>it works only with maven projects. In order to have zero-configuration, the convention-over-configuration of maven needs to be used<\/li>\n<li>it is IDE-independent and servlet-container-independent.<\/li>\n<li>it does what I think no other solution above can do (apart from JRebel, probably) \u2013 it will synchronize the maven dependent projects as well. Normally, you have a multi-module project, where some projects are packaged as jars, and other (web) projects depend on them. But you need to be able to change a class in, say, the \u201ccore\u201d module, and to immediately see the changes in the webapp. This would mean repackaging and reloading the jar. AardWARk simply parses the pom, finds the dependent projects and copies their classes to the classpath, which overrides the existing definitions<\/li>\n<li>multiple projects are supported, and also configuration via a properties file (if you don\u2019t want or can\u2019t name the war file to contain the path to the project)<\/li>\n<li>syncing jars files does not happen on changing the pom \u2013 you need to rebuild and restart. A bit of a workaround to <a href=\"http:\/\/techblog.bozho.net\/?p=1238\">embedding maven<\/a> and running the dependency goal, but you need to restart anyway, if new jars are added.<\/li>\n<li>it\u2019s called aardWARk for a simple reason \u2013 it would be best if this war file is loaded before the ones of your project. Not necessarily, as it is needed only for syncing the jar files, but preferably. Servlet containers do not guarantee the loading order of webapps, but it is likely that they are picked alphabetically \u2013 hence aardwark (war instead of var, for obvious reasons).<\/li>\n<\/ul>\n<p>I hope it is a useful tool, and I\u2019ll be glad if people start using it and give their feedback.<br \/>\n&nbsp;<\/p>\n<div style=\"border: 1px solid #D8D8D8; background: #FAFAFA; width: 100%; padding-left: 5px;\"><b><i>Reference: <\/i><\/b><a href=\"http:\/\/techblog.bozho.net\/?p=1246\">Save-and-Refresh With Java Web Projects<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/jcg\">JCG partner<\/a> Bozhidar Bozhanov at the <a href=\"http:\/\/techblog.bozho.net\/\">Bozho&#8217;s tech blog<\/a> blog.<\/div>\n","protected":false},"excerpt":{"rendered":"<p>How do you configure your machine in order to have save-and-refresh for Java web projects? When you ask this question to developers, the answer starts with \u201coh, well\u2026\u201d, and continues with a description of something that sort-of works. And everyone has his own way. First \u2013 why do you need this? Because doing copying and &hellip;<\/p>\n","protected":false},"author":55,"featured_media":112,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-18999","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Save-and-Refresh With Java Web Projects<\/title>\n<meta name=\"description\" content=\"How do you configure your machine in order to have save-and-refresh for Java web projects? When you ask this question to developers, the answer starts\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2013\/11\/save-and-refresh-with-java-web-projects.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Save-and-Refresh With Java Web Projects\" \/>\n<meta property=\"og:description\" content=\"How do you configure your machine in order to have save-and-refresh for Java web projects? When you ask this question to developers, the answer starts\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2013\/11\/save-and-refresh-with-java-web-projects.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2013-11-20T23:00:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Bozhidar Bozhanov\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bozhidar Bozhanov\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/save-and-refresh-with-java-web-projects.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/save-and-refresh-with-java-web-projects.html\"},\"author\":{\"name\":\"Bozhidar Bozhanov\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/1eaacbb8d159c99fd32e6b51198a1e79\"},\"headline\":\"Save-and-Refresh With Java Web Projects\",\"datePublished\":\"2013-11-20T23:00:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/save-and-refresh-with-java-web-projects.html\"},\"wordCount\":1038,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/save-and-refresh-with-java-web-projects.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/save-and-refresh-with-java-web-projects.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/save-and-refresh-with-java-web-projects.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/save-and-refresh-with-java-web-projects.html\",\"name\":\"Save-and-Refresh With Java Web Projects\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/save-and-refresh-with-java-web-projects.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/save-and-refresh-with-java-web-projects.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"datePublished\":\"2013-11-20T23:00:42+00:00\",\"description\":\"How do you configure your machine in order to have save-and-refresh for Java web projects? When you ask this question to developers, the answer starts\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/save-and-refresh-with-java-web-projects.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/save-and-refresh-with-java-web-projects.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/save-and-refresh-with-java-web-projects.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"width\":150,\"height\":150,\"caption\":\"java-interview-questions-answers\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/11\\\/save-and-refresh-with-java-web-projects.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Save-and-Refresh With Java Web Projects\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/1eaacbb8d159c99fd32e6b51198a1e79\",\"name\":\"Bozhidar Bozhanov\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/bozhidar.bozhanov.jpg\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/bozhidar.bozhanov.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/bozhidar.bozhanov.jpg\",\"caption\":\"Bozhidar Bozhanov\"},\"description\":\"Senior Java developer, one of the top stackoverflow users, fluent with Java and Java technology stacks - Spring, JPA, JavaEE, as well as Android, Scala and any framework you throw at him. creator of Computoser - an algorithmic music composer. Worked on telecom projects, e-government and large-scale online recruitment and navigation platforms.\",\"sameAs\":[\"http:\\\/\\\/techblog.bozho.net\\\/\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/bozhidar-bozhanov\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Save-and-Refresh With Java Web Projects","description":"How do you configure your machine in order to have save-and-refresh for Java web projects? When you ask this question to developers, the answer starts","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2013\/11\/save-and-refresh-with-java-web-projects.html","og_locale":"en_US","og_type":"article","og_title":"Save-and-Refresh With Java Web Projects","og_description":"How do you configure your machine in order to have save-and-refresh for Java web projects? When you ask this question to developers, the answer starts","og_url":"https:\/\/www.javacodegeeks.com\/2013\/11\/save-and-refresh-with-java-web-projects.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2013-11-20T23:00:42+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","type":"image\/jpeg"}],"author":"Bozhidar Bozhanov","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Bozhidar Bozhanov","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2013\/11\/save-and-refresh-with-java-web-projects.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/11\/save-and-refresh-with-java-web-projects.html"},"author":{"name":"Bozhidar Bozhanov","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/1eaacbb8d159c99fd32e6b51198a1e79"},"headline":"Save-and-Refresh With Java Web Projects","datePublished":"2013-11-20T23:00:42+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/11\/save-and-refresh-with-java-web-projects.html"},"wordCount":1038,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/11\/save-and-refresh-with-java-web-projects.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2013\/11\/save-and-refresh-with-java-web-projects.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2013\/11\/save-and-refresh-with-java-web-projects.html","url":"https:\/\/www.javacodegeeks.com\/2013\/11\/save-and-refresh-with-java-web-projects.html","name":"Save-and-Refresh With Java Web Projects","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/11\/save-and-refresh-with-java-web-projects.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/11\/save-and-refresh-with-java-web-projects.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","datePublished":"2013-11-20T23:00:42+00:00","description":"How do you configure your machine in order to have save-and-refresh for Java web projects? When you ask this question to developers, the answer starts","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/11\/save-and-refresh-with-java-web-projects.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2013\/11\/save-and-refresh-with-java-web-projects.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2013\/11\/save-and-refresh-with-java-web-projects.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","width":150,"height":150,"caption":"java-interview-questions-answers"},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2013\/11\/save-and-refresh-with-java-web-projects.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Save-and-Refresh With Java Web Projects"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/1eaacbb8d159c99fd32e6b51198a1e79","name":"Bozhidar Bozhanov","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/12\/bozhidar.bozhanov.jpg","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/12\/bozhidar.bozhanov.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/12\/bozhidar.bozhanov.jpg","caption":"Bozhidar Bozhanov"},"description":"Senior Java developer, one of the top stackoverflow users, fluent with Java and Java technology stacks - Spring, JPA, JavaEE, as well as Android, Scala and any framework you throw at him. creator of Computoser - an algorithmic music composer. Worked on telecom projects, e-government and large-scale online recruitment and navigation platforms.","sameAs":["http:\/\/techblog.bozho.net\/"],"url":"https:\/\/www.javacodegeeks.com\/author\/bozhidar-bozhanov"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/18999","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/55"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=18999"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/18999\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/112"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=18999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=18999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=18999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}