• Home
  • RSS Feed
  • Log in

Gero Vermaas

Java in Telecommunications – Order Management API
Posted by Gero Vermaas in the early afternoon: May 14th, 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.

<meta name="GENERATOR" content="OpenOffice.org 2.0 (Linux)" /><meta name="AUTHOR" content="Gero Vermaas" /><meta name="CREATED" content="20070329;13524000" /><meta name="CHANGEDBY" content="Gero Vermaas" /><meta name="CHANGED" content="20070514;14401000" /><br /> <style type="text/css"> <!-- @page { size: 8.5in 11in; margin: 0.79in } P { margin-bottom: 0.08in } --> </style> <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 name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2007/05/14/java-in-telecommunications-%e2%80%93-order-management-api/"></g:plusone></div><div class="addtoany_share_save_container"><div class="a2a_kit a2a_target addtoany_list" id="wpa2a_1"><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></div> <script type="text/javascript"><!-- wpa2a.script_load(); //--></script> </div><!--'(more...)', strip_teaser, 'more_file'); --> </div> <div class="view-content"> <p class="postmetadata">Tags: <a href="http://blog.xebia.com/tag/telecommunications/" rel="tag">Telecommunications</a><br /> Filed under <a href="http://blog.xebia.com/category/java/" title="View all posts in Java" rel="category tag">Java</a> | <a href="http://blog.xebia.com/2007/05/14/java-in-telecommunications-%e2%80%93-order-management-api/#comments" title="Comment on Java in Telecommunications – Order Management API">1 Comment »</a></p> </div> <div class="view-content"><br /><br /> </div> </div> </div> </div> </div> </div> </div> <!-- You can start editing here. --> <div class="content-wrapper"> <div id="content" class="sidebar-right"> <h2 class="title">One Response to “Java in Telecommunications – Order Management API”</h2> <div class="node-wrapper"> <div class="node-content"> <div class="node-bg-fix"> <div class="view view-article-overview view-id-article_overview view-display-id-page_1 view-dom-id-1"> <div class="view-header"> <div class="navigation"> <div class="alignleft"></div> <div class="alignright"></div> </div> <ol class="commentlist"> <hr /><br /> <div id="div-comment-18100"> <div id="author-info" class="comment-author vcard"> <strong><cite class="fn"><a href='http://blog.xebia.com/2007/09/25/jsr264-order-management-api-released/' rel='external nofollow' class='url'>Xebia Blog</a></cite> Says:</strong> <div class="comment-meta commentmetadata">Posted at: <a href="http://blog.xebia.com/2007/05/14/java-in-telecommunications-%e2%80%93-order-management-api/#comment-18100">September 25, 2007 at 9:03 am</a></div> </div> <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 class="reply"> <a class='comment-reply-link' href='/2007/05/14/java-in-telecommunications-%e2%80%93-order-management-api/?replytocom=18100#respond' onclick='return addComment.moveForm("div-comment-18100", "18100", "respond", "228")'>Reply</a> </div> </div> </li> </ol> <hr /><br /> <div id="respond"> <h3>Leave a Reply</h3> <div class="cancel-comment-reply"> <small><a rel="nofollow" id="cancel-comment-reply-link" href="/2007/05/14/java-in-telecommunications-%e2%80%93-order-management-api/#respond" style="display:none;">Click here to cancel reply.</a></small> </div> <form action="http://blog.xebia.com/wp-comments-post.php" method="post" id="commentform"> <p><input type="text" name="author" id="author" value="" size="22" tabindex="1" aria-required='true' /> <label for="author"><small>Name (required)</small></label></p> <p><input type="text" name="email" id="email" value="" size="22" tabindex="2" aria-required='true' /> <label for="email"><small>Mail (will not be published) (required)</small></label></p> <p><input type="text" name="url" id="url" value="" size="22" tabindex="3" /> <label for="url"><small>Website</small></label></p> <!--<p><small><strong>XHTML:</strong> You can use these tags: <code><a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> </code></small></p>--> <p><textarea name="comment" id="comment" cols="85%" rows="10" tabindex="4"></textarea></p> <p><input name="submit" type="submit" id="submit" tabindex="5" value="Submit Comment" /> <input type='hidden' name='comment_post_ID' value='228' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /> </p> <p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="5a4c1aeaff" /></p> </form> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div class="navigation"> <div class="older"> </div> </div> <div id="sidebar-right" class="display-blocks"> <br/> <!-- Sites --> <div class="clear-block block block-views"> <h2>Xebia Sites</h2> <div class="block-wrapper"> <div class="content"><div class="view"> <div class="view-content"> <div class="item-list"> <ul> <li><a href="http://www.xebia.com">Xebia Corporate</a></li> <li><a href="http://www.xebia.fr">Xebia France</a></li> <li><a href="http://www.xebiaindia.com">Xebia India</a></li> <li><a href="http://www.xebia.se">Xebia Sweden</a></li> </ul> </div> </div> </div> </div> </div> </div> <!-- Categories --> <div class="clear-block block block-views"> <h2>Categories</h2> <div class="block-wrapper"> <div class="content"><div class="view"> <div class="view-content"> <div class="item-list"> <ul> <li class="cat-item cat-item-2"><div class=''views-field-title'><span class='field-content'><a href="http://blog.xebia.com/category/java/" title="View all posts filed under Java">Java</a> (311) </span></div></li> <li class="cat-item cat-item-20"><div class=''views-field-title'><span class='field-content'><a href="http://blog.xebia.com/category/agile/" title="View all posts filed under Agile">Agile</a> (181) </span></div></li> <li class="cat-item cat-item-5"><div class=''views-field-title'><span class='field-content'><a href="http://blog.xebia.com/category/general/" title="View all posts filed under General">General</a> (136) </span></div></li> <li class="cat-item cat-item-35"><div class=''views-field-title'><span class='field-content'><a href="http://blog.xebia.com/category/scrum/" title="View all posts filed under Scrum">Scrum</a> (67) </span></div></li> <li class="cat-item cat-item-38"><div class=''views-field-title'><span class='field-content'><a href="http://blog.xebia.com/category/architecture/" title="View all posts filed under Architecture">Architecture</a> (64) </span></div></li> <li class="cat-item cat-item-15"><div class=''views-field-title'><span class='field-content'><a href="http://blog.xebia.com/category/testing/" title="View all posts filed under Testing">Testing</a> (59) </span></div></li> <li class="cat-item cat-item-18"><div class=''views-field-title'><span class='field-content'><a href="http://blog.xebia.com/category/performance/" title="View all posts filed under Performance">Performance</a> (46) </span></div></li> <li class="cat-item cat-item-123"><div class=''views-field-title'><span class='field-content'><a href="http://blog.xebia.com/category/middleware/" title="View all posts filed under Middleware">Middleware</a> (56) <ul class='children'> <li class="cat-item cat-item-284"><div class=''views-field-title'><span class='field-content'><a href="http://blog.xebia.com/category/middleware/deployment/" title="View all posts filed under Deployment">Deployment</a> (38) </span></div></li> </ul> </span></div></li> <li class="cat-item cat-item-222"><div class=''views-field-title'><span class='field-content'><a href="http://blog.xebia.com/category/xebialabs/" title="View all posts filed under Xebia Labs">Xebia Labs</a> (39) </span></div></li> <li class="cat-item cat-item-23"><div class=''views-field-title'><span class='field-content'><a href="http://blog.xebia.com/category/soa/" title="View all posts filed under SOA">SOA</a> (31) </span></div></li> <li class="cat-item cat-item-29"><div class=''views-field-title'><span class='field-content'><a href="http://blog.xebia.com/category/podcast/" title="View all posts filed under Podcast">Podcast</a> (31) </span></div></li> <li class="cat-item cat-item-28"><div class=''views-field-title'><span class='field-content'><a href="http://blog.xebia.com/category/project-management/" title="View all posts filed under Project Management">Project Management</a> (28) </span></div></li> <li class="cat-item cat-item-165"><div class=''views-field-title'><span class='field-content'><a href="http://blog.xebia.com/category/tools/" title="View all posts filed under Tools">Tools</a> (26) </span></div></li> <li class="cat-item cat-item-1"><div class=''views-field-title'><span class='field-content'><a href="http://blog.xebia.com/category/uncategorized/" title="View all posts filed under Uncategorized">Uncategorized</a> (20) </span></div></li> <li class="cat-item cat-item-355"><div class=''views-field-title'><span class='field-content'><a href="http://blog.xebia.com/category/lean-architecture/" title="View all posts filed under lean architecture">lean architecture</a> (20) </span></div></li> <li class="cat-item cat-item-31"><div class=''views-field-title'><span class='field-content'><a href="http://blog.xebia.com/category/quality-assurance/" title="View all posts filed under Quality Assurance">Quality Assurance</a> (17) </span></div></li> <li class="cat-item cat-item-7"><div class=''views-field-title'><span class='field-content'><a href="http://blog.xebia.com/category/articles/" title="View all posts filed under Articles">Articles</a> (13) </span></div></li> <li class="cat-item cat-item-24"><div class=''views-field-title'><span class='field-content'><a href="http://blog.xebia.com/category/requirements-management/" title="View all posts filed under Requirements Management">Requirements Management</a> (13) </span></div></li> <li class="cat-item cat-item-39"><div class=''views-field-title'><span class='field-content'><a href="http://blog.xebia.com/category/virtualization/" title="View all posts filed under Virtualization">Virtualization</a> (19) </span></div></li> </ul> </div> </div> </div> </div> </div> </div> <!-- Tag Cloud --> <div class="clear-block block block-views"> <h2>Tag Cloud</h2> <div class="block-wrapper"> <div class="content"><div class="view"> <div class="view-content"> <div class="item-list"> <ul> <a href='http://blog.xebia.com/tag/lean-architectuur/' class='tag-link-361' title='13 topics' style='font-size: 10.7631578947pt;'>lean architectuur</a> <a href='http://blog.xebia.com/tag/product-owner/' class='tag-link-78' title='9 topics' style='font-size: 8pt;'>product owner</a> <a href='http://blog.xebia.com/tag/agile-architectuur/' class='tag-link-362' title='13 topics' style='font-size: 10.7631578947pt;'>agile architectuur</a> <a href='http://blog.xebia.com/tag/scrum/' class='tag-link-35' title='33 topics' style='font-size: 17.7631578947pt;'>Scrum</a> <a href='http://blog.xebia.com/tag/grails/' class='tag-link-34' title='11 topics' style='font-size: 9.47368421053pt;'>Grails</a> <a href='http://blog.xebia.com/tag/xml/' class='tag-link-12' title='12 topics' style='font-size: 10.0263157895pt;'>XML</a> <a href='http://blog.xebia.com/tag/oracle/' class='tag-link-16' title='11 topics' style='font-size: 9.47368421053pt;'>Oracle</a> <a href='http://blog.xebia.com/tag/java/' class='tag-link-2' title='33 topics' style='font-size: 17.7631578947pt;'>Java</a> <a href='http://blog.xebia.com/tag/xebia/' class='tag-link-95' title='10 topics' style='font-size: 8.73684210526pt;'>Xebia</a> <a href='http://blog.xebia.com/tag/agile/' class='tag-link-20' title='57 topics' style='font-size: 22pt;'>Agile</a> <a href='http://blog.xebia.com/tag/moving-to-india/' class='tag-link-42' title='10 topics' style='font-size: 8.73684210526pt;'>Moving to India</a> <a href='http://blog.xebia.com/tag/ajax/' class='tag-link-36' title='13 topics' style='font-size: 10.7631578947pt;'>Ajax</a> <a href='http://blog.xebia.com/tag/architecture/' class='tag-link-38' title='23 topics' style='font-size: 15pt;'>Architecture</a> <a href='http://blog.xebia.com/tag/concurrency-control/' class='tag-link-41' title='9 topics' style='font-size: 8pt;'>Concurrency Control</a> <a href='http://blog.xebia.com/tag/jpa/' class='tag-link-177' title='19 topics' style='font-size: 13.5263157895pt;'>JPA</a> <a href='http://blog.xebia.com/tag/eclipse/' class='tag-link-14' title='15 topics' style='font-size: 11.6842105263pt;'>Eclipse</a> <a href='http://blog.xebia.com/tag/hibernate/' class='tag-link-13' title='39 topics' style='font-size: 19.0526315789pt;'>Hibernate</a> <a href='http://blog.xebia.com/tag/frameworks/' class='tag-link-27' title='13 topics' style='font-size: 10.7631578947pt;'>Frameworks</a> <a href='http://blog.xebia.com/tag/spring/' class='tag-link-10' title='30 topics' style='font-size: 17.0263157895pt;'>Spring</a> <a href='http://blog.xebia.com/tag/lean-architecture/' class='tag-link-355' title='13 topics' style='font-size: 10.7631578947pt;'>lean architecture</a> <a href='http://blog.xebia.com/tag/scala/' class='tag-link-276' title='16 topics' style='font-size: 12.2368421053pt;'>Scala</a> <a href='http://blog.xebia.com/tag/javascript/' class='tag-link-25' title='11 topics' style='font-size: 9.47368421053pt;'>Javascript</a> <a href='http://blog.xebia.com/tag/lean/' class='tag-link-94' title='16 topics' style='font-size: 12.2368421053pt;'>Lean</a> <a href='http://blog.xebia.com/tag/tdd/' class='tag-link-64' title='10 topics' style='font-size: 8.73684210526pt;'>TDD</a> <a href='http://blog.xebia.com/tag/soa/' class='tag-link-23' title='26 topics' style='font-size: 15.9210526316pt;'>SOA</a> <a href='http://blog.xebia.com/tag/groovy/' class='tag-link-37' title='12 topics' style='font-size: 10.0263157895pt;'>Groovy</a> <a href='http://blog.xebia.com/tag/act/' class='tag-link-349' title='29 topics' style='font-size: 16.8421052632pt;'>ACT</a> <a href='http://blog.xebia.com/tag/flex/' class='tag-link-30' title='17 topics' style='font-size: 12.7894736842pt;'>Flex</a> <a href='http://blog.xebia.com/tag/maven/' class='tag-link-19' title='26 topics' style='font-size: 15.9210526316pt;'>Maven</a> <a href='http://blog.xebia.com/tag/jpa-implementation-patterns/' class='tag-link-210' title='13 topics' style='font-size: 10.7631578947pt;'>JPA implementation patterns</a> </ul> </div> </div> </div> </div> </div> </div> <!-- Archives --> <div class="clear-block block block-views"> <h2>Archives</h2> <div class="block-wrapper"> <div class="content"><div class="view"> <div class="view-content"> <div class="item-list"> <ul> <li><div class="views-field-title"><span class="field-content"><a href='http://blog.xebia.com/2012/02/' title='February 2012'>February 2012</a></span></div></li> <li><div class="views-field-title"><span class="field-content"><a href='http://blog.xebia.com/2012/01/' title='January 2012'>January 2012</a></span></div></li> <li><div class="views-field-title"><span class="field-content"><a href='http://blog.xebia.com/2011/12/' title='December 2011'>December 2011</a></span></div></li> <li><div class="views-field-title"><span class="field-content"><a href='http://blog.xebia.com/2011/11/' title='November 2011'>November 2011</a></span></div></li> <li><div class="views-field-title"><span class="field-content"><a href='http://blog.xebia.com/2011/10/' title='October 2011'>October 2011</a></span></div></li> <li><div class="views-field-title"><span class="field-content"><a href='http://blog.xebia.com/2011/09/' title='September 2011'>September 2011</a></span></div></li> <li><div class="views-field-title"><span class="field-content"><a href='http://blog.xebia.com/2011/08/' title='August 2011'>August 2011</a></span></div></li> <li><div class="views-field-title"><span class="field-content"><a href='http://blog.xebia.com/2011/07/' title='July 2011'>July 2011</a></span></div></li> <li><div class="views-field-title"><span class="field-content"><a href='http://blog.xebia.com/2011/06/' title='June 2011'>June 2011</a></span></div></li> <li><div class="views-field-title"><span class="field-content"><a href='http://blog.xebia.com/2011/05/' title='May 2011'>May 2011</a></span></div></li> <li><div class="views-field-title"><span class="field-content"><a href='http://blog.xebia.com/2011/04/' title='April 2011'>April 2011</a></span></div></li> <li><div class="views-field-title"><span class="field-content"><a href='http://blog.xebia.com/2011/03/' title='March 2011'>March 2011</a></span></div></li> </ul> </div> </div> </div> </div> </div> </div> <style type="text/css" media="all">#avatar_footer { display: none; } /* Change this in Users > Avatars. */ </style><div id="avatar_footer">Avatars by <a href="http://www.sterling-adventures.co.uk/blog/">Sterling Adventures</a></div> </div> </div> </div> </div> <script type="text/javascript"> var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); </script> <script type="text/javascript"> try { var pageTracker = _gat._getTracker("UA-9457407-3"); pageTracker._trackPageview(); } catch(err) {}</script> <script type="text/javascript"><!-- wpa2a.targets=[ {title:'Java in Telecommunications – Order Management API',url:'http://blog.xebia.com/2007/05/14/java-in-telecommunications-%e2%80%93-order-management-api/'}]; wpa2a.html_done=true;if(wpa2a.script_ready&&!wpa2a.done)wpa2a.init();wpa2a.script_load(); //--></script> </body> </html> <!-- This Quick Cache file was built for ( blog.xebia.com/2007/05/14/java-in-telecommunications-%e2%80%93-order-management-api/ ) in 0.56708 seconds, on Feb 4th, 2012 at 6:42 am UTC. --> <!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on Feb 4th, 2012 at 7:42 am UTC -->