{"id":1405,"date":"2010-07-30T13:31:37","date_gmt":"2010-07-30T08:01:37","guid":{"rendered":"https:\/\/2thenew.online\/blog\/?p=1405"},"modified":"2010-08-04T15:20:24","modified_gmt":"2010-08-04T09:50:24","slug":"grails-transactions-using-transactional-annotations-and-propagation-requires_new","status":"publish","type":"post","link":"https:\/\/2thenew.online\/blog\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\/","title":{"rendered":"Grails Transactions using @Transactional annotations and Propagation.REQUIRES_NEW"},"content":{"rendered":"<p>Hi All,<\/p>\n<p>Here is how you can implement a new transaction in an already executing transaction in Grails which uses nothing but Spring framework&#8217;s Transaction mechanism as an underlying implementation. Spring provides <strong><em>@Transactional <\/em><\/strong>annotations to provide declarative transactions. We can use the same in our Grails project to achieve the transactional behavior.<\/p>\n<p><em>Here is the scenario:<\/em> You have two domain classes named <strong>SecuredAccount<\/strong> and <strong>AccountCreationAttempt<\/strong>. You try to transactionally save the SecuredAccount object which in turn creates a AccountCreationAttempt object which writes to the database stating: &#8220;There is an attempt to create a new SecuredAccount at this time: &lt;current date and time&gt;&#8221;. Point to note here is that even if the creation of the new SecuredAccount object fails, the record must still be written to the database so that the Administrator can validate whether the attempt at the specific time was by a legitimate user or an attacker. <\/p>\n<p><em>Here is the code:<\/em><\/p>\n<pre lang=\"groovy\">import org.springframework.transaction.annotation.*\r\nClass MyService {\r\n\r\nstatic transactional = false\r\ndef anotherService\r\n\r\n@Transactional\r\ndef createSecuredAccount() {\r\ndef securedAccount = new SecuredAccount(userId:\"John\")\r\nsecuredAccount.save(flush:true)\r\nanotherService.createAccountCreationAttempt()\r\nthrow new RuntimeException(\"Error thrown in createSecuredAccount()\")\r\n}\r\n}\r\n<\/pre>\n<pre lang=\"groovy\">import org.springframework.transaction.annotation.*\r\nclass AnotherService {\r\n\r\nstatic transactional = false\r\n\r\n@Transactional(propagation = Propagation.REQUIRES_NEW)\r\ndef createAccountCreationAttempt() {\r\ndef accountCreationAttempt = new AccountCreationAttempt(logRemarks: \"There is an attempt to create a new SecuredAccount at this time: {new Date()}\")\r\naccountCreationAttempt.save(flush:true)\r\n}\r\n}\r\n<\/pre>\n<p>Now in this scenario, AccountCreationAttempt object always gets persisted whether or not the transaction for creating SecuredAccount object fails.<\/p>\n<p>Here are few gotchas regarding the above transactions:<\/p>\n<p>1.) First of all, for <em>Propagation.REQUIRES_NEW <\/em>to work as intended, it has to be inside a new object i.e. a new service in our example. If we had put the <em>createAccountCreationAttempt()<\/em> method in the MyService there would be no new transaction spawned and even no log entry would be made. This is Spring&#8217;s proxy object implementation of transactions and you can read more about it here:<\/p>\n<p><a href=\"http:\/\/static.springsource.org\/spring\/docs\/3.0.x\/spring-framework-reference\/html\/transaction.html#transaction-declarative-annotations\" target=\"_blank\">http:\/\/static.springsource.org\/spring\/docs\/3.0.x\/spring-framework-reference\/html\/transaction.html#transaction-declarative-annotations<\/a>.<\/p>\n<p>Please pay special attention to the &#8220;<strong>NOTE<\/strong>&#8221; sub-section.This is what it states:<\/p>\n<p>&#8220;In proxy mode (which is the default), only external method calls coming in through the proxy are intercepted. This means that self-invocation, in effect, a method within the target object calling another method of the target object, will not lead to an actual transaction at runtime even if the invoked method is marked with<em><strong> @Transactional<\/strong><\/em>.&#8221;<\/p>\n<p>2.) Secondly, all the <em><strong>@Transactional<\/strong><\/em> methods should have a public visibility i.e. createSecuredAccount() and createAccountCreationAttempt() methods should be public methods, and not private or protected. This again is Spring&#8217;s <em><strong>@Transactional<\/strong> <\/em>annotations implementation and you can read about it at the same <a href=\"http:\/\/static.springsource.org\/spring\/docs\/3.0.x\/spring-framework-reference\/html\/transaction.html#transaction-declarative-annotations\" target=\"_blank\">link<\/a> as provided above. Note the right side-bar titled &#8220;<strong>Method visibility and <em>@Transactional<\/em><\/strong>&#8220;.<\/p>\n<p>Well, once you keep note of these gotchas I guess you are all set to make good use of <strong><em>@Transactional<\/em><\/strong> annotations and its full power.<\/p>\n<p>Cheers !!!<\/p>\n<p>&#8211; Abhishek Tejpaul<br \/>\nabhishek@intelligrape.com<br \/>\n[IntelliGrape Software Pvt. Ltd.]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hi All, Here is how you can implement a new transaction in an already executing transaction in Grails which uses nothing but Spring framework&#8217;s Transaction mechanism as an underlying implementation. Spring provides @Transactional annotations to provide declarative transactions. We can use the same in our Grails project to achieve the transactional behavior. Here is the [&hellip;]<\/p>\n","protected":false},"author":15,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":57,"footnotes":""},"categories":[7],"tags":[348,350,352,349,351,353],"class_list":["post-1405","post","type-post","status-publish","format-standard","hentry","category-grails","tag-transactional","tag-annotations","tag-grails-declarative-transactions","tag-grails-transactions","tag-propagation-requires_new","tag-spring-transactions"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"Hi All, Here is how you can implement a new transaction in an already executing transaction in Grails which uses nothing but Spring framework&#039;s Transaction mechanism as an underlying implementation. Spring provides @Transactional annotations to provide declarative transactions. We can use the same in our Grails project to achieve the transactional behavior. Here is the\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Abhishek Tejpaul\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/2thenew.online\/blog\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"TO THE NEW BLOG\" \/>\n\t\t<meta property=\"og:type\" content=\"blog\" \/>\n\t\t<meta property=\"og:title\" content=\"Grails Transactions using @Transactional annotations and Propagation.REQUIRES_NEW | TO THE NEW Blog\" \/>\n\t\t<meta property=\"og:description\" content=\"Hi All, Here is how you can implement a new transaction in an already executing transaction in Grails which uses nothing but Spring framework&#039;s Transaction mechanism as an underlying implementation. Spring provides @Transactional annotations to provide declarative transactions. We can use the same in our Grails project to achieve the transactional behavior. Here is the\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/2thenew.online\/blog\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/2thenew.online\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/2thenew.online\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@tothenew\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Grails Transactions using @Transactional annotations and Propagation.REQUIRES_NEW | TO THE NEW Blog\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Hi All, Here is how you can implement a new transaction in an already executing transaction in Grails which uses nothing but Spring framework&#039;s Transaction mechanism as an underlying implementation. Spring provides @Transactional annotations to provide declarative transactions. We can use the same in our Grails project to achieve the transactional behavior. Here is the\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/2thenew.online\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\\\/#article\",\"name\":\"Grails Transactions using @Transactional annotations and Propagation.REQUIRES_NEW | TO THE NEW Blog\",\"headline\":\"Grails Transactions using @Transactional annotations and Propagation.REQUIRES_NEW\",\"author\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/abhishek\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\"},\"datePublished\":\"2010-07-30T13:31:37+05:30\",\"dateModified\":\"2010-08-04T15:20:24+05:30\",\"inLanguage\":\"en-US\",\"commentCount\":5,\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\\\/#webpage\"},\"articleSection\":\"Grails, @Transactional, Annotations, Grails Declarative Transactions, Grails Transactions, Propagation.REQUIRES_NEW, Spring Transactions\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.tothenew.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/#listItem\",\"name\":\"Grails\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/#listItem\",\"position\":2,\"name\":\"Grails\",\"item\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\\\/#listItem\",\"name\":\"Grails Transactions using @Transactional annotations and Propagation.REQUIRES_NEW\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\\\/#listItem\",\"position\":3,\"name\":\"Grails Transactions using @Transactional annotations and Propagation.REQUIRES_NEW\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/#listItem\",\"name\":\"Grails\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\",\"name\":\"TO THE NEW Blog\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/abhishek\\\/#author\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/abhishek\\\/\",\"name\":\"Abhishek Tejpaul\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9aad3b7249e392a23dee22fda2eb99c64c33950f509a91e8c37e82efd8c3a388?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Abhishek Tejpaul\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\\\/#webpage\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\\\/\",\"name\":\"Grails Transactions using @Transactional annotations and Propagation.REQUIRES_NEW | TO THE NEW Blog\",\"description\":\"Hi All, Here is how you can implement a new transaction in an already executing transaction in Grails which uses nothing but Spring framework's Transaction mechanism as an underlying implementation. Spring provides @Transactional annotations to provide declarative transactions. We can use the same in our Grails project to achieve the transactional behavior. Here is the\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/abhishek\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/abhishek\\\/#author\"},\"datePublished\":\"2010-07-30T13:31:37+05:30\",\"dateModified\":\"2010-08-04T15:20:24+05:30\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/\",\"name\":\"TO THE NEW Blog\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Grails Transactions using @Transactional annotations and Propagation.REQUIRES_NEW | TO THE NEW Blog","description":"Hi All, Here is how you can implement a new transaction in an already executing transaction in Grails which uses nothing but Spring framework's Transaction mechanism as an underlying implementation. Spring provides @Transactional annotations to provide declarative transactions. We can use the same in our Grails project to achieve the transactional behavior. Here is the","canonical_url":"https:\/\/2thenew.online\/blog\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/2thenew.online\/blog\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\/#article","name":"Grails Transactions using @Transactional annotations and Propagation.REQUIRES_NEW | TO THE NEW Blog","headline":"Grails Transactions using @Transactional annotations and Propagation.REQUIRES_NEW","author":{"@id":"https:\/\/2thenew.online\/blog\/author\/abhishek\/#author"},"publisher":{"@id":"https:\/\/2thenew.online\/blog\/#organization"},"datePublished":"2010-07-30T13:31:37+05:30","dateModified":"2010-08-04T15:20:24+05:30","inLanguage":"en-US","commentCount":5,"mainEntityOfPage":{"@id":"https:\/\/2thenew.online\/blog\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\/#webpage"},"isPartOf":{"@id":"https:\/\/2thenew.online\/blog\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\/#webpage"},"articleSection":"Grails, @Transactional, Annotations, Grails Declarative Transactions, Grails Transactions, Propagation.REQUIRES_NEW, Spring Transactions"},{"@type":"BreadcrumbList","@id":"https:\/\/2thenew.online\/blog\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/2thenew.online\/blog#listItem","position":1,"name":"Home","item":"https:\/\/2thenew.online\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/2thenew.online\/blog\/category\/grails\/#listItem","name":"Grails"}},{"@type":"ListItem","@id":"https:\/\/2thenew.online\/blog\/category\/grails\/#listItem","position":2,"name":"Grails","item":"https:\/\/2thenew.online\/blog\/category\/grails\/","nextItem":{"@type":"ListItem","@id":"https:\/\/2thenew.online\/blog\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\/#listItem","name":"Grails Transactions using @Transactional annotations and Propagation.REQUIRES_NEW"},"previousItem":{"@type":"ListItem","@id":"https:\/\/2thenew.online\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/2thenew.online\/blog\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\/#listItem","position":3,"name":"Grails Transactions using @Transactional annotations and Propagation.REQUIRES_NEW","previousItem":{"@type":"ListItem","@id":"https:\/\/2thenew.online\/blog\/category\/grails\/#listItem","name":"Grails"}}]},{"@type":"Organization","@id":"https:\/\/2thenew.online\/blog\/#organization","name":"TO THE NEW Blog","url":"https:\/\/2thenew.online\/blog\/"},{"@type":"Person","@id":"https:\/\/2thenew.online\/blog\/author\/abhishek\/#author","url":"https:\/\/2thenew.online\/blog\/author\/abhishek\/","name":"Abhishek Tejpaul","image":{"@type":"ImageObject","@id":"https:\/\/2thenew.online\/blog\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/9aad3b7249e392a23dee22fda2eb99c64c33950f509a91e8c37e82efd8c3a388?s=96&d=mm&r=g","width":96,"height":96,"caption":"Abhishek Tejpaul"}},{"@type":"WebPage","@id":"https:\/\/2thenew.online\/blog\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\/#webpage","url":"https:\/\/2thenew.online\/blog\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\/","name":"Grails Transactions using @Transactional annotations and Propagation.REQUIRES_NEW | TO THE NEW Blog","description":"Hi All, Here is how you can implement a new transaction in an already executing transaction in Grails which uses nothing but Spring framework's Transaction mechanism as an underlying implementation. Spring provides @Transactional annotations to provide declarative transactions. We can use the same in our Grails project to achieve the transactional behavior. Here is the","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/2thenew.online\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/2thenew.online\/blog\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\/#breadcrumblist"},"author":{"@id":"https:\/\/2thenew.online\/blog\/author\/abhishek\/#author"},"creator":{"@id":"https:\/\/2thenew.online\/blog\/author\/abhishek\/#author"},"datePublished":"2010-07-30T13:31:37+05:30","dateModified":"2010-08-04T15:20:24+05:30"},{"@type":"WebSite","@id":"https:\/\/2thenew.online\/blog\/#website","url":"https:\/\/2thenew.online\/blog\/","name":"TO THE NEW Blog","inLanguage":"en-US","publisher":{"@id":"https:\/\/2thenew.online\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"TO THE NEW BLOG","og:type":"blog","og:title":"Grails Transactions using @Transactional annotations and Propagation.REQUIRES_NEW | TO THE NEW Blog","og:description":"Hi All, Here is how you can implement a new transaction in an already executing transaction in Grails which uses nothing but Spring framework's Transaction mechanism as an underlying implementation. Spring provides @Transactional annotations to provide declarative transactions. We can use the same in our Grails project to achieve the transactional behavior. Here is the","og:url":"https:\/\/2thenew.online\/blog\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\/","og:image":"https:\/\/2thenew.online\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png","og:image:secure_url":"https:\/\/2thenew.online\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png","twitter:card":"summary","twitter:site":"@tothenew","twitter:title":"Grails Transactions using @Transactional annotations and Propagation.REQUIRES_NEW | TO THE NEW Blog","twitter:description":"Hi All, Here is how you can implement a new transaction in an already executing transaction in Grails which uses nothing but Spring framework's Transaction mechanism as an underlying implementation. Spring provides @Transactional annotations to provide declarative transactions. We can use the same in our Grails project to achieve the transactional behavior. Here is the","twitter:image":"https:\/\/2thenew.online\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png"},"aioseo_meta_data":{"post_id":"1405","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2021-04-29 15:11:55","updated":"2024-02-29 09:26:22","focus_keyword":null,"additional_keywords":null,"truseo_locale":null,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/2thenew.online\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/2thenew.online\/blog\/category\/grails\/\" title=\"Grails\">Grails<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tGrails Transactions using @Transactional annotations and Propagation.REQUIRES_NEW\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/2thenew.online\/blog"},{"label":"Grails","link":"https:\/\/2thenew.online\/blog\/category\/grails\/"},{"label":"Grails Transactions using @Transactional annotations and Propagation.REQUIRES_NEW","link":"https:\/\/2thenew.online\/blog\/grails-transactions-using-transactional-annotations-and-propagation-requires_new\/"}],"_links":{"self":[{"href":"https:\/\/2thenew.online\/blog\/wp-json\/wp\/v2\/posts\/1405","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/2thenew.online\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/2thenew.online\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/2thenew.online\/blog\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/2thenew.online\/blog\/wp-json\/wp\/v2\/comments?post=1405"}],"version-history":[{"count":0,"href":"https:\/\/2thenew.online\/blog\/wp-json\/wp\/v2\/posts\/1405\/revisions"}],"wp:attachment":[{"href":"https:\/\/2thenew.online\/blog\/wp-json\/wp\/v2\/media?parent=1405"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/2thenew.online\/blog\/wp-json\/wp\/v2\/categories?post=1405"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/2thenew.online\/blog\/wp-json\/wp\/v2\/tags?post=1405"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}