{"id":33250,"date":"2014-11-24T07:00:03","date_gmt":"2014-11-24T05:00:03","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/?p=33250"},"modified":"2014-11-23T10:05:27","modified_gmt":"2014-11-23T08:05:27","slug":"prototyping-an-enterprise-webapp-at-devoxx-hackergarten","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2014\/11\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html","title":{"rendered":"Prototyping an enterprise webapp at Devoxx Hackergarten"},"content":{"rendered":"<p>For the 10th year in a row, I attended <a href=\"http:\/\/www.devoxx.com\">DevoxxBe<\/a>. It\u2019s my favorite Java conference, but the talk schedule isn\u2019t always optimal: sometimes I want to see 2 great talks at the same time! So at the Hackergarten at Devoxx, between attending talks, a few of us started building a webapp to improve the schedule. We\u2019re calling the prototype <a href=\"https:\/\/github.com\/ge0ffrey\/optaconf\">OptaConf<\/a> and it\u2019s under Apache License.<\/p>\n<p>For the past 4 years, I &#8216;ve been working in my corner of the world (OptaPlanner, Drools, etc), so my experience on other enterprise Java technologies (JEE) is getting a bit stale. Presentations (such as those at Devoxx) keep me in touch with the ever changing Java enterprise world, but nothing beats getting some personal hands-on experience by writing a realistic webapp.<\/p>\n<p>I wrote the backend. The frontend was graciously contributed by other Hackergarten attendees: Ixchel, David, Anne Marije, Celestino and Federico. Special thanks to the Hackergarten host Andres for bringing us to together and to other Hackergarten attendees (sometimes the project lead of the specific technology) to help us overcome pitfalls.<\/p>\n<h2>Backend<\/h2>\n<p>Writing the backend turned out to be a breeze, using JEE 7 technologies:<\/p>\n<ul>\n<li><strong>Plain Java<\/strong> to model the <strong>domain classes<\/strong>, such as <code>Speaker<\/code>, <code>Room<\/code>, etc.<\/li>\n<li><strong>JAXRS<\/strong> to expose a <strong>REST service<\/strong> to serve data to the webUI.\n<ul>\n<li>This was literally as simple as adding a few annotations (<code>@GET<\/code>, <code>@Path<\/code>, \u2026\u200b) and a short entry in the <code>web.xml<\/code>. Brilliant.<\/li>\n<li>For more info, see <a href=\"http:\/\/resteasy.jboss.org\/\">RESTEasy\u2019s documentation<\/a>.<\/li>\n<\/ul>\n<\/li>\n<li><strong>JsonReader<\/strong> to import the talks data from the <a href=\"http:\/\/cfp.devoxx.be\/api\">Devoxx CFP API<\/a> which is then transformed to our domain classes.\n<ul>\n<li>I didn\u2019t use JAXRS to read that REST stream, because JsonReader gives me a DOM approach to the data, which I then directly map to our domain classes, without having to model their domain class too (which have no further use to us).<\/li>\n<li>Thanks to Arun and the <a href=\"https:\/\/github.com\/javaee-samples\/javaee7-samples\">JEE 7 samples<\/a> to point me in the direction of the right tech for the job.<\/li>\n<\/ul>\n<\/li>\n<li><strong>OptaPlanner<\/strong> to optimize the schedule\n<ul>\n<li>This was also very easy to use for me!<\/li>\n<li>For more info, see the <a href=\"http:\/\/www.optaplanner.org\">OptaPlanner documentation<\/a>.<\/li>\n<\/ul>\n<\/li>\n<li><strong>CDI<\/strong> to glue it all together\n<ul>\n<li>This was a bit harder: although the initial <code>@Inject<\/code> worked nicely, using a producer to provide dummy test data (before the Devoxx CFP import was written) had me stuck on a few pitfalls:\n<ul>\n<li>There are 2 annotations named <code>@Produces<\/code> and I automatically imported the wrong one.<\/li>\n<li>I had an ambiguous dependency between the producer and the original object, so I had to resort to adding <code>@Vetoed<\/code> on the original object\u2026\u200b<\/li>\n<\/ul>\n<\/li>\n<li>For more info, see <a href=\"http:\/\/weld.cdi-spec.org\">Weld\u2019s documentation<\/a>.<\/li>\n<\/ul>\n<\/li>\n<li><strong>WildFly 8<\/strong> to deploy the webapp.\n<ul>\n<li>This is so fast, it\u2019s amazing. Startup and deploying our webapp take about 3 seconds.<\/li>\n<li>The maven-wildfly-plugin to deploy the webapp from command line:\n<ul>\n<li>Just make sure a wildfly server is running first: if it\u2019s not, <a href=\"https:\/\/issues.jboss.org\/browse\/WFLY-4080\">the error message isn\u2019t entirely clear<\/a>.<\/li>\n<\/ul>\n<\/li>\n<li>IntelliJ to deploy the exploded webapp directly from my IDE\n<ul>\n<li>It uses the JBoss app server plugin, which is only available IntelliJ Enterprise, not in IntelliJ Community.<\/li>\n<li>First an annoying pitfall needed to be fixed: <a href=\"https:\/\/issues.jboss.org\/browse\/WFLY-4081\">the exploded directory needs to end with <code>.war<\/code><\/a>.<\/li>\n<\/ul>\n<\/li>\n<li>For more info, see the <a href=\"http:\/\/wildfly.org\">WildFly website<\/a>.<\/li>\n<\/ul>\n<\/li>\n<li><strong>JPA Hibernate<\/strong> to persist the data\n<ul>\n<li>This hasn\u2019t been implemented yet. Once your session expires (after 30 minutes) your data is currently lost.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>All in all, this has come together well. In less than 1 day\u2019s work, I was able to implement the entire backend: import the Devoxx, optimize it and expose it as a REST service. Of course, having the experts around to immediately solve pitfalls, helped.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p>What I really liked it the <code>pom.xml<\/code> configuration. This is the <em>entire<\/em> dependency tree to have <em>all<\/em> those techs available:<\/p>\n<pre class=\" brush:xml\">&lt;dependencies&gt;\r\n  &lt;dependency&gt;\r\n    &lt;groupId&gt;org.optaplanner&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;optaplanner-core&lt;\/artifactId&gt;\r\n    &lt;version&gt;6.2.0.CR1&lt;\/version&gt;\r\n  &lt;\/dependency&gt;\r\n  &lt;dependency&gt;\r\n    &lt;groupId&gt;javax&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;javaee-api&lt;\/artifactId&gt;\r\n    &lt;version&gt;7.0&lt;\/version&gt;\r\n    &lt;scope&gt;provided&lt;\/scope&gt;\r\n  &lt;\/dependency&gt;\r\n&lt;\/dependencies&gt;<\/pre>\n<h2>Frontend<\/h2>\n<p>I didn\u2019t work on the frontend myself, so it\u2019s hard to comment (but that won\u2019t stop me). We had 3 incarnations. All used AngularJS, some with bower and other stuff. Personally I feel all web ui technologies are clunky: every year there\u2019s a new one being hyped and we should all migrate to that one. Some (Flex for example) went from hype to dead in less than a year.<\/p>\n<p>Anyway, ranting aside, the frontend guys did a nice job, especially Celestino\u2019s contributions very nicely visualized the schedule:<\/p>\n<h3>Before: the original Devoxx 2014 schedule<\/h3>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/11\/optaconfPocDevoxxScheduleBefore.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-33465\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/11\/optaconfPocDevoxxScheduleBefore.png\" alt=\"optaconfPocDevoxxScheduleBefore\" width=\"848\" height=\"435\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/11\/optaconfPocDevoxxScheduleBefore.png 1173w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/11\/optaconfPocDevoxxScheduleBefore-300x153.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/11\/optaconfPocDevoxxScheduleBefore-1024x525.png 1024w\" sizes=\"(max-width: 848px) 100vw, 848px\" \/><\/a><\/p>\n<p>Above is the original Devoxx 2014 schedule for Wednesday. <strong>Each track (which are a set of related talks) has it own background color.<\/strong><\/p>\n<p>Notice how in the first timeslot, there are 2 Web &amp; HTML5 talks (purple) at the same time. And in the second timeslot, there are 2 Cloud &amp; BigData talks (brown) at the same time. And there are no Methodology talks (green) on Wednesday! That means Methodology talks are almost unavoidable on Thursday\u2026\u200b oh, the horror!<\/p>\n<h3>After: the POC optimized Devoxx 2014 schedule<\/h3>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/11\/optaconfPocDevoxxScheduleAfter.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-33466\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/11\/optaconfPocDevoxxScheduleAfter.png\" alt=\"optaconfPocDevoxxScheduleAfter\" width=\"848\" height=\"480\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/11\/optaconfPocDevoxxScheduleAfter.png 1175w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/11\/optaconfPocDevoxxScheduleAfter-300x169.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/11\/optaconfPocDevoxxScheduleAfter-1024x579.png 1024w\" sizes=\"(max-width: 848px) 100vw, 848px\" \/><\/a><\/p>\n<p>Above is the schedule after it\u2019s optimized with <a href=\"http:\/\/www.optaplanner.org\">OptaPlanner<\/a> for Wednesday. Notice how I can now watch all the talks of an entire track without missing a single one. This optimization already takes speaker conflicts into account.<\/p>\n<p>Additional constraints should be easy to add, such as:<\/p>\n<ul>\n<li>Popular talks get bigger rooms<\/li>\n<li>Track room stability: to minimize people having to switch rooms<\/li>\n<li>No 2 rock star speakers at the same time<\/li>\n<li>Rock stars get prime time timeslots<\/li>\n<li><em>Social<\/em> speakers don\u2019t get morning slots<\/li>\n<li>\u2026\u200b and many more<\/li>\n<\/ul>\n<p>We just need more input data, such as: which talks are popular, which speakers are rock stars, \u2026\u200b<\/p>\n<h2>Conclusion<\/h2>\n<p>On the backend, it has become a lot simpler. JEE 7 just works. It\u2019s much simpler than it\u2019s predecessors. Most rough edges are gone. For full disclosure: I work for Red Hat, so I stuck to their implementations whenever there was a choice.<\/p>\n<p>On the frontend however\u2026\u200b there\u2019s just so much choice and so many trade-offs between the technologies, that I am reluctant to recommend anything really: they all suck, all in their own special way. Either you\u2019re writing lots of indirectional JavaScript or you\u2019re dealing with a long monolithic compilation or you\u2019re stuck with a over-engineered, chatty lifecycle. And those are just the top 3 web UI frameworks!<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"http:\/\/www.optaplanner.org\/blog\/2014\/11\/17\/Prototyping-a-full-webapp-at-Devoxx-hackergarten.html\">Prototyping an enterprise webapp at Devoxx Hackergarten<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/jcg\/\">JCG partner<\/a> Geoffrey De Smet at the <a href=\"http:\/\/www.optaplanner.org\/blog\/\">OptaPlanner<\/a> blog.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>For the 10th year in a row, I attended DevoxxBe. It\u2019s my favorite Java conference, but the talk schedule isn\u2019t always optimal: sometimes I want to see 2 great talks at the same time! So at the Hackergarten at Devoxx, between attending talks, a few of us started building a webapp to improve the schedule. &hellip;<\/p>\n","protected":false},"author":398,"featured_media":152,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[176],"class_list":["post-33250","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-jboss-drools"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Prototyping an enterprise webapp at Devoxx Hackergarten<\/title>\n<meta name=\"description\" content=\"For the 10th year in a row, I attended DevoxxBe. It\u2019s my favorite Java conference, but the talk schedule isn\u2019t always optimal: sometimes I want to see 2\" \/>\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\/2014\/11\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Prototyping an enterprise webapp at Devoxx Hackergarten\" \/>\n<meta property=\"og:description\" content=\"For the 10th year in a row, I attended DevoxxBe. It\u2019s my favorite Java conference, but the talk schedule isn\u2019t always optimal: sometimes I want to see 2\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2014\/11\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.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=\"2014-11-24T05:00:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/jboss-drools-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=\"Geoffrey De Smet\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/geoffreydesmet\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Geoffrey De Smet\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/11\\\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/11\\\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html\"},\"author\":{\"name\":\"Geoffrey De Smet\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/25497406a27f9189d714587675201500\"},\"headline\":\"Prototyping an enterprise webapp at Devoxx Hackergarten\",\"datePublished\":\"2014-11-24T05:00:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/11\\\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html\"},\"wordCount\":1028,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/11\\\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/jboss-drools-logo.jpg\",\"keywords\":[\"JBoss Drools\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/11\\\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/11\\\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/11\\\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html\",\"name\":\"Prototyping an enterprise webapp at Devoxx Hackergarten\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/11\\\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/11\\\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/jboss-drools-logo.jpg\",\"datePublished\":\"2014-11-24T05:00:03+00:00\",\"description\":\"For the 10th year in a row, I attended DevoxxBe. It\u2019s my favorite Java conference, but the talk schedule isn\u2019t always optimal: sometimes I want to see 2\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/11\\\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/11\\\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/11\\\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/jboss-drools-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/jboss-drools-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/11\\\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.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\":\"Prototyping an enterprise webapp at Devoxx Hackergarten\"}]},{\"@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\\\/25497406a27f9189d714587675201500\",\"name\":\"Geoffrey De Smet\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ec076f2817cc5f85165ca7ecae6967f23718607d7cb5a0e93a1aec5f7cb1b8a3?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ec076f2817cc5f85165ca7ecae6967f23718607d7cb5a0e93a1aec5f7cb1b8a3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ec076f2817cc5f85165ca7ecae6967f23718607d7cb5a0e93a1aec5f7cb1b8a3?s=96&d=mm&r=g\",\"caption\":\"Geoffrey De Smet\"},\"description\":\"Geoffrey De Smet (Red Hat) is the lead and founder of OptaPlanner. Before joining Red Hat in 2010, he was formerly employed as a Java consultant, an A.I. researcher and an enterprise application project lead. He has contributed to many open source projects (such as drools, jbpm, pressgang, spring-richclient, several maven plugins, weld, arquillian, ...). Since he started OptaPlanner in 2006, he\u2019s been passionately addicted to planning optimization.\",\"sameAs\":[\"http:\\\/\\\/blog.athico.com\\\/\",\"http:\\\/\\\/www.linkedin.com\\\/in\\\/ge0ffrey\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/geoffreydesmet\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/geoffrey-de-smet\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Prototyping an enterprise webapp at Devoxx Hackergarten","description":"For the 10th year in a row, I attended DevoxxBe. It\u2019s my favorite Java conference, but the talk schedule isn\u2019t always optimal: sometimes I want to see 2","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\/2014\/11\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html","og_locale":"en_US","og_type":"article","og_title":"Prototyping an enterprise webapp at Devoxx Hackergarten","og_description":"For the 10th year in a row, I attended DevoxxBe. It\u2019s my favorite Java conference, but the talk schedule isn\u2019t always optimal: sometimes I want to see 2","og_url":"https:\/\/www.javacodegeeks.com\/2014\/11\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2014-11-24T05:00:03+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/jboss-drools-logo.jpg","type":"image\/jpeg"}],"author":"Geoffrey De Smet","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/geoffreydesmet","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Geoffrey De Smet","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2014\/11\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/11\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html"},"author":{"name":"Geoffrey De Smet","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/25497406a27f9189d714587675201500"},"headline":"Prototyping an enterprise webapp at Devoxx Hackergarten","datePublished":"2014-11-24T05:00:03+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/11\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html"},"wordCount":1028,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/11\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/jboss-drools-logo.jpg","keywords":["JBoss Drools"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2014\/11\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2014\/11\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html","url":"https:\/\/www.javacodegeeks.com\/2014\/11\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html","name":"Prototyping an enterprise webapp at Devoxx Hackergarten","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/11\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/11\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/jboss-drools-logo.jpg","datePublished":"2014-11-24T05:00:03+00:00","description":"For the 10th year in a row, I attended DevoxxBe. It\u2019s my favorite Java conference, but the talk schedule isn\u2019t always optimal: sometimes I want to see 2","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/11\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2014\/11\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2014\/11\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/jboss-drools-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/jboss-drools-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2014\/11\/prototyping-an-enterprise-webapp-at-devoxx-hackergarten.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":"Prototyping an enterprise webapp at Devoxx Hackergarten"}]},{"@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\/25497406a27f9189d714587675201500","name":"Geoffrey De Smet","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/ec076f2817cc5f85165ca7ecae6967f23718607d7cb5a0e93a1aec5f7cb1b8a3?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/ec076f2817cc5f85165ca7ecae6967f23718607d7cb5a0e93a1aec5f7cb1b8a3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ec076f2817cc5f85165ca7ecae6967f23718607d7cb5a0e93a1aec5f7cb1b8a3?s=96&d=mm&r=g","caption":"Geoffrey De Smet"},"description":"Geoffrey De Smet (Red Hat) is the lead and founder of OptaPlanner. Before joining Red Hat in 2010, he was formerly employed as a Java consultant, an A.I. researcher and an enterprise application project lead. He has contributed to many open source projects (such as drools, jbpm, pressgang, spring-richclient, several maven plugins, weld, arquillian, ...). Since he started OptaPlanner in 2006, he\u2019s been passionately addicted to planning optimization.","sameAs":["http:\/\/blog.athico.com\/","http:\/\/www.linkedin.com\/in\/ge0ffrey","https:\/\/x.com\/https:\/\/twitter.com\/geoffreydesmet"],"url":"https:\/\/www.javacodegeeks.com\/author\/geoffrey-de-smet"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/33250","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\/398"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=33250"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/33250\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/152"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=33250"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=33250"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=33250"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}