{"id":37505,"date":"2012-10-22T09:00:28","date_gmt":"2012-10-22T16:00:28","guid":{"rendered":"http:\/\/localhost\/exoblog\/?p=2993"},"modified":"2023-06-05T16:23:45","modified_gmt":"2023-06-05T14:23:45","slug":"boost-your-exoplatform-developments-with-jrebel","status":"publish","type":"post","link":"https:\/\/www.exoplatform.com\/blog\/boost-your-exoplatform-developments-with-jrebel\/","title":{"rendered":"Boost your eXo Platform Development with JRebel!"},"content":{"rendered":"<p><!--no-bookmarkify--><\/p>\n<p><a href=\"http:\/\/zeroturnaround.com\/software\/jrebel\/\" target=\"_blank\" rel=\"noopener\">JRebel<\/a> is a tool that enables developers to instantly reload changes in Java sources files, without having to redeploy the application or restart the server. In this tutorial, we will demonstrate how to use JRebel to speed up development with eXo Platform. JRebel integrates well with Eclipse, which we used in the following example. To learn how to start eXo Platform in Eclipse, check out <a title=\"Starting eXoPlatform from Eclipse\" href=\"http:\/\/thomasdelhomenie.wordpress.com\/2012\/09\/20\/starting-exoplatform-from-eclipse\/\" target=\"_blank\" rel=\"noopener\">this tutorial<\/a>.<\/p>\n<p><!--more--><\/p>\n<h2>Install JRebel in Eclipse<\/h2>\n<p>The first step is to install JRebel in Eclipse. Simply follow the first 3 steps in this tutorial on the JRebel website.<\/p>\n<h2>New Portlet Project<\/h2>\n<p>Before going further with JRebel, you need to create a new portlet project:<\/p>\n<ul>\n<li>Go to <b>File &gt; New &gt; Project&#8230;<\/b><\/li>\n<li>Select <b>Maven &gt; Maven Project<\/b><\/li>\n<li>Check <b>Create a simple project (skip archetype selection)<\/b><\/li>\n<li>Click <b>Next<\/b><\/li>\n<li>Fill maven information. For example:\n<ul>\n<li>Group ID: org.exoplatform<\/li>\n<li>Artifact ID: jrebel.portlet<\/li>\n<li>Version: 1.0.0-SNAPSHOT<\/li>\n<li>Packaging: war<\/li>\n<li>Name: Portlet with JRebel<\/li>\n<li>Description: Portlet with JRebel<\/li>\n<\/ul>\n<\/li>\n<li>Click <b>Finish<\/b><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Once created, you can add the source file for the portlet:<\/p>\n<p><i><b>src\/main\/webapp\/WEB-INF\/web.xml<\/b><\/i><\/p>\n<pre class=\"lang:xhtml decode:true \">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;!DOCTYPE web-app PUBLIC \"-\/\/Sun Microsystems, Inc.\/\/DTD Web Application 2.3\/\/EN\"\n                         \"http:\/\/java.sun.com\/dtd\/web-app_2_3.dtd\"&gt;\n&lt;web-app&gt;\n    &lt;display-name&gt;JRebelPortlet&lt;\/display-name&gt;\n&lt;\/web-app&gt;<\/pre>\n<p><i><b>src\/main\/webapp\/WEB-INF\/portlet.xml<\/b><\/i><\/p>\n<pre class=\"lang:xhtml decode:true \">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n\n&lt;portlet-app\n    xmlns=\"http:\/\/java.sun.com\/xml\/ns\/portlet\/portlet-app_1_0.xsd\"\n    version=\"1.0\"\n    xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n    xsi:schemaLocation=\"http:\/\/java.sun.com\/xml\/ns\/portlet\/portlet-app_1_0.xsd\n                        http:\/\/java.sun.com\/xml\/ns\/portlet\/portlet-app_1_0.xsd\"&gt;\n\n    &lt;portlet&gt;\n        &lt;description&gt;Portlet with JRebel&lt;\/description&gt;\n        &lt;portlet-name&gt;portlet-jrebel&lt;\/portlet-name&gt;\n        &lt;display-name&gt;Portlet with JRebel&lt;\/display-name&gt;\n\n        &lt;portlet-class&gt;org.exoplatform.jrebel.portlet.MyPortlet&lt;\/portlet-class&gt;\n\n        &lt;supports&gt;\n            &lt;mime-type&gt;text\/html&lt;\/mime-type&gt;\n            &lt;portlet-mode&gt;VIEW&lt;\/portlet-mode&gt;\n            &lt;portlet-mode&gt;HELP&lt;\/portlet-mode&gt;\n        &lt;\/supports&gt;\n\n        &lt;supported-locale&gt;en&lt;\/supported-locale&gt;\n        \n        &lt;portlet-info&gt;\n        \t&lt;title&gt;Portlet with JRebel&lt;\/title&gt;\n        \t&lt;short-title&gt;Portlet with JRebel&lt;\/short-title&gt;\n        \t&lt;keywords&gt;JRebel&lt;\/keywords&gt;\n        &lt;\/portlet-info&gt;\n    &lt;\/portlet&gt;\n&lt;\/portlet-app&gt;\n<\/pre>\n<p><i><b>src\/main\/java\/org\/exoplatform\/jrebel\/portlet\/MyPortlet.java<\/b><\/i><\/p>\n<pre class=\"lang:java decode:true \">package org.exoplatform.jrebel.portlet;\n\nimport java.io.IOException;\n\nimport javax.portlet.GenericPortlet;\nimport javax.portlet.PortletConfig;\nimport javax.portlet.PortletException;\nimport javax.portlet.PortletRequestDispatcher;\nimport javax.portlet.RenderRequest;\nimport javax.portlet.RenderResponse;\n\npublic class MyPortlet extends GenericPortlet {\n\n    private static final String VIEW_PAGE = \"\/view.jsp\";\n    private static final String HELP_PAGE = \"\/help.jsp\";\n\n    private PortletRequestDispatcher viewDispatcher;\n    private PortletRequestDispatcher helpDispatcher;\n\n    public void doView( RenderRequest request, RenderResponse response )\n        throws PortletException, IOException {\n\n    \tviewDispatcher.include( request, response );\n    }\n\n    protected void doHelp( RenderRequest request, RenderResponse response )\n        throws PortletException, IOException {\n\n    \thelpDispatcher.include( request, response );\n    }\n\n    public void init( PortletConfig config ) throws PortletException {\n        super.init( config );\n        viewDispatcher = config.getPortletContext().getRequestDispatcher( VIEW_PAGE );\n        helpDispatcher = config.getPortletContext().getRequestDispatcher( HELP_PAGE );\n    }\n\n    public void destroy() {\n    \tviewDispatcher = null;\n    \thelpDispatcher = null;\n        super.destroy();\n    }\n}<\/pre>\n<p><i><b>pom.xml<\/b><\/i><\/p>\n<p>Add the portlet 2.0 dependency:<\/p>\n<pre class=\"lang:xhtml decode:true \">&lt;dependency&gt;\n\t&lt;groupId&gt;javax.portlet&lt;\/groupId&gt;\n\t&lt;artifactId&gt;portlet-api&lt;\/artifactId&gt;\n\t&lt;version&gt;2.0&lt;\/version&gt;\n\t&lt;scope&gt;provided&lt;\/scope&gt;\n&lt;\/dependency&gt;<\/pre>\n<p><i><b>src\/main\/webapp\/view.jsp<\/b><\/i><\/p>\n<pre class=\"lang:java decode:true \">Hello World!<\/pre>\n<p><i><b>src\/main\/webapp\/help.jsp<\/b><\/i><\/p>\n<pre class=\"lang:java decode:true \">Help?<\/pre>\n<p>You should now have the following project:<br \/>\n<a href=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-sources-tree.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-3378\" title=\"Portlet Sources Tree\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-sources-tree.png\" alt=\"Portlet Sources Tree\" width=\"270\" height=\"505\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-sources-tree.png 270w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-sources-tree-160x300.png 160w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-sources-tree-253x473.png 253w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-sources-tree-175x328.png 175w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-sources-tree-126x236.png 126w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-sources-tree-70x131.png 70w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-sources-tree-48x90.png 48w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-sources-tree-16x30.png 16w\" sizes=\"(max-width: 270px) 100vw, 270px\" \/><\/a><\/p>\n<p>In order to deploy your project to a server, it must have the &#8220;Dynamic Web Module&#8221; facet. This can be done in the project&#8217;s properties, in the <b>Project Facets<\/b> item. Once this is completed, check the <b>Dynamic Web Module<\/b> item and select version 2.5 (and 1.6 for Java). Finally, declare the <b>src\/main\/webapp<\/b> folder as part of the web application structure in the section <b>Deployment Assembly<\/b> of the project&#8217;s properties:<\/p>\n<p><a href=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/web-deployment-assembly.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-3379\" title=\"Web Deployment Assembly\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/web-deployment-assembly.png\" alt=\"Web Deployment Assembly\" width=\"685\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/web-deployment-assembly.png 722w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/web-deployment-assembly-300x131.png 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/web-deployment-assembly-720x314.png 720w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/web-deployment-assembly-500x218.png 500w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/web-deployment-assembly-360x157.png 360w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/web-deployment-assembly-200x87.png 200w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/web-deployment-assembly-100x44.png 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/web-deployment-assembly-70x30.png 70w\" sizes=\"(max-width: 722px) 100vw, 722px\" \/><\/a><\/p>\n<p>On this screen, you can declare all the resources you want to push to the web application on your server.<\/p>\n<h2>Configure the Project to Use JRebel<\/h2>\n<p>The next step is to make JRebel aware of your project:<\/p>\n<ul>\n<li>Right-click on the project &gt; JRebel &gt; Add JRebel Nature<\/li>\n<li>Right-click on the project &gt; JRebel &gt; Generate rebel.xml<\/li>\n<li>select the <b>src\/main\/resources<\/b> folder<\/li>\n<\/ul>\n<p>Open the rebel.xml. You can see that JRebel will monitor all the folders pushed to your web application on the server, including the Java source files in <b>target\/classes<\/b> and the files in src\/main\/webapp:<\/p>\n<pre class=\"lang:xhtml decode:true \">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;application xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" xmlns=\"http:\/\/www.zeroturnaround.com\" xsi:schemaLocation=\"http:\/\/www.zeroturnaround.com http:\/\/www.zeroturnaround.com\/alderaan\/rebel-2_0.xsd\"&gt;\n\n\t&lt;classpath&gt;\n\t\t&lt;dir name=\"\/home\/thomas\/exoplatform\/dev\/projects\/jrebel.portlet\/target\/classes\"&gt;\n\t\t&lt;\/dir&gt;\n\t\t&lt;dir name=\"\/home\/thomas\/exoplatform\/dev\/projects\/jrebel.portlet\/target\/test-classes\"&gt;\n\t\t&lt;\/dir&gt;\n\t&lt;\/classpath&gt;\n\n\t&lt;web&gt;\n\t\t&lt;link target=\"\/\"&gt;\n\t\t\t&lt;dir name=\"\/home\/thomas\/exoplatform\/dev\/projects\/jrebel.portlet\/WebContent\"&gt;\n\t\t\t&lt;\/dir&gt;\n\t\t&lt;\/link&gt;\n\t\t&lt;link target=\"\/\"&gt;\n\t\t\t&lt;dir name=\"\/home\/thomas\/exoplatform\/dev\/projects\/jrebel.portlet\/src\/main\/webapp\"&gt;\n\t\t\t&lt;\/dir&gt;\n\t\t&lt;\/link&gt;\n\t&lt;\/web&gt;\n\n&lt;\/application&gt;<\/pre>\n<h2>Configure the Server to Use JRebel<\/h2>\n<p>The server declared in Eclipse must also be configured to take use JRebel:<\/p>\n<ul>\n<li>Go to the <b>Servers<\/b> view in Eclipse<\/li>\n<li>Double-click on your eXo Platform server<\/li>\n<li>In the <b>JRebel integration<\/b> section, check the <b>Enable JRebel agent<\/b> checkbox<\/li>\n<li>Be sure to disable the <b>Automatic Publishing<\/b> in the <b>Publishing section<\/b> (the <b>Never publish automatically<\/b> must be checked)<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/server-configuration.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-3380\" title=\"Server Configuration\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/server-configuration.png\" alt=\"Server Configuration\" width=\"685\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/server-configuration.png 1327w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/server-configuration-300x169.png 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/server-configuration-1024x578.png 1024w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/server-configuration-768x433.png 768w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/server-configuration-1250x706.png 1250w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/server-configuration-720x406.png 720w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/server-configuration-500x282.png 500w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/server-configuration-360x203.png 360w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/server-configuration-200x113.png 200w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/server-configuration-100x56.png 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/server-configuration-53x30.png 53w\" sizes=\"(max-width: 1327px) 100vw, 1327px\" \/><\/a><\/p>\n<h2>Publish the Portlet in the Server<\/h2>\n<p>We are now ready to deploy your portlet:<\/p>\n<ul>\n<li>Right-click on the server &gt; Add and Remove&#8230;<\/li>\n<li>Select the project and click <b>Add<\/b><\/li>\n<li>Click on <b>Finish<\/b><\/li>\n<li>Start the server<\/li>\n<\/ul>\n<p>After the server is started, you can add your portlet to a page and see the &#8220;Hello World !&#8221; text:<br \/>\n<a href=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-helloworld.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-3381\" title=\"Portlet Helloworld\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-helloworld.png\" alt=\"Portlet Helloworld\" width=\"685\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-helloworld.png 977w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-helloworld-300x48.png 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-helloworld-768x122.png 768w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-helloworld-720x114.png 720w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-helloworld-500x79.png 500w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-helloworld-360x57.png 360w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-helloworld-200x32.png 200w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-helloworld-100x16.png 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-helloworld-70x11.png 70w\" sizes=\"(max-width: 977px) 100vw, 977px\" \/><\/a><\/p>\n<h2>JRebel in Action!<\/h2>\n<p>To see JRebel in action, change the portlet class. For example, add a new request attribute to be used in the JSP:<\/p>\n<pre class=\"lang:java decode:true \">...\n    public void doView( RenderRequest request, RenderResponse response )\n        throws PortletException, IOException {\n\n    \trequest.setAttribute(\"message\", \"Hello Again !\");\n    \tviewDispatcher.include( request, response );\n    }\n...<\/pre>\n<p>and in the view.jsp:<\/p>\n<pre class=\"lang:java decode:true \">Your message : &lt;%=request.getAttribute(\"message\")%&gt;<\/pre>\n<p><a href=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-helloworld-reloaded.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-3382\" title=\"Portlet Helloworld Reloaded\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-helloworld-reloaded.png\" alt=\"Portlet Helloworld Reloaded\" width=\"685\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-helloworld-reloaded.png 972w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-helloworld-reloaded-300x47.png 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-helloworld-reloaded-768x119.png 768w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-helloworld-reloaded-720x112.png 720w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-helloworld-reloaded-500x78.png 500w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-helloworld-reloaded-360x56.png 360w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-helloworld-reloaded-200x31.png 200w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-helloworld-reloaded-100x16.png 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2012\/10\/portlet-helloworld-reloaded-70x11.png 70w\" sizes=\"(max-width: 972px) 100vw, 972px\" \/><\/a><\/p>\n<p>Your changes have been applied without redeploying the webapp. You should only see this in the logs:<\/p>\n<pre class=\"lang:apache decode:true \">[2012-10-11 13:56:01] JRebel: Reloading class 'org.exoplatform.jrebel.portlet.MyPortlet'.<\/pre>\n<p>Cool, isn&#8217;t it? \ud83d\ude09<\/p>\n<p>JRebel supports <a href=\"http:\/\/zeroturnaround.com\/software\/jrebel\/features\/#headline\" target=\"_blank\" rel=\"noopener\">most of the changes<\/a> that are possible in your Java classes, including changes to method bodies, adding\/removing constructors\/methods\/fields\/classes\/annotations, and more.<\/p>\n<h2>What about Services?<\/h2>\n<p>In eXo Platform, you occasionally need to create services and deploy them as jar files in the server, which almost always requires a restart. With JRebel, you no longer have to perform time-consuming server restarts for every new or updated service.<\/p>\n<p>As you did with the portlet, create a new maven project. Add the JRebel Nature, and generate the rebel.xml file in src\/main\/resources. The other steps (Dynamic Web Module facet, &#8230;) are not necessary since it is not a webapp.<\/p>\n<p>Next, create a new eXo service by following the example described in <a href=\"http:\/\/thomasdelhomenie.wordpress.com\/2012\/04\/27\/rest-services-in-gatein-exoplatform-add-your-own\/\" target=\"_blank\" rel=\"noopener\">this tutorial<\/a>. After completing the steps (add the eXo dependency in pom.xml, create the class and add the configuration.xml in src\/main\/resources), you are now ready to deploy the service. The first deployment will require a restart, so build your maven project, stop your eXo Platform server, copy the jar file in the <b>lib<\/b> folder of the server, and restart the server.<\/p>\n<p>Once started, the URL <b>\/portal\/rest\/user\/name\/thomas<\/b> returns the message &#8220;Hello thomas!&#8221;. Change the service class, for example :<\/p>\n<pre class=\"lang:java decode:true \">@Path(\"\/name\/{name}\/\")\n@GET\npublic Response getName(@PathParam(\"name\") String name) throws Exception {\n\treturn Response.ok(\"Welcome in the JRebel world \" + name + \"!\").build();\n}<\/pre>\n<p>Simply call the same URL again, and you&#8217;ll see the message &#8220;Welcome in the JRebel world thomas!&#8221;.<\/p>\n<h2>Conclusion<\/h2>\n<p>Using JRebel in development will save you a lot of redeployments and restarts. The only limitation is that you can&#8217;t reload the eXo configuration this way. Oh, and I see another drawback: you won&#8217;t be able to use all that &#8220;server restart time&#8221; as an excuse to take a coffee break anymore \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"JRebel is a tool that enables developers to instantly reload changes in Java sources files, without having to redeploy the application or restart the server. In this tutorial, we will demonstrate how to use JRebel to speed up development with eXo Platform. JRebel integrates well with Eclipse, which we used in the following example. To [&hellip;]","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[699],"tags":[],"lang":"en","translations":{"en":37505},"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/posts\/37505"}],"collection":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/comments?post=37505"}],"version-history":[{"count":0,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/posts\/37505\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/media?parent=37505"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/categories?post=37505"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/tags?post=37505"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}