Blog

Java in Telecommunications – Order Management API in a Service Oriented Architecture

06 Jun, 2007

In the previous episodes in this series we started from a high level Java in the Telecommunications industry, zoomed in on Telemanagement Forum and the basics of OSS/J, described the basics of the Order Management API and now we’ll discuss why the Order Management API fits perfectly in an Service Oriented Architecture (SOA). Why is this a relevant question? Virtually any organization does with order management in one way or another and many organizations are currently evaluating or realizing SOAs. Reason enough to check if the Order Management API fits in an SOA.

SOA is the most hyped TLA over the last years… Because SOA is so hyped and every vendor is trying to give a definition that’s a perfect match for their product, we decided to not start with an SOA definition in our JavaOne and TMW presentations. Instead we took a more practical approach and compiled a list of concepts that are important for an SOA. We then checked if the Order Management API applied these concepts. The more concepts applied, the better the fit for use of the Order Management API in a SOA. An easy and efficient approach.

Below is the list of concepts we identified and per concept how this is applied in the Order Management API.

Service reuseServices exposed by the API can be reused for different types of Orders and are not bound to any specific business process.
Modular and autonomous <!-- @page { size: 8.5in 11in; margin: 0.79in } TD P { margin-bottom: 0in } P { margin-bottom: 0.08in } --> The OM API is modular because it supports various types of Orders and each implementation can extend the types of Order supported. New order types can be plugged in without changing the API. From the larger architecture perspective an OM API implementation can be seen as a module with a clear task: Order Management. It does for example not cover inventory management or CRM.The OM API is autonomous because it does not depend on other APIs to be implemented. If you implement the OM API, you have a fully functional Order Management system which can work autonomously.</td></tr><tr><td valign="top">Coarse grained</td><td><title /> <!-- @page { size: 8.5in 11in; margin: 0.79in } TD P { margin-bottom: 0in } P { margin-bottom: 0.08in } --> It is coarse grained becuase it allows for creation and starting of Orders by one call. There is no nitty-gritty interaction needed to create orders.</td></tr><tr><td valign="top">Asynchronous</td><td><title /> <!-- @page { size: 8.5in 11in; margin: 0.79in } TD P { margin-bottom: 0in } P { margin-bottom: 0.08in } --> Asynchronous interactions are supported by the events that are available on all integration profiles (EJB, XML/JMS and web services) and of course for the XML/JMS profile all interactions are asynchronous.</td></tr><tr><td valign="top">Stateless</td><td><title /> <!-- @page { size: 8.5in 11in; margin: 0.79in } TD P { margin-bottom: 0in } P { margin-bottom: 0.08in } --> While interacting with an OM implementation there is no stateful session being maintained (with the exception of execution large queries in which the result can be queried in batches).</td></tr><tr><td valign="top">Composable</td><td><title /> <!-- @page { size: 8.5in 11in; margin: 0.79in } TD P { margin-bottom: 0in } P { margin-bottom: 0.08in } --> The services exposed by the API can be used in larger business flows.</td></tr><tr><td valign="top">Described services</td><td><title /> <!-- @page { size: 8.5in 11in; margin: 0.79in } TD P { margin-bottom: 0in } P { margin-bottom: 0.08in } --> The services exposed by the API are well described via the XSDs (XML/JMS and webservice profiles), Javadoc (EJB profile).</td></tr><tr><td valign="top">Ubiquitous domain language/model</td><td><title /> <!-- @page { size: 8.5in 11in; margin: 0.79in } TD P { margin-bottom: 0in } P { margin-bottom: 0.08in } --> All entities used in the API are based on the <a title="Telemanagement Shared Information and Data Model" href="http://www.tmforum.org/browse.aspx?catid=1684">TelemanagementForums Shared Information and Data model</a>. This provides the ubiquitous language.<br /> Please be aware that only generic elements of this model are used to ensure that the API is not bound to telecommunications specific systems only.</td></tr><tr><td valign="top">Reliable messaging</td><td><title /> <!-- @page { size: 8.5in 11in; margin: 0.79in } TD P { margin-bottom: 0in } P { margin-bottom: 0.08in } --> Reliable messaging is supported through the JMS profile (and in future probably also for web service profile using the WS-Reliable Messaging standard).</td></tr><tr><td valign="top">Loosely coupled</td><td><title /> <!-- @page { size: 8.5in 11in; margin: 0.79in } TD P { margin-bottom: 0in } P { margin-bottom: 0.08in } --> Loose coupling is provided through the XML/JMS and web services profile.</td></tr><tr><td valign="top">XML Document based</td><td><title /> <!-- @page { size: 8.5in 11in; margin: 0.79in } TD P { margin-bottom: 0in } P { margin-bottom: 0.08in } --> Both the XML/JMS and web services profile use XML based message exchanges.</td></tr><tr><td valign="top">Interoperable</td><td><title /> <!-- @page { size: 8.5in 11in; margin: 0.79in } TD P { margin-bottom: 0in } P { margin-bottom: 0.08in } --> The web services profile support interoperability with other implementation technologies. Interoperability is also supported by the XML/JMS profile since many JMS providers provide APIs for non-Java clients.</td></tr></table><p style="margin-bottom: 0in"><p style="margin-bottom: 0in">These are all the concepts that apply to the Order Management API. The following concepts are not addressed by the Order Management API and I’ll explain why:</p><p style="margin-bottom: 0in"><table width="665" cellspacing="0" cellpadding="0" border="0"><tr valign="top"><td style="width: 230px">Versioning</td><td style="width: 435px">There is no standard way for versioning of (for example) orders without breaking already connected clients. For example, when you’d add an attribute to an Order on the server, clients that validate the XML against the XML Schema will break.There are some ways to deal with this, but the Order Management API (or the OSS/J APIs in general) dooes not define how this situation should be handled. Luckily the Order Management API does provide support for dynamic attributes and by using these the problem becomes less urgent, but it is something that should be addressed in the future.</td></tr><tr><td valign="top"><title /> <!-- @page { size: 8.5in 11in; margin: 0.79in } TD P { margin-bottom: 0in } P { margin-bottom: 0.08in } --> Policy Driven, Registry and discovery, Orchestration</td><td valign="top"><title /> <!-- @page { size: 8.5in 11in; margin: 0.79in } TD P { margin-bottom: 0in } P { margin-bottom: 0.08in } --> These concepts should not be defined by one single system in a SOA, but are the responsibility of the SOA eco-system. Order Management API implementations can perfectly participate in a policy driven SOA, or be registered and discovered, or be used by and orchestration engine, but, the API does and should not define how this is realized.</td></tr><tr><td valign="top"><title /> <!-- @page { size: 8.5in 11in; margin: 0.79in } TD P { margin-bottom: 0in } P { margin-bottom: 0.08in } --> Security</td><td valign="top"><title /> <!-- @page { size: 8.5in 11in; margin: 0.79in } TD P { margin-bottom: 0in } P { margin-bottom: 0.08in } --> The Order Management API itself does not specify how security should be addressed, but because it builds on the JavaEE and web service specifications, the security features of JavaEE and web services can be used to address security needs.</td></tr></table><p style="margin-bottom: 0in"><p style="margin-bottom: 0in">In summary the Order Management API conforms to most of the relevant SOA concepts. If you’re in a situation where an Order Management system needs to be integrated into an SOA, consider the <a href="https://jsr264-public.dev.java.net/">Order Management API (JSR264)</a>. In case you’re missing important SOA concepts, let me know, then I’ll explain if and how the Order Management API applies these concepts.</p><p style="margin-bottom: 0in"><p style="margin-bottom: 0in"><p style="margin-bottom: 0in">This entry roughly covered the second part of our JavaOne and TMW presentations. What’s next… not sure yet, but I’ll be back with more Java and telco related posts. Suggestions are welcome 😉</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 lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4AQAAAAARHwt/AAAAAnRSTlMAAHaTzTgAAAAXSURBVDjLY2AYBaNgFIyCUTAKRgG9AQAHgAABOufK1AAAAABJRU5ErkJggg==" data-src="https://sp-ao.shortpixel.ai/client/to_auto,q_lossy,ret_img/https://xebia.com/wp-content/uploads/2022/01/avatar_user_136_1641225371-120x120.png" decoding="async"><noscript><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" data-eio="l"></noscript><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-in-a-service-oriented-architecture%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="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADgAAAA4AQAAAACA/QazAAAAAnRSTlMAAHaTzTgAAAAOSURBVBjTY2AYBUMZAAABwAABtF8uAAAAAABJRU5ErkJggg==" class="avatar avatar-56 photo avatar-default lazyload" height='56' width='56' data-src="https://secure.gravatar.com/avatar/?s=56&d=mm&r=g" decoding="async" data-srcset="https://secure.gravatar.com/avatar/?s=112&d=mm&r=g 2x" /><noscript><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' data-eio="l" /></noscript></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="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADgAAAA4AQAAAACA/QazAAAAAnRSTlMAAHaTzTgAAAAOSURBVBjTY2AYBUMZAAABwAABtF8uAAAAAABJRU5ErkJggg==" class="avatar avatar-56 photo avatar-default lazyload" height='56' width='56' data-src="https://secure.gravatar.com/avatar/?s=56&d=mm&r=g" decoding="async" data-srcset="https://secure.gravatar.com/avatar/?s=112&d=mm&r=g 2x" /><noscript><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' data-eio="l" /></noscript></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-4430_0' class='pingback even thread-even depth-1 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 lazyload" width='64' height='64' src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAQAAAAB/ecQqAAAAAnRSTlMAAHaTzTgAAAANSURBVBjTY2AYBdQEAAFQAAGn4toWAAAAAElFTkSuQmCC" alt='trackback' data-src="https://sp-ao.shortpixel.ai/client/to_auto,q_lossy,ret_img,w_64,h_64/https://xebia.com/wp-content/plugins/wpdiscuz/assets/img/trackback.png" decoding="async"><noscript><img class='avatar avatar-64 photo' width='64' height='64' src='https://xebia.com/wp-content/plugins/wpdiscuz/assets/img/trackback.png' alt='trackback' data-eio="l"></noscript></div></div><div id="comment-4430" class="wpd-comment-right"><div class="wpd-comment-header"><div class="wpd-comment-author "> <a href='http://blog.xebia.com/2007/12/21/did-escape-analysis-escape-from-java-6/' rel='noreferrer ugc nofollow' target='_blank'>Xebia Blog</a></div><div class="wpd-comment-date" title="November 16, 2007 10:32 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=&url=https%3A%2F%2Fxebia.com%2Fblog%2Fjava-in-telecommunications-order-management-api-in-a-service-oriented-architecture%2F%23comment-4430' 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-in-a-service-oriented-architecture/' 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-in-a-service-oriented-architecture/' 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/blog/java-in-telecommunications-order-management-api-in-a-service-oriented-architecture/#comment-4430'></i></span></div></div><div class="wpd-comment-text"><p>[…] It integrates easily into a SOA, see previous blog posting. […]</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-4430_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-order-management-api/" class="img-wide block rounded-md overflow-hidden relative"><div class="img-zoom h-full w-full absolute lazyload" style="background: no-repeat center; background-size: cover;" data-bg="https://xebia.com/wp-content/themes/xebia-theme/images/thumb01.jpg"></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/" class="text-xl text-black my-0 font-semibold link-underline block leading-tight">Java in Telecommunications – Order Management API</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 lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AQAAAACgl2eQAAAAAnRSTlMAAHaTzTgAAAAeSURBVGje7cEBAQAAAIIg/69uSEABAAAAAAAAAL8GIDoAAeprBV8AAAAASUVORK5CYII=" data-src="https://sp-ao.shortpixel.ai/client/to_auto,q_lossy,ret_img/https://xebia.com/wp-content/uploads/2022/01/avatar_user_136_1641225371-250x250.png" decoding="async"><noscript><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" data-eio="l"></noscript><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">14 May, 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/podcast-episode-12-order-management-api-introduction/" class="img-wide block rounded-md overflow-hidden relative"><div class="img-zoom h-full w-full absolute lazyload" style="background: no-repeat center; background-size: cover;" data-bg="https://xebia.com/wp-content/themes/xebia-theme/images/thumb01.jpg"></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">Agile</span> <span class="px-1"> | </span> <span class="cat-list-item">Podcast</span></div> <a href="https://xebia.com/blog/podcast-episode-12-order-management-api-introduction/" class="text-xl text-black my-0 font-semibold link-underline block leading-tight">Podcast Episode 12 – Order management API 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 lazyload" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://secure.gravatar.com/avatar/8e74f066461acdcb1b5df895931fb1a7?s=250&d=mm&r=g" decoding="async"><noscript><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/8e74f066461acdcb1b5df895931fb1a7?s=250&d=mm&r=g" data-eio="l"></noscript><div class="flex-auto"> <a class="text-grey-500 border-none " href="https://xebia.com/blog/author/rvanloghem/">Robert van Loghem </a> <span class="text-sm md:text-base block text-grey-300">26 Sep, 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/jsr264-order-management-api-released/" class="img-wide block rounded-md overflow-hidden relative"><div class="img-zoom h-full w-full absolute lazyload" style="background: no-repeat center; background-size: cover;" data-bg="https://xebia.com/wp-content/themes/xebia-theme/images/thumb01.jpg"></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">Agile</span></div> <a href="https://xebia.com/blog/jsr264-order-management-api-released/" class="text-xl text-black my-0 font-semibold link-underline block leading-tight">JSR264 Order Management API released!</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 lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AQAAAACgl2eQAAAAAnRSTlMAAHaTzTgAAAAeSURBVGje7cEBAQAAAIIg/69uSEABAAAAAAAAAL8GIDoAAeprBV8AAAAASUVORK5CYII=" data-src="https://sp-ao.shortpixel.ai/client/to_auto,q_lossy,ret_img/https://xebia.com/wp-content/uploads/2022/01/avatar_user_136_1641225371-250x250.png" decoding="async"><noscript><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" data-eio="l"></noscript><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">25 Sep, 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 lazyload" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="" data-src="https://xebia.com/wp-content/themes/xebia-theme/images/footer.svg" decoding="async"><noscript><img class="w-full" src="https://xebia.com/wp-content/themes/xebia-theme/images/footer.svg" alt="" data-eio="l"></noscript></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.