{"id":8589,"date":"2019-04-02T07:15:44","date_gmt":"2019-04-02T11:15:44","guid":{"rendered":"https:\/\/www.eginnovations.com\/blog\/?p=8589"},"modified":"2022-08-29T01:21:16","modified_gmt":"2022-08-29T05:21:16","slug":"how-to-troubleshoot-java-code","status":"publish","type":"post","link":"https:\/\/www.eginnovations.com\/blog\/how-to-troubleshoot-java-code\/","title":{"rendered":"Troubleshoot Java Application Slowness <br>Using Java Transaction Tracing"},"content":{"rendered":"<h2 style=\"margin-top: 0;\"><span class=\"ez-toc-section\" id=\"Why_is_the_Java_Application_Slow\"><\/span>Why is the Java Application Slow?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-8256 alignright\" src=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2019\/04\/troubleshoot-java-slowness.jpg\" alt=\"Troubleshoot java application slowness\" width=\"300\" height=\"200\" border=\"0\" \/>The performance of any application is measured by its availability and responsiveness. When an application is slow, IT operations staff must troubleshoot the cause of slowness, identify it and resolve it. While application performance problems may be caused by issues in the supporting infrastructure, often the issues are related to the application components themselves. Poor application design, inefficient methods, loops in <a href=\"https:\/\/www.eginnovations.com\/blog\/java-code-level-visibility\/\" target=\"_self\" rel=\"noopener noreferrer\">Java code<\/a>, and badly constructed database queries are some of the common causes of poor Java application performance. Slowness can also stem from external accesses from the application code. For example, the Java application may be making a web service call to a remote transaction processing service which may be slow, or the application may be sending email using Java Mail API and slowness in the mail system may be causing the application to be slow.<\/p>\n<div class=\"frm-cta\"><a class=\"frm-cta-link\" href=\"https:\/\/www.eginnovations.com\/blog\/top-10-java-performance-problems\/\" target=\"_self\" rel=\"noopener noreferrer\">Top 10 Java Problems and How to Solve Them \u00bb<\/a><\/div>\n<h2 style=\"margin-top: 10px;\"><span class=\"ez-toc-section\" id=\"Byte-Code_Instrumentation_Transparent_Instrumentation_of_Java_Applications\"><\/span>Byte-Code Instrumentation: Transparent Instrumentation of Java Applications<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><a href=\"https:\/\/www.eginnovations.com\/blog\/what-is-application-performance-monitoring\/\/\" target=\"_self\" rel=\"noopener noreferrer\">Application performance monitoring<\/a> tools are focused on detecting, diagnosing and helping fix such application slowness issues. A simple way to troubleshoot an application is to modify it so the application logs at every stage how long each method call, or loop, or database query took to execute. A key problem with this approach is that it requires the application developers to change their code to support logging of performance at every stage. This is not only time-consuming, but it may not be feasible in some situations. For example, consider a commercial off-the-shelf (COTS) application like the Cerner healthcare application, which operates on Java technologies. Organizations do not have access to the source code to make modifications.<\/p>\n<p>Therefore, it is essential that application <a href=\"https:\/\/www.eginnovations.com\/supported-technologies\/java-application-monitoring\">performance monitoring<\/a> solutions can discover slow method calls, inefficient database queries, infinite loops and such without requiring changes to the application code itself. This is where byte-code instrumentation comes in.<\/p>\n<p><a href=\"https:\/\/technoga.wordpress.com\/2012\/12\/01\/what-is-bytecode-instrumentation\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Byte-code instrumentation<\/a> is a technique for changing the code of compiled Java applications, either before running them on the disk or \u201con the fly\u201d as they are loaded into memory. A key advantage of this technique is that it adds monitoring capabilities to applications without having to modify the monitored code manually.<\/p>\n<p>Java is a dynamically loaded language. Every class is loaded lazily when needed using a component called a class loader. The class loader looks for the class code, reads it, and passes it to the <a href=\"https:\/\/www.eginnovations.com\/blog\/jvm-monitoring-and-performance-assurance-for-java-based-banking-and-trading-applications\/\" target=\"_self\" rel=\"noopener noreferrer\">JVM<\/a>, which links it with the rest of the code that is already loaded. This behavior makes Java very flexible \u2013 selection of concrete classes is deferred to the last possible moment. The compiled code itself is kept in bytecode format \u2013 an intermediate language, which resembles assembly language.<\/p>\n<div class=\"img-caption mbot30\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-8092 size-full\" src=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2019\/04\/what-is-java-bytecode.png\" alt=\"What is Java Bytecode ? \" width=\"560\" height=\"281\" border=\"0\" \/><br \/>\nUnderstanding Java compilation, loading and execution<\/div>\n<p>Normally, the class loader just reads the class file from wherever it is stored and passes it to the JVM as an array of bytes. Modern Java runtimes (1.5 and higher) provide a special instrumentation API that gives monitoring tools access to the bytecode of every class right before it is loaded. This is how monitoring tools add instrumentation to monitor applications without requiring code changes to each application.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Transaction_Tracing_Putting_Together_an_Application_Execution_Map\"><\/span>Transaction Tracing: Putting Together an Application Execution Map<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Byte-code instrumentation provides details of what line of code, method, call, etc. is executed at each Java tier. By analyzing the code that is executed for each web\/mobile request to each tier, it is possible to determine where time is spent in the application code in that tier. To get a complete transaction flow map, APM tools implement a tag and follow methodology. A unique tag is assigned to each request when it first enters the application code and this tag is passed through each application processing tier. Based on the metrics collected at each tier, a transaction flow map is then put together for that request. The figure below depicts a transaction flow map.<\/p>\n<div class=\"img-caption mbot30\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-8092 size-full\" src=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2019\/04\/java-transaction-tracing.jpg\" alt=\"Cross application transaction flow diagram helps visualize and trace the transaction\" width=\"640\" height=\"387\" border=\"0\" \/><br \/>\nVisualization of application transaction execution using transaction tracing<\/div>\n<p>Here, you can see the overall transaction processing time as well as the time spent in each tier of the application. This helps IT operations staff quickly determine which tier is responsible for the transaction slowness.<\/p>\n<p>Drilldowns into each tier highlight the exact stack trace. From this stack trace, you can see which line of code has contributed the most to the transaction processing time. Likewise, the database queries executed during transaction processing and the time taken for each query can be detected.<\/p>\n<div class=\"img-caption mbot30\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-8092 size-full\" src=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2019\/04\/code-level-diagnosis-java.jpg\" alt=\"Code-level diagnosis identifies the exact line of Java code that is slow to execute\" width=\"640\" height=\"371\" border=\"0\" \/><br \/>\nCode-level diagnosis pointing to the exact line of Java code that is slow to execute<\/div>\n<div class=\"frm-cta\"><a class=\"frm-cta-link\" href=\"https:\/\/www.eginnovations.com\/webinar\/application-performance-business-transaction-tracing\" target=\"_self\" rel=\"noopener noreferrer\">Watch Webinar: How Java Transaction Tracing Works \u00bb<\/a><\/div>\n<h2><span class=\"ez-toc-section\" id=\"How_Transaction_Tracing_Helps_with_Java_Application_Performance_Diagnosis\"><\/span>How Transaction Tracing Helps with Java Application Performance Diagnosis<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<table class=\"java-problems-list\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"10\">\n<tbody>\n<tr>\n<th class=\"problems-list-title\" valign=\"top\">\n<h3 style=\"font-size: 18px; margin: 0; padding: 0; font-weight: bold;\"><span class=\"ez-toc-section\" id=\"Using_the_transaction_flow_map_it_is_possible_to_determine\"><\/span>Using the transaction flow map, it is possible to determine:<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<\/th>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"91%\">\n<ul style=\"margin-bottom: 0; padding-bottom: 0;\">\n<li>The exact tier that was responsible for slowness<\/li>\n<li>The queries executed for the transaction and time taken for each query<\/li>\n<li>The method calls made by the application and the time taken for each call<\/li>\n<li>Any external calls and the time taken for each<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>This information is extremely helpful in determining who needs to handle the application slow complaint: is it the Java developer, the database administrator, the external service administrator, or something else?<\/p>\n<p><a href=\"https:\/\/www.eginnovations.com\/supported-technologies\/java-transaction-monitoring\" target=\"_self\" rel=\"noopener noreferrer\">Transaction tracing<\/a> has grown in popularity over the years and is now an important component of any APM deployment. Some of the main reasons for this are:<\/p>\n<ul>\n<li>The ability to <a href=\"https:\/\/www.eginnovations.com\/blog\/top-apm-use-cases\/\" target=\"_self\" rel=\"noopener noreferrer\">eliminate finger-pointing and war room scenarios<\/a> during problem diagnosis<\/li>\n<li>Ability to instrument applications without needing code-level changes<\/li>\n<li>Capability to diagnose application performance issues without needing any changes in the supporting application tiers. <strong>This is a key reason.<\/strong> Database administrators, for example, may not want to add agents to allow the application developers to monitor their systems. Transaction tracing helps application developers highlight the time spent on the database tier as a portion of the overall transaction tracing time. This can help point out to the database teams the times when database processing is slowing down the application.<\/li>\n<\/ul>\n<div class=\"frm-cta\"><a class=\"frm-cta-link\" href=\"https:\/\/www.eginnovations.com\/demo\/java-monitoring\" target=\"_self\" rel=\"noopener noreferrer\">Get Your Demo of eG Enterprise APM for Java \u00bb<\/a><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Helpful_Resources\"><\/span>Helpful Resources:<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><a href=\"https:\/\/www.eginnovations.com\/blog\/java-code-level-visibility\/\" target=\"_self\" rel=\"noopener noreferrer\">How to Get Java Code-Level Visibility<\/a><\/li>\n<li><a href=\"https:\/\/www.eginnovations.com\/blog\/\" target=\"_self\" rel=\"noopener noreferrer\">5 Best Practices to Ensure a Stellar Customer Experience of Java Applications<\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=yuXGr6Eos8g\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">2-Min Video Overview: Java Transaction Tracing<\/a><\/li>\n<li><a href=\"https:\/\/www.eginnovations.com\/supported-technologies\/java-application-monitoring\" target=\"_self\" rel=\"noopener noreferrer\">Explore eG Enterprise APM for Java<\/a><\/li>\n<li><a href=\"https:\/\/www.eginnovations.com\/blog\/java-synchronized-blocks\/\">Learn about Troubleshooting Java Synchronization Issues<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Why is the Java Application Slow? The performance of any application is measured by its availability and responsiveness. When an application is slow, IT operations staff must troubleshoot the cause of slowness, identify it and resolve it. While application performance problems may be caused by issues in the supporting infrastructure, often the issues are related [&hellip;]<\/p>\n","protected":false},"author":15,"featured_media":8594,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"categories":[27],"tags":[349,435,500,176,655,656,496,495],"class_list":["post-8589","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java-monitoring","tag-apm","tag-java-apm","tag-java-application","tag-java-monitoring","tag-java-profiling","tag-java-slow","tag-java-slowness","tag-transaction-tracing"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Troubleshoot Java Application Issues with Java Transaction Tracing<\/title>\n<meta name=\"description\" content=\"Troubleshoot Java application code issues with ease. See how Java transaction tracing can help diagnose java problems. Learn more!\" \/>\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.eginnovations.com\/blog\/how-to-troubleshoot-java-code\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Troubleshoot Java Application Slowness: The Importance of Java Transaction Tracing\" \/>\n<meta property=\"og:description\" content=\"Troubleshoot Java code issues with ease. See how Java transaction tracing, a key component of Java APM, can help diagnose java problems. Learn more!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.eginnovations.com\/blog\/how-to-troubleshoot-java-code\/\" \/>\n<meta property=\"og:site_name\" content=\"eG Innovations\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/eGInnovations\" \/>\n<meta property=\"article:published_time\" content=\"2019-04-02T11:15:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-08-29T05:21:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2019\/04\/troubleshoot-java-code.jpg\" \/>\n<meta name=\"author\" content=\"Vinod Mohan\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"How to Troubleshoot Java Application Slowness: The Importance of Java Transaction Tracing\" \/>\n<meta name=\"twitter:description\" content=\"Troubleshoot Java code issues with ease. See how Java transaction tracing, a key component of Java APM, can help diagnose java problems. Learn more!\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2019\/04\/troubleshoot-java-code-issues.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@eginnovations\" \/>\n<meta name=\"twitter:site\" content=\"@eginnovations\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Vinod Mohan\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Troubleshoot Java Application Issues with Java Transaction Tracing","description":"Troubleshoot Java application code issues with ease. See how Java transaction tracing can help diagnose java problems. Learn more!","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.eginnovations.com\/blog\/how-to-troubleshoot-java-code\/","og_locale":"en_US","og_type":"article","og_title":"How to Troubleshoot Java Application Slowness: The Importance of Java Transaction Tracing","og_description":"Troubleshoot Java code issues with ease. See how Java transaction tracing, a key component of Java APM, can help diagnose java problems. Learn more!","og_url":"https:\/\/www.eginnovations.com\/blog\/how-to-troubleshoot-java-code\/","og_site_name":"eG Innovations","article_publisher":"https:\/\/www.facebook.com\/eGInnovations","article_published_time":"2019-04-02T11:15:44+00:00","article_modified_time":"2022-08-29T05:21:16+00:00","og_image":[{"url":"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2019\/04\/troubleshoot-java-code.jpg","type":"","width":"","height":""}],"author":"Vinod Mohan","twitter_card":"summary_large_image","twitter_title":"How to Troubleshoot Java Application Slowness: The Importance of Java Transaction Tracing","twitter_description":"Troubleshoot Java code issues with ease. See how Java transaction tracing, a key component of Java APM, can help diagnose java problems. Learn more!","twitter_image":"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2019\/04\/troubleshoot-java-code-issues.jpg","twitter_creator":"@eginnovations","twitter_site":"@eginnovations","twitter_misc":{"Written by":"Vinod Mohan","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.eginnovations.com\/blog\/how-to-troubleshoot-java-code\/#article","isPartOf":{"@id":"https:\/\/www.eginnovations.com\/blog\/how-to-troubleshoot-java-code\/"},"author":{"name":"Vinod Mohan","@id":"https:\/\/www.eginnovations.com\/blog\/#\/schema\/person\/0b821d650520e5ce664e5073c984e972"},"headline":"Troubleshoot Java Application Slowness Using Java Transaction Tracing","datePublished":"2019-04-02T11:15:44+00:00","dateModified":"2022-08-29T05:21:16+00:00","mainEntityOfPage":{"@id":"https:\/\/www.eginnovations.com\/blog\/how-to-troubleshoot-java-code\/"},"wordCount":1028,"commentCount":0,"publisher":{"@id":"https:\/\/www.eginnovations.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.eginnovations.com\/blog\/how-to-troubleshoot-java-code\/#primaryimage"},"thumbnailUrl":"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2019\/04\/troubleshoot-java-issues.jpg","keywords":["apm","Java APM","Java application","Java Monitoring","java profiling","java slow","Java Slowness","Transaction Tracing"],"articleSection":["Java Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.eginnovations.com\/blog\/how-to-troubleshoot-java-code\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.eginnovations.com\/blog\/how-to-troubleshoot-java-code\/","url":"https:\/\/www.eginnovations.com\/blog\/how-to-troubleshoot-java-code\/","name":"Troubleshoot Java Application Issues with Java Transaction Tracing","isPartOf":{"@id":"https:\/\/www.eginnovations.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.eginnovations.com\/blog\/how-to-troubleshoot-java-code\/#primaryimage"},"image":{"@id":"https:\/\/www.eginnovations.com\/blog\/how-to-troubleshoot-java-code\/#primaryimage"},"thumbnailUrl":"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2019\/04\/troubleshoot-java-issues.jpg","datePublished":"2019-04-02T11:15:44+00:00","dateModified":"2022-08-29T05:21:16+00:00","description":"Troubleshoot Java application code issues with ease. See how Java transaction tracing can help diagnose java problems. Learn more!","breadcrumb":{"@id":"https:\/\/www.eginnovations.com\/blog\/how-to-troubleshoot-java-code\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.eginnovations.com\/blog\/how-to-troubleshoot-java-code\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.eginnovations.com\/blog\/how-to-troubleshoot-java-code\/#primaryimage","url":"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2019\/04\/troubleshoot-java-issues.jpg","contentUrl":"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2019\/04\/troubleshoot-java-issues.jpg","width":300,"height":200,"caption":"Troubleshoot java application slowness"},{"@type":"BreadcrumbList","@id":"https:\/\/www.eginnovations.com\/blog\/how-to-troubleshoot-java-code\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.eginnovations.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Troubleshoot Java Application Slowness Using Java Transaction Tracing"}]},{"@type":"WebSite","@id":"https:\/\/www.eginnovations.com\/blog\/#website","url":"https:\/\/www.eginnovations.com\/blog\/","name":"eG Innovations","description":"IT Performance Monitoring Insights","publisher":{"@id":"https:\/\/www.eginnovations.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.eginnovations.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.eginnovations.com\/blog\/#organization","name":"eG Innovations","alternateName":"eg innovations","url":"https:\/\/www.eginnovations.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.eginnovations.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2014\/07\/eg-logo-dark-gray1_new.jpg","contentUrl":"https:\/\/www.eginnovations.com\/blog\/wp-content\/uploads\/2014\/07\/eg-logo-dark-gray1_new.jpg","width":362,"height":235,"caption":"eG Innovations"},"image":{"@id":"https:\/\/www.eginnovations.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/eGInnovations","https:\/\/x.com\/eginnovations"]},{"@type":"Person","@id":"https:\/\/www.eginnovations.com\/blog\/#\/schema\/person\/0b821d650520e5ce664e5073c984e972","name":"Vinod Mohan","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.eginnovations.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1476c17889cb8f3329c5b96d947551af?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1476c17889cb8f3329c5b96d947551af?s=96&d=mm&r=g","caption":"Vinod Mohan"},"sameAs":["https:\/\/www.eginnovations.com","eguser"],"url":"https:\/\/www.eginnovations.com\/blog\/author\/vinodmohan\/"}]}},"modified_by":"HawkSEM Dev","_links":{"self":[{"href":"https:\/\/www.eginnovations.com\/blog\/wp-json\/wp\/v2\/posts\/8589","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.eginnovations.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.eginnovations.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.eginnovations.com\/blog\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/www.eginnovations.com\/blog\/wp-json\/wp\/v2\/comments?post=8589"}],"version-history":[{"count":0,"href":"https:\/\/www.eginnovations.com\/blog\/wp-json\/wp\/v2\/posts\/8589\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.eginnovations.com\/blog\/wp-json\/wp\/v2\/media\/8594"}],"wp:attachment":[{"href":"https:\/\/www.eginnovations.com\/blog\/wp-json\/wp\/v2\/media?parent=8589"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.eginnovations.com\/blog\/wp-json\/wp\/v2\/categories?post=8589"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.eginnovations.com\/blog\/wp-json\/wp\/v2\/tags?post=8589"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}