Blog

Java in Telecommunications – Order Management API

14 May, 2007

In the previous two episodes in this series we described the position of Java in the Telecommunications industry, Telemanagement Forum and the basics of OSS/J. This episode focuses on the Order Management API (JSR 264), this is one of the OSS/J APIs being developed using the JCP process (proposed final draft 2 will be released May/June ’07). It is also the API we covered during last weeks session at JavaOne.

Order management is a common process and virtually every organization does some sort of order management to ensure that it can process requests from it’s customers and deliver the requested product (for example book, car, drivers license) or service (for example telephony, health insurance, TV). The Order Management API is (as far as we know) the only open and standards based API available for order management and therefore is relevant for many organizations developing an order management solution (not telecommunications only). By using this API as a basis for your order management solution you can reuse the knowledge of others (not reinventing the wheel) and reduce your integration costs.

The key features are:

  • Supports both simple and complex use cases

  • Supports long running transactions

  • Defines the managed entities on which the Order Management operations work (Order, OrderItems, etc). These are extended from the Telemanagement Forums Shared Information/Data Model, the items used from the TMF SID are the non Telecommunications specific ones.

  • Defines the (extendible) state model for Orders.

  • Support for creation, starting, updating and removing Orders.

  • Support for bulk operations to create, update, remove orders. These are available in an atomic (all must succeed) or best effort (failing ones will be reported back) flavor.

  • Support for notification to keep clients informed of progress of an Order (not only clients that submitted an order but also other interested clients).

  • Notifications that requests the client for validation of certain aspects of the order (before it continues processing).

  • Notifications that requests the client for additional input (before it continues processing).

  • Extensibility. The types of orders (and all contents) and the order states can be extended for your specific needs.

  • Flexible query possibilities like query by key, query based on a template and defining named queries (comparable to JDBC Prepared Statements).

  • Support for static and dynamic typing of attributes of an Order.

  • Support meta-operations that (for example) enable a client to discover at runtime what orders are available.

The Order Management API is not bound to telecommunications specific orders. The API allows for definition of your own order types and and thus can be customized to the specific needs of other industries. To ensure that the operations exposed by the Order Management API are not bound to any specific industry, a generic type ‘Request’ is defined. This Request type is the supertype of all Orders and all Order Management API operations operate on Requests. It is possible to define your own Order types as subtype of Request, or as subtype of one of the four predefined Request subtypes: ProductOrder, ServiceOrder, ResourceOrder, WorkOrder (the latter requires human intervention).

“All nice and dandy”, I hear you think, “but can’t I achieve the same with BPEL?”. From a functional perspective you could realize the same functionality with BPEL (or many other technologies), however you would be inventing you own API instead of building on a standards based one. For example, BPEL will not give the standardized information model, state model or set of operations. You would need to define them yourself and thus you’re creating a proprietary solution. The advantage of reduction in integration costs is lost.

