{"id":1262,"date":"2012-05-15T10:00:00","date_gmt":"2012-05-15T10:00:00","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/2012\/10\/play-2-modules-plugins-whats-the-difference.html"},"modified":"2012-10-22T05:12:12","modified_gmt":"2012-10-22T05:12:12","slug":"play-2-modules-plugins-whats-difference","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2012\/05\/play-2-modules-plugins-whats-difference.html","title":{"rendered":"Play 2 &#8211; modules, plugins, what&#8217;s the difference?"},"content":{"rendered":"<div dir=\"ltr\" style=\"text-align: left\">There seems to be some confusion regarding Play 2 modules and plugins. I imagine this is because the two are often synonymous. In Play (both versions \u2013 1 and 2) there are distinct differences. In this post, I\u2019m going to look at what a plugin is, how to implement one in Java and Scala, and how to import plugins from modules.  <\/p>\n<p>  <strong>Plugins<\/strong><\/p>\n<p>A Play 2 plugin is a class that extends the Java class <a href=\"http:\/\/www.playframework.org\/documentation\/api\/2.0.1\/java\/play\/Plugin.html\" target=\"_blank\">play.Plugin<\/a> or has the Scala trait <a href=\"http:\/\/www.playframework.org\/documentation\/api\/2.0.1\/scala\/index.html#play.api.Plugin\" target=\"_blank\">play.api.Plugin<\/a>. This class may be something you have written in your own application, or it may be a plugin from a module.  <\/p>\n<p>  <strong>Writing a plugin in Java<\/strong>    <\/p>\n<p>Create new class, and have it extend play.Plugin. There are three methods available to override \u2013 onStart(), onStop() and enabled(). You can also add a constructor that takes a <a href=\"http:\/\/www.playframework.org\/documentation\/api\/2.0.1\/java\/play\/Application.html\" target=\"_blank\">play.Application<\/a> argument.     <\/p>\n<p>To have some functionality occur when the application starts, override onStart(). To have functionality occur when the application stops, override onStop(). It\u2019s that simple! Here\u2019s an example implementation which doesn\u2019t override enabled().     <\/p>\n<pre class=\"brush:java\">package be.objectify.example;\r\n\r\nimport play.Application;\r\nimport play.Configuration;\r\nimport play.Logger;\r\nimport play.Plugin;\r\n\r\n\/**\r\n * An example Play 2 plugin written in Java.\r\n *\/\r\npublic class MyExamplePlugin extends Plugin\r\n{\r\n    private final Application application;\r\n\r\n    public MyExamplePlugin(Application application)\r\n    {\r\n        this.application = application;\r\n    }\r\n\r\n    @Override\r\n    public void onStart()\r\n    {\r\n        Configuration configuration = application.configuration();\r\n        \/\/ you can now access the application.conf settings, including any custom ones you have added\r\n        Logger.info(\"MyExamplePlugin has started\");\r\n    }\r\n\r\n    @Override\r\n    public void onStop()\r\n    {\r\n        \/\/ you may want to tidy up resources here\r\n        Logger.info(\"MyExamplePlugin has stopped\");\r\n    }\r\n}\r\n<\/pre>\n<p><strong>Writing a plugin in Scala<\/strong>    <div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p>Create a new Scala class, and have it extends play.api.Plugin. Just as in the Java version, there are onStart(), onStop() and enabled() methods along with an play.api.Application constructor argument. Here\u2019s the Scala implementation:      <\/p>\n<pre class=\"brush:java\">package be.objectify.example\r\n\r\nimport play.api.{Logger, Application, Plugin}\r\n\r\n\/**\r\n * An example Play 2 plugin written in Scala.\r\n *\/\r\nclass MyExamplePlugin(application: Application) extends Plugin\r\n{\r\n  override def onStart()\r\n  {\r\n    val configuration = application.configuration;\r\n    \/\/ you can now access the application.conf settings, including any custom ones you have added\r\n    Logger.info(\"MyExamplePlugin has started\");\r\n  }\r\n\r\n  override def onStop()\r\n  {\r\n    \/\/ you may want to tidy up resources here\r\n    Logger.info(\"MyExamplePlugin has stopped\");\r\n  }\r\n}\r\n<\/pre>\n<p><strong>Hooking a plugin into your application<\/strong>    <\/p>\n<p>Regardless of the implementation language, plugins are invoked directly by Play once you have added them to the conf\/play.plugins file. This file isn\u2019t created when you start a new application, so you need to add it yourself. The syntax is &lt;priority&gt;:&lt;classname&gt;. For example, to add the example plugin to your project, you would use     <\/p>\n<pre class=\"brush:java\">10000:be.objectify.example.MyExamplePlugin\r\n<\/pre>\n<p> The class name is that of your plugin. The priority determines the order in which plugins start up, and just needs to be a number that is larger or smaller than that of another plugin. If you have several plugins, you can explicitly order them:     <\/p>\n<pre class=\"brush:java\">5000:be.objectify.example.MyExamplePlugin\r\n10000:be.objectify.example.MyOtherExamplePlugin\r\n<\/pre>\n<p><strong>Modules<\/strong>    <\/p>\n<p>A module can be thought of as a reusable application that you can include in your own app. It\u2019s analogous to a third-party library that adds specific functionality. A module can contain plugins, which you can hook into your app using the conf\/play.plugins file.     <\/p>\n<p>For example, if you\u2019re using Deadbolt 2 you would need to add the following to your play.plugins file:     <\/p>\n<pre class=\"brush:java\">10000:be.objectify.deadbolt.DeadboltPlugin\r\n<\/pre>\n<p> A list of Play 2 modules can be found on the <a href=\"https:\/\/github.com\/playframework\/Play20\/wiki\/Modules\" target=\"_blank\">Play 2 GitHub wiki<\/a>.     <\/p>\n<p>You can read more on creating modules for Play 2 <a href=\"http:\/\/www.objectify.be\/wordpress\/?p=363\" target=\"_blank\">here<\/a> and <a href=\"http:\/\/www.objectify.be\/wordpress\/?p=374\" target=\"_blank\">here<\/a>. <\/p>\n<p><strong><i>Reference: <\/i><\/strong><a href=\"http:\/\/www.objectify.be\/wordpress\/?p=464\">Play 2 \u2013 modules, plugins, what\u2019s the difference?<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/p\/jcg.html\">JCG partner<\/a> Steve Chaloner at the <a href=\"http:\/\/www.objectify.be\/\">Objectify<\/a> blog.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>There seems to be some confusion regarding Play 2 modules and plugins. I imagine this is because the two are often synonymous. In Play (both versions \u2013 1 and 2) there are distinct differences. In this post, I\u2019m going to look at what a plugin is, how to implement one in Java and Scala, and &hellip;<\/p>\n","protected":false},"author":162,"featured_media":215,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[177],"class_list":["post-1262","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-play-framework"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Play 2 - modules, plugins, what&#039;s the difference? - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"There seems to be some confusion regarding Play 2 modules and plugins. I imagine this is because the two are often synonymous. In Play (both versions \u2013 1\" \/>\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.javacodegeeks.com\/2012\/05\/play-2-modules-plugins-whats-difference.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Play 2 - modules, plugins, what&#039;s the difference? - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"There seems to be some confusion regarding Play 2 modules and plugins. I imagine this is because the two are often synonymous. In Play (both versions \u2013 1\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2012\/05\/play-2-modules-plugins-whats-difference.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2012-05-15T10:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2012-10-22T05:12:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/play-framework-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Steve Chaloner\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Steve Chaloner\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/play-2-modules-plugins-whats-difference.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/play-2-modules-plugins-whats-difference.html\"},\"author\":{\"name\":\"Steve Chaloner\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/60890581801aee820181ecddd5e5a8c3\"},\"headline\":\"Play 2 &#8211; modules, plugins, what&#8217;s the difference?\",\"datePublished\":\"2012-05-15T10:00:00+00:00\",\"dateModified\":\"2012-10-22T05:12:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/play-2-modules-plugins-whats-difference.html\"},\"wordCount\":447,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/play-2-modules-plugins-whats-difference.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/play-framework-logo.jpg\",\"keywords\":[\"Play Framework\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/play-2-modules-plugins-whats-difference.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/play-2-modules-plugins-whats-difference.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/play-2-modules-plugins-whats-difference.html\",\"name\":\"Play 2 - modules, plugins, what's the difference? - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/play-2-modules-plugins-whats-difference.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/play-2-modules-plugins-whats-difference.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/play-framework-logo.jpg\",\"datePublished\":\"2012-05-15T10:00:00+00:00\",\"dateModified\":\"2012-10-22T05:12:12+00:00\",\"description\":\"There seems to be some confusion regarding Play 2 modules and plugins. I imagine this is because the two are often synonymous. In Play (both versions \u2013 1\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/play-2-modules-plugins-whats-difference.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/play-2-modules-plugins-whats-difference.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/play-2-modules-plugins-whats-difference.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/play-framework-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/play-framework-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/play-2-modules-plugins-whats-difference.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Play 2 &#8211; modules, plugins, what&#8217;s the difference?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/60890581801aee820181ecddd5e5a8c3\",\"name\":\"Steve Chaloner\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/cbedd608bb95b48b50559f214151602a17a217aedbb19b9e9daec825facc46fd?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/cbedd608bb95b48b50559f214151602a17a217aedbb19b9e9daec825facc46fd?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/cbedd608bb95b48b50559f214151602a17a217aedbb19b9e9daec825facc46fd?s=96&d=mm&r=g\",\"caption\":\"Steve Chaloner\"},\"sameAs\":[\"http:\\\/\\\/www.objectify.be\\\/\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/Steve-Chaloner\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Play 2 - modules, plugins, what's the difference? - Java Code Geeks","description":"There seems to be some confusion regarding Play 2 modules and plugins. I imagine this is because the two are often synonymous. In Play (both versions \u2013 1","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.javacodegeeks.com\/2012\/05\/play-2-modules-plugins-whats-difference.html","og_locale":"en_US","og_type":"article","og_title":"Play 2 - modules, plugins, what's the difference? - Java Code Geeks","og_description":"There seems to be some confusion regarding Play 2 modules and plugins. I imagine this is because the two are often synonymous. In Play (both versions \u2013 1","og_url":"https:\/\/www.javacodegeeks.com\/2012\/05\/play-2-modules-plugins-whats-difference.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2012-05-15T10:00:00+00:00","article_modified_time":"2012-10-22T05:12:12+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/play-framework-logo.jpg","type":"image\/jpeg"}],"author":"Steve Chaloner","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Steve Chaloner","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/play-2-modules-plugins-whats-difference.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/play-2-modules-plugins-whats-difference.html"},"author":{"name":"Steve Chaloner","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/60890581801aee820181ecddd5e5a8c3"},"headline":"Play 2 &#8211; modules, plugins, what&#8217;s the difference?","datePublished":"2012-05-15T10:00:00+00:00","dateModified":"2012-10-22T05:12:12+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/play-2-modules-plugins-whats-difference.html"},"wordCount":447,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/play-2-modules-plugins-whats-difference.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/play-framework-logo.jpg","keywords":["Play Framework"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2012\/05\/play-2-modules-plugins-whats-difference.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/play-2-modules-plugins-whats-difference.html","url":"https:\/\/www.javacodegeeks.com\/2012\/05\/play-2-modules-plugins-whats-difference.html","name":"Play 2 - modules, plugins, what's the difference? - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/play-2-modules-plugins-whats-difference.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/play-2-modules-plugins-whats-difference.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/play-framework-logo.jpg","datePublished":"2012-05-15T10:00:00+00:00","dateModified":"2012-10-22T05:12:12+00:00","description":"There seems to be some confusion regarding Play 2 modules and plugins. I imagine this is because the two are often synonymous. In Play (both versions \u2013 1","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/play-2-modules-plugins-whats-difference.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2012\/05\/play-2-modules-plugins-whats-difference.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/play-2-modules-plugins-whats-difference.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/play-framework-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/play-framework-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/play-2-modules-plugins-whats-difference.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Play 2 &#8211; modules, plugins, what&#8217;s the difference?"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/60890581801aee820181ecddd5e5a8c3","name":"Steve Chaloner","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/cbedd608bb95b48b50559f214151602a17a217aedbb19b9e9daec825facc46fd?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/cbedd608bb95b48b50559f214151602a17a217aedbb19b9e9daec825facc46fd?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cbedd608bb95b48b50559f214151602a17a217aedbb19b9e9daec825facc46fd?s=96&d=mm&r=g","caption":"Steve Chaloner"},"sameAs":["http:\/\/www.objectify.be\/"],"url":"https:\/\/www.javacodegeeks.com\/author\/Steve-Chaloner"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/1262","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/162"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=1262"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/1262\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/215"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=1262"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=1262"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=1262"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}