{"id":1203,"date":"2015-01-22T22:23:47","date_gmt":"2015-01-23T01:23:47","guid":{"rendered":"http:\/\/www.boaglio.com\/?p=1203"},"modified":"2021-02-08T15:38:45","modified_gmt":"2021-02-08T18:38:45","slug":"alternativa-gratuita-ao-jrebel","status":"publish","type":"post","link":"https:\/\/boaglio.com\/index.php\/2015\/01\/22\/alternativa-gratuita-ao-jrebel\/","title":{"rendered":"Alternativa gratuita ao JRebel"},"content":{"rendered":"<p>\u00c9 na hora do stop \/ start dos servidores Java que bate aquela inveja do PHP, que consegue fazer um refresh geral apenas com um F5 no browser.<\/p>\n<p>A empresa que resolveu esse problema (<strong>ZeroTurnaround<\/strong>) est\u00e1 ganhando uma boa grana com isso, vendendo licen\u00e7as a um d\u00f3lar por dia com o software <a title=\"JRebel\" href=\"http:\/\/zeroturnaround.com\/software\/jrebel\/\" target=\"_blank\" rel=\"noopener\">JRebel<\/a><\/p>\n<p><a href=\"http:\/\/www.boaglio.com\/wp-content\/uploads\/2015\/01\/jrebel_logo-RGB.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1206\" src=\"http:\/\/www.boaglio.com\/wp-content\/uploads\/2015\/01\/jrebel_logo-RGB.png\" alt=\"jrebel_logo-RGB\" width=\"534\" height=\"144\" srcset=\"https:\/\/boaglio.com\/wp-content\/uploads\/2015\/01\/jrebel_logo-RGB.png 534w, https:\/\/boaglio.com\/wp-content\/uploads\/2015\/01\/jrebel_logo-RGB-300x81.png 300w\" sizes=\"auto, (max-width: 534px) 100vw, 534px\" \/><\/a><\/p>\n<p>Entretanto, um excelente projeto semelhante n\u00e3o tem ganhado o foco que merece, talvez pela falta de usu\u00e1rios ou de documenta\u00e7\u00e3o.<\/p>\n<p>Conhe\u00e7a a alternativa <strong>gratuita<\/strong> e <strong>livre<\/strong>: <a href=\"http:\/\/ssw.jku.at\/dcevm\/\" target=\"_blank\" rel=\"noopener\">Dynamic Code Evolution Virtual Machine<\/a> ou simplesmente <strong>DCE-VM<\/strong>, criada pelo desenvolvedor Thomas W\u00fcrthinger que colocou sua <a title=\"tese\" href=\"http:\/\/ssw.jku.at\/Research\/Papers\/Wuerthinger10a\/Wuerthinger10a.pdf\" target=\"_blank\" rel=\"noopener\">tese<\/a> em pr\u00e1tica.<\/p>\n<p>Ao contr\u00e1rio do <strong>JRebel<\/strong>, que encapsula a JVM para fazer o hotswap das classes, o <strong>DCE-VM<\/strong> altera o seu JRE, substituindo o hotswap limitado da JVM tradicional.<\/p>\n<p>Atualmente o projeto est\u00e1 no <strong>github<\/strong>, e o link para download as vers\u00f5es recentes \u00e9 esse: <a title=\"https:\/\/dcevm.github.io\/\" href=\"https:\/\/dcevm.github.io\/\" target=\"_blank\" rel=\"noopener\">https:\/\/dcevm.github.io\/<\/a><\/p>\n<p>Se voc\u00ea usa o <em>IntelliJ<\/em>, <a href=\"http:\/\/antonshchastnyi.blogspot.com.br\/2014\/07\/dcevm-dynamic-code-evolution-vm.html\" target=\"_blank\" rel=\"noopener\">tem um plugin pronto pra ele<\/a>.<\/p>\n<p>Se voc\u00ea usa <em>Eclipse<\/em> ou outro editor, vou explicar aqui como \u00e9 simples o seu uso.<\/p>\n<p>Os passos s\u00e3o esses para usar a sua aplica\u00e7\u00e3o com o Apache Tomcat 7 :<\/p>\n<ol>\n<li>baixar uma JDK compat\u00edvel 1.7 ou 1.8 se necess\u00e1rio;<\/li>\n<li>instalar o <strong>DCE-VM<\/strong> na JDK;<\/li>\n<li>configurar o seu ambiente para usar essa JDK;<\/li>\n<li>adicionar <em>CMSClassUnloadingEnabled<\/em> nos par\u00e2metros da JVM;<\/li>\n<li>conectar em modo Debug \u00e0 JVM do Apache Tomcat 7;<\/li>\n<li>codificar, gravar e testar no browser \\o\/<\/li>\n<\/ol>\n<p>Eu fiz o teste com a <a href=\"http:\/\/www.oracle.com\/technetwork\/java\/javase\/downloads\/java-archive-downloads-javase7-521261.html\" target=\"_blank\" rel=\"noopener\">JDK 7 update 51 &#8211; 64 bits<\/a> instalada em um diret\u00f3rio alternativo: <strong>\/home\/fb\/jdk\/jdk1.7.0_51<\/strong> baixando o<br \/>\n<a href=\"https:\/\/github.com\/dcevm\/dcevm\/releases\/download\/full-7u51%2B3\/installer-full-jdk7u51.3.jar\" target=\"_blank\" rel=\"noopener\">instalador para essa mesma vers\u00e3o<\/a>.<\/p>\n<p>Depois iniciei o instalador:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">$ java -jar installer-full-jdk7u51.3.jar<\/pre>\n<p>O instalador identifica as instala\u00e7\u00f5es de JDK existentes:<\/p>\n<p><a href=\"http:\/\/www.boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm11.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1209\" src=\"http:\/\/www.boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm11.png\" alt=\"dce-vm1\" width=\"924\" height=\"595\" srcset=\"https:\/\/boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm11.png 924w, https:\/\/boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm11-300x193.png 300w\" sizes=\"auto, (max-width: 924px) 100vw, 924px\" \/><\/a><\/p>\n<p>Clicando na op\u00e7\u00e3o &#8220;<em>Add installation directory&#8230;<\/em>&#8220;, adiciono o diret\u00f3rio <strong>\/home\/fb\/jdk\/jdk1.7.0_51<\/strong> :<\/p>\n<p><a href=\"http:\/\/www.boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1210\" src=\"http:\/\/www.boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm2.png\" alt=\"dce-vm2\" width=\"924\" height=\"595\" srcset=\"https:\/\/boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm2.png 924w, https:\/\/boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm2-300x193.png 300w\" sizes=\"auto, (max-width: 924px) 100vw, 924px\" \/><\/a><\/p>\n<p>Depois escolhendo a op\u00e7\u00e3o &#8220;<em>Replace by DCEVM<\/em>&#8221; o instalador faz a troca:<\/p>\n<p><a href=\"http:\/\/www.boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1211\" src=\"http:\/\/www.boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm3.png\" alt=\"dce-vm3\" width=\"924\" height=\"595\" srcset=\"https:\/\/boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm3.png 924w, https:\/\/boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm3-300x193.png 300w\" sizes=\"auto, (max-width: 924px) 100vw, 924px\" \/><\/a><\/p>\n<p>Ao exibir a vers\u00e3o do Java verificamos que foi instalado com sucesso:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">fb@cascao ~ &gt; \/home\/fb\/jdk\/jdk1.7.0_51\/bin\/java -version\r\njava version &amp;quot;1.7.0_51&amp;quot;\r\nJava(TM) SE Runtime Environment (build 1.7.0_51-b13)\r\nDynamic Code Evolution 64-Bit Server VM (build 24.51-b03-dcevmfull-3, mixed mode)<\/pre>\n<p>Nos meus projetos eu uso o <a href=\"http:\/\/tomcat.apache.org\/maven-plugin-2.0\/tomcat7-maven-plugin\/\" target=\"_blank\" rel=\"noopener\">plugin do Maven para subir o Tomcat 7 localmente<\/a>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\">&lt;plugin&gt;\r\n &lt;groupId&gt;org.apache.tomcat.maven&lt;\/groupId&gt;\r\n &lt;artifactId&gt;tomcat7-maven-plugin&lt;\/artifactId&gt;\r\n &lt;version&gt;2.2&lt;\/version&gt;\r\n &lt;configuration&gt;\r\n  &lt;port&gt;8080&lt;\/port&gt;\r\n  &lt;path&gt;\/&lt;\/path&gt;\r\n &lt;\/configuration&gt;\r\n&lt;\/plugin&gt;<\/pre>\n<p>Usei um projeto bem simples com <strong>Spring<\/strong>, com um controller assim:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">@Controller\r\npublic class TesteController {\r\n\r\n    @RequestMapping(value = \"\/teste\",method = RequestMethod.GET)\r\n    protected void teste(ModelMap model) {\r\n\r\n        model.put(\"valor\",\"Funciona ?\");\r\n\r\n    }\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p>Que chama uma p\u00e1gina JSP extremamente simples:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\">&lt;html&gt;\r\n&lt;h1&gt;${valor}&lt;\/h1&gt;\r\n&lt;\/html&gt;<\/pre>\n<p>Subi o servidor com o script abaixo, note os par\u00e2metros da JVM de debug junto com o <em>CMSClassUnloadingEnabled<\/em>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">export JAVA_HOME=\/home\/fb\/jdk\/1.7\r\nexport PATH=$JAVA_HOME\/bin:$PATH\r\nexport MAVEN_OPTS=\" -Xmx512m -XX:MaxHeapSize=512m -XX:MaxPermSize=512M -XX:+CMSClassUnloadingEnabled -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=n\"\r\n \r\nmvn clean install tomcat7:run<\/pre>\n<p>Acessando a p\u00e1gina de teste, temos:<\/p>\n<p><a href=\"http:\/\/www.boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm4.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1217\" src=\"http:\/\/www.boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm4.png\" alt=\"dce-vm4\" width=\"445\" height=\"172\" srcset=\"https:\/\/boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm4.png 445w, https:\/\/boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm4-300x116.png 300w\" sizes=\"auto, (max-width: 445px) 100vw, 445px\" \/><\/a><\/p>\n<p>Agora, pelo Eclipse conectamos ao servidor em modo <strong>debug<\/strong>:<\/p>\n<p><a href=\"http:\/\/www.boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm5.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1218\" src=\"http:\/\/www.boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm5.png\" alt=\"dce-vm5\" width=\"627\" height=\"363\" srcset=\"https:\/\/boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm5.png 627w, https:\/\/boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm5-300x174.png 300w\" sizes=\"auto, (max-width: 627px) 100vw, 627px\" \/><\/a><\/p>\n<p>E vamos fazer uma altera\u00e7\u00e3o no sistema, criando uma nova classe:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">public class Teste {\r\n\r\n    public String nome() {\r\n        return \"Siiiim ! http:\/\/www.boaglio.com\";\r\n    }\r\n}<\/pre>\n<p>E alterar a classe existente para chamar a classe nova:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">@Controller\r\npublic class TesteController {\r\n\r\n\r\n    @RequestMapping(value = \"\/teste\",method = RequestMethod.GET)\r\n    protected void teste(ModelMap model) {\r\n\r\n        model.put(\"valor\",\"Funciona ? \"+ new Teste().nome());\r\n\r\n    }\r\n\r\n}<\/pre>\n<p>E fazendo o reload, percebemos a p\u00e1gina atualizada:<\/p>\n<p><a href=\"http:\/\/www.boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm6.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1220\" src=\"http:\/\/www.boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm6.png\" alt=\"dce-vm6\" width=\"671\" height=\"185\" srcset=\"https:\/\/boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm6.png 671w, https:\/\/boaglio.com\/wp-content\/uploads\/2015\/01\/dce-vm6-300x83.png 300w\" sizes=\"auto, (max-width: 671px) 100vw, 671px\" \/><\/a><\/p>\n<p><strong>Uau! Atualizou sem stop \/ start!<\/strong><\/p>\n<p><a href=\"http:\/\/www.boaglio.com\/wp-content\/uploads\/2015\/01\/happy-cuteness-overload-l.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1222\" src=\"http:\/\/www.boaglio.com\/wp-content\/uploads\/2015\/01\/happy-cuteness-overload-l.png\" alt=\"happy-cuteness-overload-l\" width=\"600\" height=\"597\" srcset=\"https:\/\/boaglio.com\/wp-content\/uploads\/2015\/01\/happy-cuteness-overload-l.png 600w, https:\/\/boaglio.com\/wp-content\/uploads\/2015\/01\/happy-cuteness-overload-l-150x150.png 150w, https:\/\/boaglio.com\/wp-content\/uploads\/2015\/01\/happy-cuteness-overload-l-300x300.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<p>Uma l\u00e1grima caiu do seu olho e finalmente voc\u00ea pode comparar PHP ao Java&#8230; =)<\/p>\n<p>Mas calma l\u00e1, nem tudo s\u00e3o flores&#8230; hoje em dia sempre usamos frameworks, e as vezes nem esse hotdeploy adianta, pois, por exemplo, o <em>Spring MVC<\/em> possui um contexto que \u00e9 registrado no in\u00edcio da aplica\u00e7\u00e3o, se voc\u00ea, pode exemplo, adicionar uma classe nova e usar <em>@RequestMapping(value = &#8220;\/outro-teste&#8221;)<\/em> n\u00e3o vai funcionar, pois a classe nova est\u00e1 l\u00e1, mas o contexto do Spring <em>continua o mesmo<\/em>.<\/p>\n<p>Nesse sentido o JRebel \u00e9 bem mais maduro, mas <strong>com certeza o DCE-VM te salvar\u00e1 alguns minutos ou horas de sua vida, aproveite! <\/strong>. =)<\/p>\n<p><strong>Fernando Boaglio, para a comunidade<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00c9 na hora do stop \/ start dos servidores Java que bate aquela inveja do PHP, que consegue fazer um refresh geral apenas com um F5 no browser. A empresa que resolveu esse problema (ZeroTurnaround) est\u00e1 ganhando uma boa grana com isso, vendendo licen\u00e7as a um d\u00f3lar por dia com o software JRebel Entretanto, um [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14,1],"tags":[],"class_list":["post-1203","post","type-post","status-publish","format-standard","hentry","category-eclipse","category-java"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Alternativa gratuita ao JRebel - Boaglio.com<\/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:\/\/boaglio.com\/index.php\/2015\/01\/22\/alternativa-gratuita-ao-jrebel\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Alternativa gratuita ao JRebel - Boaglio.com\" \/>\n<meta property=\"og:description\" content=\"\u00c9 na hora do stop \/ start dos servidores Java que bate aquela inveja do PHP, que consegue fazer um refresh geral apenas com um F5 no browser. A empresa que resolveu esse problema (ZeroTurnaround) est\u00e1 ganhando uma boa grana com isso, vendendo licen\u00e7as a um d\u00f3lar por dia com o software JRebel Entretanto, um [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/boaglio.com\/index.php\/2015\/01\/22\/alternativa-gratuita-ao-jrebel\/\" \/>\n<meta property=\"og:site_name\" content=\"Boaglio.com\" \/>\n<meta property=\"article:published_time\" content=\"2015-01-23T01:23:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-02-08T18:38:45+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.boaglio.com\/wp-content\/uploads\/2015\/01\/jrebel_logo-RGB.png\" \/>\n<meta name=\"author\" content=\"Fernando Boaglio\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fernando Boaglio\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/boaglio.com\\\/index.php\\\/2015\\\/01\\\/22\\\/alternativa-gratuita-ao-jrebel\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/boaglio.com\\\/index.php\\\/2015\\\/01\\\/22\\\/alternativa-gratuita-ao-jrebel\\\/\"},\"author\":{\"name\":\"Fernando Boaglio\",\"@id\":\"https:\\\/\\\/boaglio.com\\\/#\\\/schema\\\/person\\\/8c1801baf8ab6b6d207210832f6407d7\"},\"headline\":\"Alternativa gratuita ao JRebel\",\"datePublished\":\"2015-01-23T01:23:47+00:00\",\"dateModified\":\"2021-02-08T18:38:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/boaglio.com\\\/index.php\\\/2015\\\/01\\\/22\\\/alternativa-gratuita-ao-jrebel\\\/\"},\"wordCount\":539,\"commentCount\":5,\"image\":{\"@id\":\"https:\\\/\\\/boaglio.com\\\/index.php\\\/2015\\\/01\\\/22\\\/alternativa-gratuita-ao-jrebel\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/www.boaglio.com\\\/wp-content\\\/uploads\\\/2015\\\/01\\\/jrebel_logo-RGB.png\",\"articleSection\":[\"Eclipse\",\"Java\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/boaglio.com\\\/index.php\\\/2015\\\/01\\\/22\\\/alternativa-gratuita-ao-jrebel\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/boaglio.com\\\/index.php\\\/2015\\\/01\\\/22\\\/alternativa-gratuita-ao-jrebel\\\/\",\"url\":\"https:\\\/\\\/boaglio.com\\\/index.php\\\/2015\\\/01\\\/22\\\/alternativa-gratuita-ao-jrebel\\\/\",\"name\":\"Alternativa gratuita ao JRebel - Boaglio.com\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/boaglio.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/boaglio.com\\\/index.php\\\/2015\\\/01\\\/22\\\/alternativa-gratuita-ao-jrebel\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/boaglio.com\\\/index.php\\\/2015\\\/01\\\/22\\\/alternativa-gratuita-ao-jrebel\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/www.boaglio.com\\\/wp-content\\\/uploads\\\/2015\\\/01\\\/jrebel_logo-RGB.png\",\"datePublished\":\"2015-01-23T01:23:47+00:00\",\"dateModified\":\"2021-02-08T18:38:45+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/boaglio.com\\\/#\\\/schema\\\/person\\\/8c1801baf8ab6b6d207210832f6407d7\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/boaglio.com\\\/index.php\\\/2015\\\/01\\\/22\\\/alternativa-gratuita-ao-jrebel\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/boaglio.com\\\/index.php\\\/2015\\\/01\\\/22\\\/alternativa-gratuita-ao-jrebel\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/boaglio.com\\\/index.php\\\/2015\\\/01\\\/22\\\/alternativa-gratuita-ao-jrebel\\\/#primaryimage\",\"url\":\"http:\\\/\\\/www.boaglio.com\\\/wp-content\\\/uploads\\\/2015\\\/01\\\/jrebel_logo-RGB.png\",\"contentUrl\":\"http:\\\/\\\/www.boaglio.com\\\/wp-content\\\/uploads\\\/2015\\\/01\\\/jrebel_logo-RGB.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/boaglio.com\\\/index.php\\\/2015\\\/01\\\/22\\\/alternativa-gratuita-ao-jrebel\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/boaglio.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Alternativa gratuita ao JRebel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/boaglio.com\\\/#website\",\"url\":\"https:\\\/\\\/boaglio.com\\\/\",\"name\":\"Boaglio.com\",\"description\":\"tecnologia e cr\u00edticas construtivas\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/boaglio.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/boaglio.com\\\/#\\\/schema\\\/person\\\/8c1801baf8ab6b6d207210832f6407d7\",\"name\":\"Fernando Boaglio\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a939c977cba6bad98bab6b4ef8e44bdd3908fa870d05667774506e6d0b692e47?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a939c977cba6bad98bab6b4ef8e44bdd3908fa870d05667774506e6d0b692e47?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a939c977cba6bad98bab6b4ef8e44bdd3908fa870d05667774506e6d0b692e47?s=96&d=mm&r=g\",\"caption\":\"Fernando Boaglio\"},\"description\":\"???\",\"sameAs\":[\"https:\\\/\\\/www.boaglio.com\"],\"url\":\"https:\\\/\\\/boaglio.com\\\/index.php\\\/author\\\/admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Alternativa gratuita ao JRebel - Boaglio.com","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:\/\/boaglio.com\/index.php\/2015\/01\/22\/alternativa-gratuita-ao-jrebel\/","og_locale":"pt_BR","og_type":"article","og_title":"Alternativa gratuita ao JRebel - Boaglio.com","og_description":"\u00c9 na hora do stop \/ start dos servidores Java que bate aquela inveja do PHP, que consegue fazer um refresh geral apenas com um F5 no browser. A empresa que resolveu esse problema (ZeroTurnaround) est\u00e1 ganhando uma boa grana com isso, vendendo licen\u00e7as a um d\u00f3lar por dia com o software JRebel Entretanto, um [&hellip;]","og_url":"https:\/\/boaglio.com\/index.php\/2015\/01\/22\/alternativa-gratuita-ao-jrebel\/","og_site_name":"Boaglio.com","article_published_time":"2015-01-23T01:23:47+00:00","article_modified_time":"2021-02-08T18:38:45+00:00","og_image":[{"url":"http:\/\/www.boaglio.com\/wp-content\/uploads\/2015\/01\/jrebel_logo-RGB.png","type":"","width":"","height":""}],"author":"Fernando Boaglio","twitter_misc":{"Escrito por":"Fernando Boaglio","Est. tempo de leitura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/boaglio.com\/index.php\/2015\/01\/22\/alternativa-gratuita-ao-jrebel\/#article","isPartOf":{"@id":"https:\/\/boaglio.com\/index.php\/2015\/01\/22\/alternativa-gratuita-ao-jrebel\/"},"author":{"name":"Fernando Boaglio","@id":"https:\/\/boaglio.com\/#\/schema\/person\/8c1801baf8ab6b6d207210832f6407d7"},"headline":"Alternativa gratuita ao JRebel","datePublished":"2015-01-23T01:23:47+00:00","dateModified":"2021-02-08T18:38:45+00:00","mainEntityOfPage":{"@id":"https:\/\/boaglio.com\/index.php\/2015\/01\/22\/alternativa-gratuita-ao-jrebel\/"},"wordCount":539,"commentCount":5,"image":{"@id":"https:\/\/boaglio.com\/index.php\/2015\/01\/22\/alternativa-gratuita-ao-jrebel\/#primaryimage"},"thumbnailUrl":"http:\/\/www.boaglio.com\/wp-content\/uploads\/2015\/01\/jrebel_logo-RGB.png","articleSection":["Eclipse","Java"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/boaglio.com\/index.php\/2015\/01\/22\/alternativa-gratuita-ao-jrebel\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/boaglio.com\/index.php\/2015\/01\/22\/alternativa-gratuita-ao-jrebel\/","url":"https:\/\/boaglio.com\/index.php\/2015\/01\/22\/alternativa-gratuita-ao-jrebel\/","name":"Alternativa gratuita ao JRebel - Boaglio.com","isPartOf":{"@id":"https:\/\/boaglio.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/boaglio.com\/index.php\/2015\/01\/22\/alternativa-gratuita-ao-jrebel\/#primaryimage"},"image":{"@id":"https:\/\/boaglio.com\/index.php\/2015\/01\/22\/alternativa-gratuita-ao-jrebel\/#primaryimage"},"thumbnailUrl":"http:\/\/www.boaglio.com\/wp-content\/uploads\/2015\/01\/jrebel_logo-RGB.png","datePublished":"2015-01-23T01:23:47+00:00","dateModified":"2021-02-08T18:38:45+00:00","author":{"@id":"https:\/\/boaglio.com\/#\/schema\/person\/8c1801baf8ab6b6d207210832f6407d7"},"breadcrumb":{"@id":"https:\/\/boaglio.com\/index.php\/2015\/01\/22\/alternativa-gratuita-ao-jrebel\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/boaglio.com\/index.php\/2015\/01\/22\/alternativa-gratuita-ao-jrebel\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/boaglio.com\/index.php\/2015\/01\/22\/alternativa-gratuita-ao-jrebel\/#primaryimage","url":"http:\/\/www.boaglio.com\/wp-content\/uploads\/2015\/01\/jrebel_logo-RGB.png","contentUrl":"http:\/\/www.boaglio.com\/wp-content\/uploads\/2015\/01\/jrebel_logo-RGB.png"},{"@type":"BreadcrumbList","@id":"https:\/\/boaglio.com\/index.php\/2015\/01\/22\/alternativa-gratuita-ao-jrebel\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/boaglio.com\/"},{"@type":"ListItem","position":2,"name":"Alternativa gratuita ao JRebel"}]},{"@type":"WebSite","@id":"https:\/\/boaglio.com\/#website","url":"https:\/\/boaglio.com\/","name":"Boaglio.com","description":"tecnologia e cr\u00edticas construtivas","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/boaglio.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/boaglio.com\/#\/schema\/person\/8c1801baf8ab6b6d207210832f6407d7","name":"Fernando Boaglio","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/a939c977cba6bad98bab6b4ef8e44bdd3908fa870d05667774506e6d0b692e47?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a939c977cba6bad98bab6b4ef8e44bdd3908fa870d05667774506e6d0b692e47?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a939c977cba6bad98bab6b4ef8e44bdd3908fa870d05667774506e6d0b692e47?s=96&d=mm&r=g","caption":"Fernando Boaglio"},"description":"???","sameAs":["https:\/\/www.boaglio.com"],"url":"https:\/\/boaglio.com\/index.php\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/boaglio.com\/index.php\/wp-json\/wp\/v2\/posts\/1203","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/boaglio.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/boaglio.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/boaglio.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/boaglio.com\/index.php\/wp-json\/wp\/v2\/comments?post=1203"}],"version-history":[{"count":15,"href":"https:\/\/boaglio.com\/index.php\/wp-json\/wp\/v2\/posts\/1203\/revisions"}],"predecessor-version":[{"id":2123,"href":"https:\/\/boaglio.com\/index.php\/wp-json\/wp\/v2\/posts\/1203\/revisions\/2123"}],"wp:attachment":[{"href":"https:\/\/boaglio.com\/index.php\/wp-json\/wp\/v2\/media?parent=1203"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/boaglio.com\/index.php\/wp-json\/wp\/v2\/categories?post=1203"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/boaglio.com\/index.php\/wp-json\/wp\/v2\/tags?post=1203"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}