<!-- @page { size: 8.5in 11in; margin: 0.79in } P { margin-bottom: 0.08in } --> </p> <p style="margin-bottom: 0in">The Order Management API does not attempt to boil the ocean, the following items are out-of-scope and not defined in the API:</p> <ul> <li> <p style="margin-bottom: 0in">Workforce management: Management of staff, schedules etc. is not part of Order Management.</p> </li> <li> <p style="margin-bottom: 0in">Inventory Management: There is a separate Inventory API defining this (JSR 142). Because the will often be a close relation between Order Management and Inventory it can make sense to implement both APIs in one product. Both APIs build on the same OSS/J concepts and interaction is smooth.</p> </li> <li> <p style="margin-bottom: 0in">Order decomposition: This is implementation specific and cannot be defined in the API.</p> </li> </ul> <p style="margin-bottom: 0in">This blog entry roughly covers the first part of the <a href="http://www28.cplan.com/cc158/session_details.jsp?isid=286860&ilocation_id=158-1&ilanguage=english">presentation </a>we did at JavaOne, the second part was answering the question “How does the Order Management API fit into a Service Oriented Architecture?”. Guess what the subject of the next entry in this series will be…</p> </div> <!-- Author bio --> <div class=" max-w-5xl mx-auto"> <div class="w-full mt-lg"> <div class="rounded-lg bg-grey-100 mb-sm p-sm md:flex"> <img class="blog-author-pic w-20 h-20 rounded-full flex-grow-0" src="https://xebia.com/wp-content/uploads/2022/01/avatar_user_136_1641225371-120x120.png"> <div class="pt-4 md:pt-0 md:pl-sm flex-1 text-left"> <div class=""> <div class="block font-semibold">by <a class="text-black" href="https://xebia.com/blog/author/gvermaas/">Gero Vermaas</a> </div> <span class="text-grey-500 block pt-2"></span> </div> <div class="pt-6"> </div> </div> </div> </div> </div> </div> <!-- comments --> <div class="container"> <div class="wpdiscuz_top_clearing"></div> <div id='comments' class='comments-area'><div id='respond' style='width: 0;height: 0;clear: both;margin: 0;padding: 0;'></div> <div id="wpdcom" class="wpdiscuz_unauth wpd-default wpd-layout-1 wpd-comments-open"> <div class="wc_social_plugin_wrapper"> </div> <div class="wpd-form-wrap"> <div class="wpd-form-head"> <div class="wpd-auth"> <div class="wpd-login"> <a rel="nofollow" href="https://xebia.com/wp-login.php?redirect_to=https%3A%2F%2Fxebia.com%2Fblog%2Fjava-in-telecommunications-order-management-api%2F"><i class='fas fa-sign-in-alt'></i> Login</a> </div> </div> </div> <div class="wpd-form wpd-form-wrapper wpd-main-form-wrapper" id='wpd-main-form-wrapper-0_0'> <form class="wpd_comm_form wpd_main_comm_form" method="post" enctype="multipart/form-data" data-uploading="false"> <div class="wpd-field-comment"> <div class="wpdiscuz-item wc-field-textarea"> <div class="wpdiscuz-textarea-wrap "> <div class="wpd-avatar"> <img alt='guest' src='https://secure.gravatar.com/avatar/?s=56&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/?s=112&d=mm&r=g 2x' class='avatar avatar-56 photo avatar-default' height='56' width='56' loading='lazy'/> </div> <div id="wpd-editor-wraper-0_0" style="display: none;"> <div id="wpd-editor-char-counter-0_0" class="wpd-editor-char-counter"></div> <label style="display: none;" for="wc-textarea-0_0">Label</label> <textarea id="wc-textarea-0_0" required name="wc_comment" class="wc_comment wpd-field"></textarea> <div id="wpd-editor-0_0"></div> <div id="wpd-editor-toolbar-0_0"> <button title="Bold" class="ql-bold" ></button> <button title="Italic" class="ql-italic" ></button> <button title="Underline" class="ql-underline" ></button> <button title="Strike" class="ql-strike" ></button> <button title="Ordered List" class="ql-list" value='ordered' ></button> <button title="Unordered List" class="ql-list" value='bullet' ></button> <button title="Blockquote" class="ql-blockquote" ></button> <button title="Code Block" class="ql-code-block" ></button> <button title="Link" class="ql-link" ></button> <button title="Source Code" class="ql-sourcecode" data-wpde_button_name='sourcecode'>{}</button> <button title="Spoiler" class="ql-spoiler" data-wpde_button_name='spoiler'>[+]</button> <div class="wpd-editor-buttons-right"> <span class='wmu-upload-wrap' wpd-tooltip='Attach an image to this comment' wpd-tooltip-position='left'><label class='wmu-add'><i class='far fa-image'></i><input style='display:none;' class='wmu-add-files' type='file' name='wmu_files[]' accept='image/*'/></label></span> </div> </div> </div> </div> </div> </div> <div class="wpd-form-foot" style='display:none;'> <div class="wpdiscuz-textarea-foot"> <div class="wpdiscuz-button-actions"><div class='wmu-action-wrap'><div class='wmu-tabs wmu-images-tab wmu-hide'></div></div></div> </div> <div class="wpd-form-row"> <div class="wpd-form-col-left"> <div class="wpdiscuz-item wc_name-wrapper wpd-has-icon"> <div class="wpd-field-icon"><i class="fas fa-user"></i></div> <input id="wc_name-0_0" value="" required='required' aria-required='true' class="wc_name wpd-field" type="text" name="wc_name" placeholder="Name*" maxlength="50" pattern='.{3,50}' title=""> <label for="wc_name-0_0" class="wpdlb">Name*</label> </div> <div class="wpdiscuz-item wc_email-wrapper wpd-has-icon"> <div class="wpd-field-icon"><i class="fas fa-at"></i></div> <input id="wc_email-0_0" value="" required='required' aria-required='true' class="wc_email wpd-field" type="email" name="wc_email" placeholder="Email*" /> <label for="wc_email-0_0" class="wpdlb">Email*</label> </div> <div class="wpdiscuz-item wc_website-wrapper wpd-has-icon"> <div class="wpd-field-icon"><i class="fas fa-link"></i></div> <input id="wc_website-0_0" value="" class="wc_website wpd-field" type="text" name="wc_website" placeholder="Website" /> <label for="wc_website-0_0" class="wpdlb">Website</label> </div> </div> <div class="wpd-form-col-right"> <div class="wc-field-submit"> <label class="wpd_label" wpd-tooltip="Notify of new replies to this comment"> <input id="wc_notification_new_comment-0_0" class="wc_notification_new_comment-0_0 wpd_label__checkbox" value="comment" type="checkbox" name="wpdiscuz_notification_type" /> <span class="wpd_label__text"> <span class="wpd_label__check"> <i class="fas fa-bell wpdicon wpdicon-on"></i> <i class="fas fa-bell-slash wpdicon wpdicon-off"></i> </span> </span> </label> <input id="wpd-field-submit-0_0" class="wc_comm_submit wpd_not_clicked wpd-prim-button" type="submit" name="submit" value="Post Comment" /> </div> </div> <div class="clearfix"></div> </div> </div> <input type="hidden" class="wpdiscuz_unique_id" value="0_0" name="wpdiscuz_unique_id"> </form> </div> <div id="wpdiscuz_hidden_secondary_form" style="display: none;"> <div class="wpd-form wpd-form-wrapper wpd-secondary-form-wrapper" id='wpd-secondary-form-wrapper-wpdiscuzuniqueid' style='display: none;'> <div class="wpd-secondary-forms-social-content"></div><div class="clearfix"></div> <form class="wpd_comm_form wpd-secondary-form-wrapper" method="post" enctype="multipart/form-data" data-uploading="false"> <div class="wpd-field-comment"> <div class="wpdiscuz-item wc-field-textarea"> <div class="wpdiscuz-textarea-wrap "> <div class="wpd-avatar"> <img alt='guest' src='https://secure.gravatar.com/avatar/?s=56&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/?s=112&d=mm&r=g 2x' class='avatar avatar-56 photo avatar-default' height='56' width='56' loading='lazy'/> </div> <div id="wpd-editor-wraper-wpdiscuzuniqueid" style="display: none;"> <div id="wpd-editor-char-counter-wpdiscuzuniqueid" class="wpd-editor-char-counter"></div> <label style="display: none;" for="wc-textarea-wpdiscuzuniqueid">Label</label> <textarea id="wc-textarea-wpdiscuzuniqueid" required name="wc_comment" class="wc_comment wpd-field"></textarea> <div id="wpd-editor-wpdiscuzuniqueid"></div> <div id="wpd-editor-toolbar-wpdiscuzuniqueid"> <button title="Bold" class="ql-bold" ></button> <button title="Italic" class="ql-italic" ></button> <button title="Underline" class="ql-underline" ></button> <button title="Strike" class="ql-strike" ></button> <button title="Ordered List" class="ql-list" value='ordered' ></button> <button title="Unordered List" class="ql-list" value='bullet' ></button> <button title="Blockquote" class="ql-blockquote" ></button> <button title="Code Block" class="ql-code-block" ></button> <button title="Link" class="ql-link" ></button> <button title="Source Code" class="ql-sourcecode" data-wpde_button_name='sourcecode'>{}</button> <button title="Spoiler" class="ql-spoiler" data-wpde_button_name='spoiler'>[+]</button> <div class="wpd-editor-buttons-right"> <span class='wmu-upload-wrap' wpd-tooltip='Attach an image to this comment' wpd-tooltip-position='left'><label class='wmu-add'><i class='far fa-image'></i><input style='display:none;' class='wmu-add-files' type='file' name='wmu_files[]' accept='image/*'/></label></span> </div> </div> </div> </div> </div> </div> <div class="wpd-form-foot" style='display:none;'> <div class="wpdiscuz-textarea-foot"> <div class="wpdiscuz-button-actions"><div class='wmu-action-wrap'><div class='wmu-tabs wmu-images-tab wmu-hide'></div></div></div> </div> <div class="wpd-form-row"> <div class="wpd-form-col-left"> <div class="wpdiscuz-item wc_name-wrapper wpd-has-icon"> <div class="wpd-field-icon"><i class="fas fa-user"></i></div> <input id="wc_name-wpdiscuzuniqueid" value="" required='required' aria-required='true' class="wc_name wpd-field" type="text" name="wc_name" placeholder="Name*" maxlength="50" pattern='.{3,50}' title=""> <label for="wc_name-wpdiscuzuniqueid" class="wpdlb">Name*</label> </div> <div class="wpdiscuz-item wc_email-wrapper wpd-has-icon"> <div class="wpd-field-icon"><i class="fas fa-at"></i></div> <input id="wc_email-wpdiscuzuniqueid" value="" required='required' aria-required='true' class="wc_email wpd-field" type="email" name="wc_email" placeholder="Email*" /> <label for="wc_email-wpdiscuzuniqueid" class="wpdlb">Email*</label> </div> <div class="wpdiscuz-item wc_website-wrapper wpd-has-icon"> <div class="wpd-field-icon"><i class="fas fa-link"></i></div> <input id="wc_website-wpdiscuzuniqueid" value="" class="wc_website wpd-field" type="text" name="wc_website" placeholder="Website" /> <label for="wc_website-wpdiscuzuniqueid" class="wpdlb">Website</label> </div> </div> <div class="wpd-form-col-right"> <div class="wc-field-submit"> <label class="wpd_label" wpd-tooltip="Notify of new replies to this comment"> <input id="wc_notification_new_comment-wpdiscuzuniqueid" class="wc_notification_new_comment-wpdiscuzuniqueid wpd_label__checkbox" value="comment" type="checkbox" name="wpdiscuz_notification_type" /> <span class="wpd_label__text"> <span class="wpd_label__check"> <i class="fas fa-bell wpdicon wpdicon-on"></i> <i class="fas fa-bell-slash wpdicon wpdicon-off"></i> </span> </span> </label> <input id="wpd-field-submit-wpdiscuzuniqueid" class="wc_comm_submit wpd_not_clicked wpd-prim-button" type="submit" name="submit" value="Post Comment" /> </div> </div> <div class="clearfix"></div> </div> </div> <input type="hidden" class="wpdiscuz_unique_id" value="wpdiscuzuniqueid" name="wpdiscuz_unique_id"> </form> </div> </div> </div> <div id="wpd-threads" class="wpd-thread-wrapper"> <div class="wpd-thread-head"> <div class="wpd-thread-info " data-comments-count="1"> <span class='wpdtc' title='1'>1</span> Comment </div> <div class="wpd-space"></div> <div class="wpd-thread-filter"> <div class="wpd-filter wpdf-reacted wpd_not_clicked" wpd-tooltip="Most reacted comment"><i class="fas fa-bolt"></i></div> <div class="wpd-filter wpdf-hottest wpd_not_clicked" wpd-tooltip="Hottest comment thread"><i class="fas fa-fire"></i></div> <div class="wpd-filter wpdf-sorting"> <span class="wpdiscuz-sort-button wpdiscuz-date-sort-asc wpdiscuz-sort-button-active" data-sorting="oldest">Oldest</span> <i class="fas fa-sort-down"></i> <div class="wpdiscuz-sort-buttons"> <span class="wpdiscuz-sort-button wpdiscuz-date-sort-desc" data-sorting="newest">Newest</span> <span class="wpdiscuz-sort-button wpdiscuz-vote-sort-up" data-sorting="by_vote">Most Voted</span> </div> </div> </div> </div> <div class="wpd-comment-info-bar"> <div class="wpd-current-view"><i class="fas fa-quote-left"></i> Inline Feedbacks</div> <div class="wpd-filter-view-all">View all comments</div> </div> <div class="wpd-thread-list"> <div id='wpd-comm-4423_0' class='wpd-comment wpd_comment_level-1'><div class="wpd-comment-wrap wpd-blog-guest"> <div class="wpd-comment-left "> <div class="wpd-avatar "> <img class='avatar avatar-64 photo' width='64' height='64' src='https://xebia.com/wp-content/plugins/wpdiscuz/assets/img/trackback.png' alt='trackback'> </div> </div> <div id="comment-4423" class="wpd-comment-right"> <div class="wpd-comment-header"> <div class="wpd-comment-author "> <a href='http://blog.xebia.com/2007/04/03/ejb-3-annotations-to-the-max/' rel='noreferrer ugc nofollow' target='_blank'>Xebia Blog</a> </div> <div class="wpd-comment-date" title="September 25, 2007 9:03 am"> <i class='far fa-clock' aria-hidden='true'></i> 14 years ago </div> <div class="wpd-comment-share wpd-hidden wpd-tooltip wpd-top"> <i class='fas fa-share-alt' aria-hidden='true'></i> <div class="wpd-tooltip-content"> <a class='wc_tw' rel='noreferrer' target='_blank' href='https://twitter.com/intent/tweet?text=[…] The Order Management API 1.0 has been released... &url=https%3A%2F%2Fxebia.com%2Fjava-in-telecommunications-order-management-api%2F%23comment-4423' title='Share On Twitter'><i class='fab fa-twitter wpf-cta' aria-hidden='true'></i></a><a class='wc_vk' rel='noreferrer' target='_blank' href='https://vk.com/share.php?url=https://xebia.com/blog/java-in-telecommunications-order-management-api/' title='Share On VKontakte'><i class='fab fa-vk wpf-cta' aria-hidden='true'></i></a><a class='wc_ok' rel='noreferrer' target='_blank' href='https://connect.ok.ru/offer?url=https://xebia.com/blog/java-in-telecommunications-order-management-api/' title='Share On Odnoklassniki'><i class='fab fa-odnoklassniki wpf-cta' aria-hidden='true'></i></a> </div> </div> <div class="wpd-space"></div> <div class="wpd-comment-link wpd-hidden"> <span wpd-tooltip='Comment Link' wpd-tooltip-position='left'><i class='fas fa-link' aria-hidden='true' data-wpd-clipboard='https://xebia.com/java-in-telecommunications-order-management-api/#comment-4423'></i></span> </div> </div> <div class="wpd-comment-text"> <p>[…] The Order Management API 1.0 has been released. The Order Management API is (as far as we in the JSR264 Expert Group (EG) know) the only open and standards based API available for order management and is relevant for any organization developing an order management solution. By using this API as a basis for your Order Management solution you can reuse the knowledge of others (not reinventing the wheel), reduce your integration costs and create a flexible Order Management solution. In a previous blog post I already described the features of the API in detail, so I’ll just repeat the most important features: […]</p> </div> <div class="wpd-comment-footer"> <div class="wpd-vote"> <div class="wpd-vote-up wpd_not_clicked"> <svg aria-hidden='true' focusable='false' data-prefix='fas' data-icon='plus' class='svg-inline--fa fa-plus fa-w-14' role='img' xmlns='https://www.w3.org/2000/svg' viewBox='0 0 448 512'><path d='M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z'></path></svg> </div> <div class='wpd-vote-result' title='0'>0</div> <div class="wpd-vote-down wpd_not_clicked"> <svg aria-hidden='true' focusable='false' data-prefix='fas' data-icon='minus' class='svg-inline--fa fa-minus fa-w-14' role='img' xmlns='https://www.w3.org/2000/svg' viewBox='0 0 448 512'><path d='M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z'></path></svg> </div> </div> <div class="wpd-reply-button"> <svg xmlns='https://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M10 9V5l-7 7 7 7v-4.1c5 0 8.5 1.6 11 5.1-1-5-4-10-11-11z'/><path d='M0 0h24v24H0z' fill='none'/></svg> <span>Reply</span> </div> <div class="wpd-space"></div> </div> </div> </div><div id='wpdiscuz_form_anchor-4423_0'></div></div><!-- // From wpDiscuz's Caches // --> <div class="wpdiscuz-comment-pagination"> </div> </div> </div> </div> </div> <div id="wpdiscuz-loading-bar" class="wpdiscuz-loading-bar-unauth"></div> <div id="wpdiscuz-comment-message" class="wpdiscuz-comment-message-unauth"></div> </div> </section> </main> <!-- Related posts --> <section class="w-full pb-lg"> <div class="container pb-md"> <div class="md:flex justify-between items-center pb-md data-appear-group"> <h3 class="text-3xl text-black antialiased mb-4 md:mb-0">Explore related posts</h3> </div> <div class="grid md:gap-10 grid-cols-1 md:grid-cols-3 data-appear-group-sm"> <!-- Item --> <article class="has-img-zoom box case-post bg-white shadow-lg rounded-md flex flex-col"> <a href="https://xebia.com/blog/java-in-telecommunications-introduction/" class="img-wide block rounded-md overflow-hidden relative"> <div class="img-zoom h-full w-full absolute" style="background: url(https://xebia.com/wp-content/themes/xebia-theme/images/thumb01.jpg) no-repeat center; background-size: cover;" > </div> </a> <div class="p-6 md:p-sm flex flex-col justify-between h-full"> <div> <div class="text-sm text-purple font-bold pb-1 block cat-list"> <span class="cat-list-item">Uncategorized</span> </div> <a href="https://xebia.com/blog/java-in-telecommunications-introduction/" class="text-xl text-black my-0 font-semibold link-underline block leading-tight">Java in Telecommunications – Introduction</a> </div> <div class="md:flex items-center text-grey-700 pt-4 leading-tight"> <img class="flex-none blog-author-pic w-10 h-10 rounded-full border border-grey-200 mr-2" src="https://xebia.com/wp-content/uploads/2022/01/avatar_user_136_1641225371-250x250.png"> <div class="flex-auto"> <a class="text-grey-500 border-none " href="https://xebia.com/blog/author/gvermaas/">Gero Vermaas </a> <span class="text-sm md:text-base block text-grey-300">30 Mar, 2007</span> </div> </div> </div> </article> <!-- End item --><!-- Item --> <article class="has-img-zoom box case-post bg-white shadow-lg rounded-md flex flex-col"> <a href="https://xebia.com/blog/java-in-telecommunications-order-management-api-in-a-service-oriented-architecture/" class="img-wide block rounded-md overflow-hidden relative"> <div class="img-zoom h-full w-full absolute" style="background: url(https://xebia.com/wp-content/themes/xebia-theme/images/thumb01.jpg) no-repeat center; background-size: cover;" > </div> </a> <div class="p-6 md:p-sm flex flex-col justify-between h-full"> <div> <div class="text-sm text-purple font-bold pb-1 block cat-list"> <span class="cat-list-item">Uncategorized</span> </div> <a href="https://xebia.com/blog/java-in-telecommunications-order-management-api-in-a-service-oriented-architecture/" class="text-xl text-black my-0 font-semibold link-underline block leading-tight">Java in Telecommunications – Order Management API in a Service Oriented Architecture</a> </div> <div class="md:flex items-center text-grey-700 pt-4 leading-tight"> <img class="flex-none blog-author-pic w-10 h-10 rounded-full border border-grey-200 mr-2" src="https://xebia.com/wp-content/uploads/2022/01/avatar_user_136_1641225371-250x250.png"> <div class="flex-auto"> <a class="text-grey-500 border-none " href="https://xebia.com/blog/author/gvermaas/">Gero Vermaas </a> <span class="text-sm md:text-base block text-grey-300">06 Jun, 2007</span> </div> </div> </div> </article> <!-- End item --><!-- Item --> <article class="has-img-zoom box case-post bg-white shadow-lg rounded-md flex flex-col"> <a href="https://xebia.com/blog/standarize-on-java-platform-rather-than-java-language/" class="img-wide block rounded-md overflow-hidden relative"> <div class="img-zoom h-full w-full absolute" style="background: url(https://xebia.com/wp-content/themes/xebia-theme/images/thumb01.jpg) no-repeat center; background-size: cover;" > </div> </a> <div class="p-6 md:p-sm flex flex-col justify-between h-full"> <div> <div class="text-sm text-purple font-bold pb-1 block cat-list"> <span class="cat-list-item">Uncategorized</span> </div> <a href="https://xebia.com/blog/standarize-on-java-platform-rather-than-java-language/" class="text-xl text-black my-0 font-semibold link-underline block leading-tight">Standarize on Java platform rather than Java language</a> </div> <div class="md:flex items-center text-grey-700 pt-4 leading-tight"> <img class="flex-none blog-author-pic w-10 h-10 rounded-full border border-grey-200 mr-2" src="https://secure.gravatar.com/avatar/5fb955df9063eb3c990c0b60bf7a8e38?s=250&d=mm&r=g"> <div class="flex-auto"> <a class="text-grey-500 border-none " href="https://xebia.com/blog/author/lvonk/">Lars Vonk </a> <span class="text-sm md:text-base block text-grey-300">06 Dec, 2007</span> </div> </div> </div> </article> <!-- End item --></div> </div> </section> <!-- footer --> <footer class="w-full bg-black pb-sm pt-4 text-white footer-main relative z-20"> <div class="footer-wave"> <img class="w-full" src="https://xebia.com/wp-content/themes/xebia-theme/images/footer.svg" alt=""> </div> <div class="container md:flex justify-between"> <div class=""> <div class="pb-6 pt-2"> <svg class="fill-current text-white w-24 h-10 mx-auto md:mx-0"> <title>Xebia Creating Digital Leaders

© Xebia 2022 | All rights reserved.