{"id":2928,"date":"2009-09-30T12:28:32","date_gmt":"2009-09-30T19:28:32","guid":{"rendered":"https:\/\/redfindevelop.wpengine.com\/blog\/devblog\/?p=170"},"modified":"2020-10-05T13:12:40","modified_gmt":"2020-10-05T20:12:40","slug":"how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse","status":"publish","type":"post","link":"https:\/\/www.redfin.com\/news\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\/","title":{"rendered":"How to Set Up Hot Code Replacement with Tomcat and Eclipse"},"content":{"rendered":"<p>This blog post will guide you through setting up Tomcat hot code replacement (also called hotswap debugging) in Eclipse.<\/p>\n<ul>\n<li>What Is &#8220;Hot Code Replace&#8221;?<\/li>\n<li>What&#8217;s the Catch?<\/li>\n<li>What About JavaRebel?<\/li>\n<li>Configuring Your Web Application in Eclipse\n<ol>\n<li>Download Eclipse &#8220;JEE&#8221; Edition<\/li>\n<li>Switch to the &#8220;Java EE&#8221; Perspective<\/li>\n<li>Configure Your WAR Project<\/li>\n<li>Create a New Server<\/li>\n<li>Magic Setting: Disable &#8220;Auto Reloading&#8221; on Each Project in the Server<\/li>\n<li>Performance Tip: Adjust Memory Settings<\/li>\n<li>Start Your Tomcat Server in Debug Mode<\/li>\n<\/ol>\n<\/li>\n<li>Why Disable Auto Reloading?<\/li>\n<li>Disable Auto Reloading but <em>Enable<\/em> Auto Publishing<\/li>\n<li>Finding the <kbd>tmp0<\/kbd> Fake Tomcat Directory<\/li>\n<li>Exorcising the <kbd>tmp0<\/kbd> Directory<\/li>\n<li>Troubleshooting: What Do I Do If I Still Can&#8217;t Get It to Work?<\/li>\n<\/ul>\n<h2>What Is &#8220;Hot Code Replace&#8221;?<\/h2>\n<p>&#8220;<a href=\"http:\/\/wiki.eclipse.org\/FAQ_What_is_hot_code_replace%3F\">Hot Code Replace<\/a>&#8221; (HCR) lets you make modifications to a Java class and see the effect immediately in a running JVM, without restarting your application.  HCR is part of the Java Platform Debugger Architecture (JPDA) and is available on all modern JVMs.<\/p>\n<p>Consider this ordinary application:<\/p>\n<p><code><\/p>\n<pre>public class Sample {\n  public static void main(String[] args) {\n    String foo = \"unchangeable\";\n    foo += blah();\n    System.out.println(foo);\n  }\n  \n  public static String blah() {\n    String bar = \"bar\";\n    bar += \"blah\";\n    return bar;\n  }\n  \n}<\/pre>\n<p><\/code><\/p>\n<p>If you debug this class in Eclipse, you can make changes to it, on the fly, without restarting the JVM.  For example, try setting a breakpoint on the second line of <code>blah()<\/code>. Next, change the literal <code>blah<\/code> to <code>quz<\/code>.  Save the file and the program will continue running with the new code.<\/p>\n<p>You can do this with Tomcat web applications in Eclipse, but it&#8217;s a lot trickier.<\/p>\n<h2><a name=\"catch\"><\/a>What&#8217;s the Catch?<\/h2>\n<p>There are a few limitations when using hot code replace.  You can&#8217;t use JPDA HCR to change the signature of a class (add\/remove methods or fields) or to add new classes on the fly.  Additionally, some method calls (&#8220;stack frames&#8221;) can&#8217;t be modified, including the <code>main<\/code> method or any method invoked via reflection, that is, by using <kbd>java.lang.reflect.Method.invoke()<\/kbd>.<\/p>\n<p>Here&#8217;s what happens if you try to replace the <code>unchangeable<\/code> variable in the main method of <kbd>Sample.java<\/kbd> above.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/redfin.com\/blog\/devblog\/wp-content\/uploads\/sites\/3\/2009\/09\/unchangeable-300x115.png\" alt=\"unchangeable\" width=\"300\" height=\"115\" class=\"alignnone size-medium wp-image-180\" \/><\/p>\n<h2>What About JavaRebel?<\/h2>\n<p><a href=\"http:\/\/www.zeroturnaround.com\/javarebel\/\">JavaRebel<\/a> is a hot code replacement system that&#8217;s a little better than JPDA HCR.  (<a href=\"http:\/\/www.zeroturnaround.com\/jrebel\/comparison\/\">Maybe a lot better<\/a>.)<\/p>\n<p>With JavaRebel you can add\/remove methods and classes without restarting Tomcat.  However, JavaRebel costs $149 per developer per year, so it may or may not be worthwhile for you.<\/p>\n<h2>Configuring Your Web Application in Eclipse<\/h2>\n<ol>\n<li>Download Eclipse &#8220;JEE&#8221; edition\n<p>Most developers already use this, since it&#8217;s the first option available on the <a href=\"http:\/\/www.eclipse.org\/downloads\/\">Eclipse download page<\/a>, but if you&#8217;re using &#8220;Eclipse IDE for Java Developers&#8221; (92MB), you&#8217;ll need to go back and download &#8220;Eclipse IDE for Jave EE Developers&#8221; (189MB).  It&#8217;s worth it, I promise!<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/redfin.com\/blog\/devblog\/wp-content\/uploads\/sites\/3\/2009\/09\/download-screenshot-300x188.png\" alt=\"download-screenshot\" width=\"300\" height=\"188\" class=\"alignnone size-medium wp-image-175\" \/><\/p>\n<p>Note: The difference between the regular Java IDE and the Java EE IDE is that the JEE edition comes with the Eclipse &#8220;Web Tools Project&#8221; (WTP), which includes &#8220;Web Server Tools&#8221; (WST).  The terms are sometimes used interchangeably; keep an eye out for this if you need to search for them.<\/p>\n<\/li>\n<li>Switch to the &#8220;Java EE&#8221; Perspective\n<p>Make sure you&#8217;re in the &#8220;Java EE&#8221; perspective, not the &#8220;Java&#8221; perspective.  If it&#8217;s not in the upper-right corner of your Eclipse window, you might need to enable it manually (Window menu -&gt; Open Perspective -&gt; Other&#8230;).  If &#8220;Java EE&#8221; doesn&#8217;t appear on this list, you&#8217;ve probably downloaded the wrong package of Eclipse; go back and download the Java EE version.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/redfin.com\/blog\/devblog\/wp-content\/uploads\/sites\/3\/2009\/09\/jee-screenshot.png\" alt=\"jee-screenshot\" width=\"253\" height=\"141\" class=\"alignnone size-full wp-image-176\" \/><\/p>\n<\/li>\n<li>Configure Your WAR Project\n<p>From scratch: From the New menu, select &#8220;Dynamic Web Project&#8221;.  Configure your source and output folders, as well as your &#8220;Content directory&#8221;, which will contain your JSPs, your WEB-INF directory, etc.<\/p>\n<p>Via Maven: Use <a href=\"http:\/\/maven.apache.org\/\">Maven<\/a> to create a WAR project.  For example:<\/p>\n<p><kbd>mvn archetype:create -DarchetypeArtifactId=maven-archetype-webapp -DartifactId=YOURNAMEHERE -DgroupId=YOURNAMEHERE<\/kbd><\/p>\n<p>Modify your <kbd>pom.xml<\/kbd> to include an explicit reference to <code>maven-eclipse-plugin<\/code>, like this:<\/p>\n<p><code><\/p>\n<pre>\n&lt;!-- ... --&gt;\n&lt;build&gt;\n    &lt;!-- ... --&gt;\n    &lt;plugins&gt;\n        &lt;!-- ... --&gt;\n        &lt;plugin&gt;\n            &lt;artifactId&gt;maven-eclipse-plugin&lt;\/artifactId&gt;\n            &lt;configuration&gt;\n                &lt;wtpversion&gt;2.0&lt;\/wtpversion&gt;\n            &lt;\/configuration&gt;\n        &lt;\/plugin&gt;\n    &lt;\/plugins&gt;\n&lt;\/build&gt;\n&lt;!-- ... --&gt;\n<\/pre>\n<p><\/code><\/p>\n<p>Now generate an Eclipse project from the command line, like this:<\/p>\n<p><kbd>mvn eclipse:eclipse<\/kbd><\/p>\n<p>Here&#8217;s an <a href=\"https:\/\/docs.google.com\/file\/d\/0B-IGib-OncBXZ1d6VF9nWEU5QjQ\/edit?usp=sharing\">example Maven project<\/a> you can use.  Just download it, extract it, and run <code>mvn eclipse:eclipse<\/code> to generate your Eclipse project.  (If this is your first time using Maven with Eclipse, you&#8217;ll also need to add an <kbd>M2_REPO<\/kbd> classpath variable in your Eclipse workspace preferences that points to your Maven repository, typically <kbd>$HOME\/.m2\/repository<\/kbd> or <kbd>%USERPROFILE%.m2repository<\/kbd>.)<\/p>\n<\/li>\n<li>Create a New Server\n<p>From the New menu, select Other&#8230; -&gt; Server -&gt; Server.  For your server type, expand the &#8220;Apache&#8221; folder and select the version of Tomcat you intend to use.  Choose &#8220;Next&#8221; and then specify the path to your Tomcat installation directory, e.g. <kbd>c:toolstomcat-6.0<\/kbd>.  Add your web project as a &#8220;resource&#8221; to this server.<\/p>\n<\/li>\n<li><a name=\"magic-setting\"><\/a>Magic Setting: Disable &#8220;Auto Reloading&#8221; on Each Project in the Server\n<p>You now have a weird pseudo-project called &#8220;Servers&#8221; in your Project Explorer.  In the explorer, your server looks like a folder called something like &#8220;Tomcat v6.0 Server at localhost-config&#8221; &#8230;but that&#8217;s not what you want.  You need to interact with your server using the &#8220;Servers&#8221; tab.  (Eclipse calls these tabs &#8220;Views,&#8221; but everybody else just calls them &#8220;tabs.&#8221;)<\/p>\n<p>The &#8220;Servers&#8221; tab should be exposed by default, but in case it isn&#8217;t, you can expose it via Window -&gt; Show View -&gt; Servers.  From there you can double-click on your server to configure it.<\/p>\n<p>Note that the configuration panel for your server has two tabs, &#8220;Overview&#8221; and &#8220;Modules&#8221;, down at the bottom of the window.  Click on the &#8220;Modules&#8221; tab to bring up the list of projects associated with the server.<\/p>\n<p>Select your project in the list and click on &#8220;Edit&#8221;. You&#8217;ll see the magic secret checkbox: &#8220;Auto reloading enabled&#8221;.  It&#8217;s checked by default.  For the love of Pete, uncheck it!<\/p>\n<p>(It&#8217;s interesting to note that <a href=\"http:\/\/www.zeroturnaround.com\/news\/javarebel-and-wtp-configuration\/\">JavaRebel also requires disabling auto reloading<\/a> to work properly in Eclipse.)<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/redfin.com\/blog\/devblog\/wp-content\/uploads\/sites\/3\/2009\/09\/magic-checkbox-screenshot-300x216.png\" alt=\"magic-checkbox-screenshot\" width=\"300\" height=\"216\" class=\"alignnone size-medium wp-image-177\" \/><\/p>\n<\/li>\n<li><a name=\"memory\"><\/a>Performance Tip: Adjust Memory Settings\n<p>Before you start up your server, I strongly recommend adjusting your server&#8217;s <kbd>-Xmx<\/kbd> memory settings; otherwise, it will constrain itself to the default value, 64 MB, which is just not enough!<\/p>\n<p>Double-click on your server in the &#8220;Servers&#8221; tab and switch to the &#8220;Overview&#8221; tab.  Click on the &#8220;Open launch configuration&#8221; link.  Switch to the Arguments tab; there you can add relevant memory settings to the &#8220;VM Arguments&#8221; section.  For example, you might add <kbd>-Xmx512m<\/kbd> to the end of the existing arguments.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/redfin.com\/blog\/devblog\/wp-content\/uploads\/sites\/3\/2009\/09\/memory-screenshot-300x273.png\" alt=\"memory-screenshot\" width=\"300\" height=\"273\" class=\"alignnone size-medium wp-image-178\" \/><\/p>\n<\/li>\n<li>Start Your Tomcat Server in Debug Mode\n<p>Now you can right-click on the Server in your Servers tab and choose &#8220;Debug&#8221;.  Changes you make to your JSPs or Java classes will be instantly hotswapped into your running WAR.<\/p>\n<\/li>\n<\/ol>\n<h2>Why Disable Auto Reloading?<\/h2>\n<p>Auto reloading is a feature of Tomcat that allows you to replace Java classes at runtime without using JPDA.  In this mode, Tomcat uses Java classloaders to try to unload classes and reload them; whenever it reloads, it also tries to reinitialize your application, re-launching any servlets that are marked <code>load-on-startup<\/code> in your <kbd>web.xml<\/kbd> file.<\/p>\n<p>As a result, Tomcat auto reloading may not save you any time at all if your webapp has a lot of startup code.  For example, if your load-on-startup code needs to warm up Hibernate database caches, Spring\/Guice dependency injection configuration, etc., it may take almost as long to restart your webapp as it does to restart Tomcat.<\/p>\n<p>Worse, an app that has been auto reloaded can behave strangely, and can quickly run out of PermGen memory due to frequent unloading\/reloading of classes.  When this happens, restarting Tomcat typically fixes the problem.  If you spend even five minutes investigating a weird auto reloading problem, you&#8217;ve just wasted all the time you were hoping to save by avoiding a restart.  (Not to mention your stress and frustration!)<\/p>\n<p>By disabling auto reloading and using JPDA hot code replace instead, you get a more reliable code replacement system.<\/p>\n<h2><a name=\"auto-publish\">Disable Auto Reloading but <em>Enable<\/em> Auto Publishing<\/a><\/h2>\n<p>In the screenshot above you can see how to disable auto reloading on the &#8220;Modules&#8221; tab of the Tomcat server; auto reloading is bad for JPDA debugging.  But there&#8217;s another setting called &#8220;Automatically publish when resources change&#8221; on the &#8220;Overview&#8221; tab of the Tomcat server.  It&#8217;s hidden by default, collapsed under the &#8220;Publishing&#8221; section.  You can see it if you expand that section; you want to make sure auto publishing is enabled while auto reloading is disabled.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/redfin.com\/blog\/devblog\/wp-content\/uploads\/sites\/3\/2009\/09\/autopublish-screenshot-300x205.png\" alt=\"autopublish-screenshot\" width=\"300\" height=\"205\" class=\"alignnone size-medium wp-image-173\" \/><\/p>\n<p>To understand the difference between auto publishing and auto reloading, we&#8217;ll have to go into how exactly Eclipse WTP works.  When you create a &#8220;Server&#8221; in Eclipse, the IDE creates a fake Tomcat directory, complete with the <kbd>conf<\/kbd>, <kbd>logs<\/kbd>, <kbd>temp<\/kbd>, <kbd>webapps<\/kbd> and <kbd>work<\/kbd> directories.  When you configured the server, you told Eclipse where to find Tomcat, but it doesn&#8217;t use any of your settings files or any data from your <kbd>webapps<\/kbd> directory.  Instead, Eclipse launches Tomcat with special command-line arguments, indicating where to find the fake Tomcat directory.<\/p>\n<p>&#8220;Publishing&#8221; means to populate the fake Tomcat directory with all of your code.  It copies your JSPs, JARs up your Java, regenerates settings files, etc.<\/p>\n<p>If you turn off auto publishing, then you have to right-click on your Server and &#8220;Publish&#8221; your changes manually every time you save your Java code.  Additionally, auto publishing allows Tomcat to reload JSPs automatically, regardless of whether you use JPDA or not.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/redfin.com\/blog\/devblog\/wp-content\/uploads\/sites\/3\/2009\/09\/server-menu-screenshot-300x279.png\" alt=\"server-menu-screenshot\" width=\"300\" height=\"279\" class=\"alignnone size-medium wp-image-179\" \/><\/p>\n<h2>Finding the <kbd>tmp0<\/kbd> Fake Tomcat Directory<\/h2>\n<p>Sometimes it can be helpful to look inside the fake Tomcat directory and see what&#8217;s going on in there.  Eclipse tells you where it put the Tomcat directory in the &#8220;Server Locations&#8221; section of your &#8220;Tomcat&#8221; server configuration panel.  (Double-click on your Server in the &#8220;Servers&#8221; tab to open the configuration panel.)  Typically, Eclipse says that your server is in <kbd>.metadata\/.plugins\/org.eclipse.wst.server.core\/tmp0<\/kbd>; for this reason I typically call it the <kbd>tmp0<\/kbd> directory (pronounced &#8220;tempo&#8221;).<\/p>\n<p>The <kbd>.metadata<\/kbd> folder is inside your Eclipse workspace directory.  (You can find your Eclipse workspace directory by going to File -&gt; Switch Workspace; the default value is your current workspace directory.)  In the worst case, you can always just search your hard drive for <kbd>tmp0<\/kbd>.  It&#8217;s there somewhere!<\/p>\n<p>Inside, you can see all the folders Eclipse has created.  Check out the generated <kbd>server.xml<\/kbd> file in <kbd>tmp0\/conf<\/kbd>.  Examine generated <kbd>.java<\/kbd> files in <kbd>tmp0\/work<\/kbd>.  Your <kbd>tmp0\/webapps<\/kbd> directory is probably empty; Eclipse has probably generated your webapp in <kbd>wtpwebapps<\/kbd>.<\/p>\n<h2><a name=\"exorcism\">Exorcising the <kbd>tmp0<\/kbd> Directory<\/a><\/h2>\n<p>Unfortunately, sometimes Eclipse gets a little confused about what to put in your WAR file, and you need to perform various stages of exorcism depending on how badly your <kbd>tmp0<\/kbd> directory is messed up.<\/p>\n<ul>\n<li>Try republishing your <kbd>tmp0<\/kbd> directory.  Open the &#8220;Servers&#8221; tab, right-click on your server and select &#8220;Clean&#8230;&#8221; (<em>not<\/em> &#8220;Clean Tomcat Work Directory&#8230;&#8221;).  Then select &#8220;Publish.&#8221;  That should completely rebuild your <kbd>tmp0<\/kbd> directory.<\/li>\n<li>Try restarting Eclipse.  This works more often than I&#8217;d like to admit.<\/li>\n<li>Try completely deleting and recreating your server.  Follow this ritual:\n<ol>\n<li>Open the &#8220;Servers&#8221; tab, right-click on the server and select &#8220;Delete&#8221;.<\/li>\n<li>Make sure &#8220;Delete unused server configuration(s)&#8221; is checked, then click OK.<\/li>\n<li>Look at your &#8220;Servers&#8221; pseudo-project; make sure the folder for your server is gone.  If it isn&#8217;t, right-click on it and Delete it.<\/li>\n<li>Quit Eclipse.<\/li>\n<li>Go find your <kbd>tmp0<\/kbd> directory (if it&#8217;s still present) and delete it from your file system.<\/li>\n<li>Launch Eclipse and recreate your server from scratch.<\/li>\n<\/ol>\n<\/li>\n<li>Try creating a new workspace.  File -&gt; Switch Workspaces: specify an empty directory.  Create your server from scratch.<\/li>\n<\/ul>\n<h2>Troubleshooting: What Do I Do If I Still Can&#8217;t Get It to Work?<\/h2>\n<ul>\n<li><a name=\"regular\"><\/a>My project works in regular Tomcat, but doesn&#8217;t work in Tomcat under Eclipse\n<p>Try using Eclipse to generate a WAR file for Tomcat.  Right-click on your web project and select Export -&gt; WAR file, and install it in Tomcat by dropping the exported WAR into your Tomcat <kbd>webapps<\/kbd> directory.<\/p>\n<p>If the exported WAR file doesn&#8217;t work, then you now have two WARs: one working WAR generated by your build script, and one non-working WAR generated by Eclipse.  WAR files are just zips; extract them both, find the difference, and fix it!  Right-click on your web project and select &#8220;Properties&#8221;.  The problem is somewhere in here.<\/p>\n<p>On the other hand, if the exported WAR file <em>does<\/em> work, then you know that the problem has to do with the way Eclipse is launching Tomcat.  Find your <kbd>tmp0<\/kbd> directory (described above) and poke around.  Does everything look OK in there?  Be sure to check your <kbd>server.xml<\/kbd> file, as well as your webapp itself in <kbd>wtpwebapps<\/kbd>.  Make sure to note your <kbd>WEB-INF\/lib<\/kbd> directory, typically in <kbd>tmp0\/wtpwebapps\/YOURAPP\/WEB-INF\/lib<\/kbd>.<\/p>\n<\/li>\n<li>Tomcat is throwing <kbd>NoClassDefFoundError<\/kbd> or <kbd>ClassNotFoundException<\/kbd>\n<p>First, double-check whether this problem happens in regular Tomcat.  See <a href=\"#regular\">My project works in regular Tomcat, but doesn&#8217;t work in Tomcat under Eclipse<\/a> above.<\/p>\n<p>If this problem occurs in the exported WAR file under regular Tomcat, then your webapp is probably missing JARs.  See <a href=\"#missing-jars\">My exported WAR is missing JARs<\/a> below.<\/p>\n<p>If the exported WAR works but your webapp is still broken under Tomcat, you may need to perform an exorcism.  (See <a href=\"#exorcism\">Exorcising the <kbd>tmp0<\/kbd> Directory<\/a> above.) If this happens to you often, double-check that you haven&#8217;t accidentally disabled auto publishing.  (See <a href=\"#auto-publish\">Disable Auto Reloading but <em>Enable<\/em> Auto Publishing<\/a> above.)<\/p>\n<\/li>\n<li><a name=\"missing-jars\"><\/a>My exported WAR is missing JARs\n<p>Right-click on your web project and select &#8220;Properties.&#8221;  The problem is somewhere in here.  Make sure you see your JAR listed under &#8220;Java Build Path&#8221; in the Properties dialog.<\/p>\n<p>Beware: not every JAR in &#8220;Java Build Path&#8221; gets exported to the WAR.  The list of JARs for the WAR is under &#8220;Java EE Module Dependencies.&#8221;  If a JAR\/project is unchecked on that list, it won&#8217;t appear in your WAR file.<\/p>\n<\/li>\n<li>My <kbd>tmp0<\/kbd> directory is missing an important configuration file\n<p>Eclipse will publish files that it finds in the &#8220;Tomcat&#8221; folder of the &#8220;Servers&#8221; pseudo-project to your <kbd>tmp0\/conf<\/kbd> directory; if you&#8217;re missing files, you can add them here.<\/p>\n<\/li>\n<li>My <kbd>server.xml<\/kbd> file is messed up\n<p>That file is copied from the &#8220;Tomcat&#8221; folder in your &#8220;Servers&#8221; pseudo-project to your <kbd>tmp0\/conf<\/kbd> directory.  But note that the <kbd>server.xml<\/kbd> file is at least partially autogenerated by Eclipse.  If you make direct changes to the file, Eclipse will do its best to try to incorporate your changes, but it often gets confused and does the wrong thing.  When possible, it&#8217;s better to find the appropriate Eclipse settings and change them there instead of modifying the <kbd>server.xml<\/kbd> file directly.<\/p>\n<p>Note that one of the most common problems with <kbd>server.xml<\/kbd> is an incorrect <code>path<\/code> attribute on your webapp&#8217;s <code>&lt;Context&gt;<\/code> element, causing your webapp to appear on a non-standard URL.  See the following question about 404 errors for more details about this problem.<\/p>\n<\/li>\n<li>Tomcat is giving me strange 404 errors\n<p>First, double-check whether this problem happens in regular Tomcat.  (See <a href=\"#regular\">My project works in regular Tomcat, but doesn&#8217;t work in Tomcat under Eclipse<\/a>)  If it happens in regular Tomcat too, then it&#8217;s probably a bug in your code.<\/p>\n<p>If the problem only happens in Eclipse, then it&#8217;s probably a <kbd>server.xml<\/kbd> configuration problem.  Check your <kbd>tmp0\/conf\/server.xml<\/kbd> file&#8217;s <code>&lt;Context&gt;<\/code> element; check the <code>path<\/code> attribute.  The <code>path<\/code> attribute indicates the virtual directory of your webapp.  For example, if your <kbd>Context\/path<\/kbd> is &#8220;examplePath&#8221;, then your webapp will appear at <kbd>http:\/\/localhost:8080\/examplePath<\/kbd>.  If it&#8217;s misconfigured, your webapp may not be available at the URL you expect.<\/p>\n<p>The <kbd>path<\/kbd> attribute is auto-generated based on settings in the properties of your WAR project.  Right-click on your web project, select &#8220;Properties&#8221; and go to the &#8220;Web Project Settings&#8221; section.  There&#8217;s only one setting here; it&#8217;s called &#8220;Context root&#8221;.  Specify the context you intend to use here.  If you want your project to appear in the root directory, you&#8217;ll need to put <kbd>\/<\/kbd> as your context root (since you aren&#8217;t allowed to leave it blank).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/redfin.com\/blog\/devblog\/wp-content\/uploads\/sites\/3\/2009\/09\/context-root-screenshot-300x272.png\" alt=\"context-root-screenshot\" width=\"300\" height=\"272\" class=\"alignnone size-medium wp-image-174\" \/><\/p>\n<\/li>\n<li>Tomcat times out when starting under Eclipse (&#8220;Server [&#8230;] was unable to start within 45 seconds&#8221;)\n<p>The Eclipse developers, in their infinite wisdom, have added a timeout to Tomcat startup.  If Tomcat doesn&#8217;t declare a successful startup in 45 seconds, it kills Tomcat automatically.  (Gee, thanks, guys!)<\/p>\n<p>You can increase that timeout.  Open the &#8220;Servers&#8221; tab and double-clicking on your server to open the server configuration panel.  Make sure the panel&#8217;s &#8220;Overview&#8221; tab is selected.  Expand the &#8220;Timeouts&#8221; section and increase the Start timeout to something reasonable for your server.<\/p>\n<\/li>\n<li>I had Tomcat working under Eclipse, but now it&#8217;s broken and I can&#8217;t figure out why\n<p>You may need to perform an exorcism.  (See <a href=\"#exorcism\">Exorcising the <kbd>tmp0<\/kbd> Directory<\/a> above.)<\/p>\n<\/li>\n<li>My web project starts up fine, but when I save <kbd>.java<\/kbd> files in Eclipse, it doesn&#8217;t take effect until I restart\n<ul>\n<li>Did you make sure to launch the server in Debug mode, as opposed to Run mode?  JPDA only works when you Debug the server.<\/li>\n<li>Is your server configured to auto publish?  (See <a href=\"#auto-publish\">Disable auto reloading but <em>Enable<\/em> auto publishing<\/a> above.)<\/li>\n<li>Did you change something that broke JPDA?  (See <a href=\"#catch\">What&#8217;s the catch?<\/a> above.)  If you make large changes to your classes, JPDA may be unable to replace the code; if you choose to &#8220;Continue&#8221; past that point, further changes will have no effect.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<li>My web project starts up fine, but when I save <kbd>.jsp<\/kbd> files in Eclipse, it doesn&#8217;t take effect until I restart\n<p>This is typically due to disabled auto publishing.  Double-check that your server is configured to auto publish.  (See <a href=\"#auto-publish\">Disable auto reloading but <em>Enable<\/em> auto publishing<\/a> above.)<\/p>\n<p>If that doesn&#8217;t work, examine your <kbd>tmp0<\/kbd> directory to make sure Tomcat is using the correct JSP.  It should automatically begin consuming new JSPs as they are installed in the <kbd>tmp0\/wtpwebapps<\/kbd> directory.<\/p>\n<\/li>\n<li>Whenever I save a <kbd>.java<\/kbd> file in Eclipse, Tomcat restarts\n<p>This is typically due to Tomcat auto reloading.  Double-check that you correctly disabled auto reloading.  (See <a href=\"#magic-setting\">Magic Setting<\/a> above.)<\/p>\n<\/li>\n<li>Tomcat in Eclipse is <i>much<\/i> slower than regular Tomcat\n<p>Try increasing your <a href=\"#memory\">memory settings<\/a> as described above, if you haven&#8217;t already.<\/p>\n<p>Try running Tomcat in &#8220;Run&#8221; mode (as opposed to &#8220;Debug&#8221;) mode.  If that fixes the problem, then there may be nothing you can do about it.  JPDA does have some overhead; you can turn it off, but while you&#8217;ve turned it off you won&#8217;t have access to hot code replacement.<\/p>\n<\/li>\n","protected":false},"excerpt":{"rendered":"<p>This blog post will guide you through setting up Tomcat hot code replacement (also called hotswap debugging) in Eclipse. What Is &#8220;Hot Code Replace&#8221;? What&#8217;s the Catch? What About JavaRebel? Configuring Your Web Application in Eclipse Download Eclipse &#8220;JEE&#8221; Edition Switch to the &#8220;Java EE&#8221; Perspective Configure Your WAR Project Create a New Server Magic [&hellip;]<\/p>\n","protected":false},"author":13152,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[57],"tags":[],"dashboard":[],"coauthors":[],"class_list":["post-2928","post","type-post","status-publish","format-standard","hentry","category-company-news"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.7 (Yoast SEO v27.7) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>How to Set Up Hot Code Replacement with Tomcat and Eclipse - Redfin Real Estate News<\/title>\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.redfin.com\/news\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Set Up Hot Code Replacement with Tomcat and Eclipse\" \/>\n<meta property=\"og:description\" content=\"This blog post will guide you through setting up Tomcat hot code replacement (also called hotswap debugging) in Eclipse. What Is &#8220;Hot Code Replace&#8221;? What&#8217;s the Catch? What About JavaRebel? Configuring Your Web Application in Eclipse Download Eclipse &#8220;JEE&#8221; Edition Switch to the &#8220;Java EE&#8221; Perspective Configure Your WAR Project Create a New Server Magic [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.redfin.com\/news\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\/\" \/>\n<meta property=\"og:site_name\" content=\"Redfin Real Estate News\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/redfin\" \/>\n<meta property=\"article:published_time\" content=\"2009-09-30T19:28:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-10-05T20:12:40+00:00\" \/>\n<meta name=\"author\" content=\"Dan Fabulich\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@redfin\" \/>\n<meta name=\"twitter:site\" content=\"@redfin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Dan Fabulich\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\\\/\"},\"author\":{\"name\":\"Dan Fabulich\",\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/#\\\/schema\\\/person\\\/6d6535d7d227b820f449877e0081154f\"},\"headline\":\"How to Set Up Hot Code Replacement with Tomcat and Eclipse\",\"datePublished\":\"2009-09-30T19:28:32+00:00\",\"dateModified\":\"2020-10-05T20:12:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\\\/\"},\"wordCount\":3051,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/redfin.com\\\/blog\\\/devblog\\\/wp-content\\\/uploads\\\/sites\\\/3\\\/2009\\\/09\\\/unchangeable-300x115.png\",\"articleSection\":[\"Company News\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.redfin.com/news\\\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\\\/#respond\"]}],\"copyrightYear\":\"2009\",\"copyrightHolder\":{\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\\\/\",\"url\":\"https:\\\/\\\/www.redfin.com/news\\\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\\\/\",\"name\":\"How to Set Up Hot Code Replacement with Tomcat and Eclipse - Redfin Real Estate News\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/redfin.com\\\/blog\\\/devblog\\\/wp-content\\\/uploads\\\/sites\\\/3\\\/2009\\\/09\\\/unchangeable-300x115.png\",\"datePublished\":\"2009-09-30T19:28:32+00:00\",\"dateModified\":\"2020-10-05T20:12:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.redfin.com/news\\\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\\\/#primaryimage\",\"url\":\"https:\\\/\\\/redfin.com\\\/blog\\\/devblog\\\/wp-content\\\/uploads\\\/sites\\\/3\\\/2009\\\/09\\\/unchangeable-300x115.png\",\"contentUrl\":\"https:\\\/\\\/redfin.com\\\/blog\\\/devblog\\\/wp-content\\\/uploads\\\/sites\\\/3\\\/2009\\\/09\\\/unchangeable-300x115.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.redfin.com/news\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Set Up Hot Code Replacement with Tomcat and Eclipse\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/#website\",\"url\":\"https:\\\/\\\/www.redfin.com/news\\\/\",\"name\":\"Redfin Real Estate News\",\"description\":\"The latest real estate news and research from technology-powered residential real estate company, Redfin.\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.redfin.com/news\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/#organization\",\"name\":\"Redfin\",\"url\":\"https:\\\/\\\/www.redfin.com/news\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.redfin.com\\\/news\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/Redfin-News-Logo.png\",\"contentUrl\":\"https:\\\/\\\/www.redfin.com\\\/news\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/Redfin-News-Logo.png\",\"width\":1100,\"height\":235,\"caption\":\"Redfin\"},\"image\":{\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/redfin\",\"https:\\\/\\\/x.com\\\/redfin\",\"https:\\\/\\\/www.instagram.com\\\/redfinrealestate\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/redfin\",\"https:\\\/\\\/www.pinterest.com\\\/redfin\\\/\",\"https:\\\/\\\/en.wikipedia.org\\\/wiki\\\/Redfin\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.redfin.com/news\\\/#\\\/schema\\\/person\\\/6d6535d7d227b820f449877e0081154f\",\"name\":\"Dan Fabulich\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/75c9d9830e7679a354962b0e5a761bd7d542e3ef7b9398657b38ba265a6a1903?s=96&d=wp_user_avatar&r=g54c6285ff27705cd6a598da01a9516ab\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/75c9d9830e7679a354962b0e5a761bd7d542e3ef7b9398657b38ba265a6a1903?s=96&d=wp_user_avatar&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/75c9d9830e7679a354962b0e5a761bd7d542e3ef7b9398657b38ba265a6a1903?s=96&d=wp_user_avatar&r=g\",\"caption\":\"Dan Fabulich\"},\"url\":\"https:\\\/\\\/www.redfin.com/news\\\/author\\\/dan-fabulichredfin-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to Set Up Hot Code Replacement with Tomcat and Eclipse - Redfin Real Estate News","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.redfin.com\/news\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\/","og_locale":"en_US","og_type":"article","og_title":"How to Set Up Hot Code Replacement with Tomcat and Eclipse","og_description":"This blog post will guide you through setting up Tomcat hot code replacement (also called hotswap debugging) in Eclipse. What Is &#8220;Hot Code Replace&#8221;? What&#8217;s the Catch? What About JavaRebel? Configuring Your Web Application in Eclipse Download Eclipse &#8220;JEE&#8221; Edition Switch to the &#8220;Java EE&#8221; Perspective Configure Your WAR Project Create a New Server Magic [&hellip;]","og_url":"https:\/\/www.redfin.com\/news\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\/","og_site_name":"Redfin Real Estate News","article_publisher":"https:\/\/www.facebook.com\/redfin","article_published_time":"2009-09-30T19:28:32+00:00","article_modified_time":"2020-10-05T20:12:40+00:00","author":"Dan Fabulich","twitter_card":"summary_large_image","twitter_creator":"@redfin","twitter_site":"@redfin","twitter_misc":{"Written by":"Dan Fabulich","Est. reading time":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.redfin.com\/news\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\/#article","isPartOf":{"@id":"https:\/\/www.redfin.com\/news\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\/"},"author":{"name":"Dan Fabulich","@id":"https:\/\/www.redfin.com\/news\/#\/schema\/person\/6d6535d7d227b820f449877e0081154f"},"headline":"How to Set Up Hot Code Replacement with Tomcat and Eclipse","datePublished":"2009-09-30T19:28:32+00:00","dateModified":"2020-10-05T20:12:40+00:00","mainEntityOfPage":{"@id":"https:\/\/www.redfin.com\/news\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\/"},"wordCount":3051,"commentCount":0,"publisher":{"@id":"https:\/\/www.redfin.com\/news\/#organization"},"image":{"@id":"https:\/\/www.redfin.com\/news\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\/#primaryimage"},"thumbnailUrl":"https:\/\/redfin.com\/blog\/devblog\/wp-content\/uploads\/sites\/3\/2009\/09\/unchangeable-300x115.png","articleSection":["Company News"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.redfin.com\/news\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\/#respond"]}],"copyrightYear":"2009","copyrightHolder":{"@id":"https:\/\/www.redfin.com\/news\/#organization"}},{"@type":"WebPage","@id":"https:\/\/www.redfin.com\/news\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\/","url":"https:\/\/www.redfin.com\/news\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\/","name":"How to Set Up Hot Code Replacement with Tomcat and Eclipse - Redfin Real Estate News","isPartOf":{"@id":"https:\/\/www.redfin.com\/news\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.redfin.com\/news\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\/#primaryimage"},"image":{"@id":"https:\/\/www.redfin.com\/news\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\/#primaryimage"},"thumbnailUrl":"https:\/\/redfin.com\/blog\/devblog\/wp-content\/uploads\/sites\/3\/2009\/09\/unchangeable-300x115.png","datePublished":"2009-09-30T19:28:32+00:00","dateModified":"2020-10-05T20:12:40+00:00","breadcrumb":{"@id":"https:\/\/www.redfin.com\/news\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.redfin.com\/news\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.redfin.com\/news\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\/#primaryimage","url":"https:\/\/redfin.com\/blog\/devblog\/wp-content\/uploads\/sites\/3\/2009\/09\/unchangeable-300x115.png","contentUrl":"https:\/\/redfin.com\/blog\/devblog\/wp-content\/uploads\/sites\/3\/2009\/09\/unchangeable-300x115.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.redfin.com\/news\/how_to_set_up_hot_code_replacement_with_tomcat_and_eclipse\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.redfin.com\/news\/"},{"@type":"ListItem","position":2,"name":"How to Set Up Hot Code Replacement with Tomcat and Eclipse"}]},{"@type":"WebSite","@id":"https:\/\/www.redfin.com\/news\/#website","url":"https:\/\/www.redfin.com\/news\/","name":"Redfin Real Estate News","description":"The latest real estate news and research from technology-powered residential real estate company, Redfin.","publisher":{"@id":"https:\/\/www.redfin.com\/news\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.redfin.com\/news\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.redfin.com\/news\/#organization","name":"Redfin","url":"https:\/\/www.redfin.com\/news\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.redfin.com\/news\/#\/schema\/logo\/image\/","url":"https:\/\/www.redfin.com\/news\/wp-content\/uploads\/2020\/10\/Redfin-News-Logo.png","contentUrl":"https:\/\/www.redfin.com\/news\/wp-content\/uploads\/2020\/10\/Redfin-News-Logo.png","width":1100,"height":235,"caption":"Redfin"},"image":{"@id":"https:\/\/www.redfin.com\/news\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/redfin","https:\/\/x.com\/redfin","https:\/\/www.instagram.com\/redfinrealestate\/","https:\/\/www.linkedin.com\/company\/redfin","https:\/\/www.pinterest.com\/redfin\/","https:\/\/en.wikipedia.org\/wiki\/Redfin"]},{"@type":"Person","@id":"https:\/\/www.redfin.com\/news\/#\/schema\/person\/6d6535d7d227b820f449877e0081154f","name":"Dan Fabulich","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/75c9d9830e7679a354962b0e5a761bd7d542e3ef7b9398657b38ba265a6a1903?s=96&d=wp_user_avatar&r=g54c6285ff27705cd6a598da01a9516ab","url":"https:\/\/secure.gravatar.com\/avatar\/75c9d9830e7679a354962b0e5a761bd7d542e3ef7b9398657b38ba265a6a1903?s=96&d=wp_user_avatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/75c9d9830e7679a354962b0e5a761bd7d542e3ef7b9398657b38ba265a6a1903?s=96&d=wp_user_avatar&r=g","caption":"Dan Fabulich"},"url":"https:\/\/www.redfin.com\/news\/author\/dan-fabulichredfin-com\/"}]}},"_links":{"self":[{"href":"https:\/\/www.redfin.com\/news\/wp-json\/wp\/v2\/posts\/2928","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.redfin.com\/news\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.redfin.com\/news\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.redfin.com\/news\/wp-json\/wp\/v2\/users\/13152"}],"replies":[{"embeddable":true,"href":"https:\/\/www.redfin.com\/news\/wp-json\/wp\/v2\/comments?post=2928"}],"version-history":[{"count":0,"href":"https:\/\/www.redfin.com\/news\/wp-json\/wp\/v2\/posts\/2928\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.redfin.com\/news\/wp-json\/wp\/v2\/media?parent=2928"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.redfin.com\/news\/wp-json\/wp\/v2\/categories?post=2928"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.redfin.com\/news\/wp-json\/wp\/v2\/tags?post=2928"},{"taxonomy":"dashboard","embeddable":true,"href":"https:\/\/www.redfin.com\/news\/wp-json\/wp\/v2\/dashboard?post=2928"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.redfin.com\/news\/wp-json\/wp\/v2\/coauthors?post=2928"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}