<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-7643943</id><updated>2009-10-12T17:42:25.595-07:00</updated><title type='text'>Jian Wu's Tech Notes: It's an Event-Driven World</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jianwu.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7643943/posts/default'/><link rel='alternate' type='text/html' href='http://jianwu.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jian Wu</name><uri>http://www.blogger.com/profile/05389853921773066488</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7643943.post-8315609433939848858</id><published>2008-09-20T23:45:00.000-07:00</published><updated>2008-09-28T23:01:30.847-07:00</updated><title type='text'>Migrate Web Service From XFire to Apache CXF</title><content type='html'>Recently, we migrated our Production Web Services from &lt;a href="http://xfire.codehaus.org/"&gt;XFire&lt;/a&gt; 1.2.6 to &lt;a href="http://cxf.apache.org/"&gt;Apache CXF&lt;/a&gt; 2.1.1, and it went very well. So I want to share some good experience using Apache CXF.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Why We Want to Migrate&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;1. XFire Project itself has been discontinued&lt;br /&gt;&lt;br /&gt;Accoring to &lt;a href="http://xfire.codehaus.org/XFire+and+Celtix+Merge"&gt;XFire and Celtix Merge FAQ&lt;/a&gt;, XFire Open Source Project has been discontinued, Apache CXF is a continuation of the XFire project and is considered XFire 2.0, which has many new features and a ton of bug fixes. &lt;br /&gt;&lt;br /&gt;2. Using Spring 2.5 to develop Java Middle-tier Server &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.springframework.org/"&gt;Spring&lt;/a&gt; 2.5 has become a de facto standard for Java Middle-tier Server Development, and it is also adopted internally as standard framework to build Java Middle-tier Servers. But, XFire is built and  bundled with old Spring 1.0, which becomes a road block preventing us from using some new Spring 2.5 features, such as Spring AOP. Migrating to Apache CXF 2.1.1 will immediately solve this problem since Apache CXF is built on top of Spring 2 and can work with SPring 2.5 without any problem.&lt;br /&gt;&lt;br /&gt;3. Using new CXF Features, which are not available in XFire: &lt;ul&gt;&lt;br /&gt;&lt;li&gt;Since Apache CXF is JAX-WS compliant, it is safe to use CXF JAX-WS Front-end, developing Web Services using JAX-WS Annotations&lt;/li&gt;&lt;br /&gt;&lt;li&gt;We want to inject certain HTTP Headers at both Client and Server side for network routing and load balancing, and this should be separated from the business logic of Web Services. CXF Interceptor Framework is a perfect tool to implement this kind of features&lt;/li&gt; &lt;br /&gt;&lt;li&gt;CXF supports both dynamic Javascript WS Client and statically generated Javascript client, this actually enables us to build a simple soapUI-like tool inside web browser and is working perfectly with our light-weight &lt;a href="http://jQuery.com/"&gt;jQuery&lt;/a&gt; based Admin Tool/Console for monitoring and debugging&lt;/li&gt; &lt;br /&gt;&lt;/ul&gt;&lt;span style="font-weight:bold;"&gt;Issues We Encountered&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;Obviously, there were some CXF issues we have to resolve:&lt;br /&gt;&lt;br /&gt;1. Light-weight SOAP Message Validattion&lt;br /&gt;&lt;br /&gt;For the backward compatability with existing XFire Client/Server, we are using CXF JAX-WS Front-end with Aegis Data Binding, we want to have a simple light-weight SOAP Message Validation as alternative to full-fledged Schema Validation. This actually is achived by adding a "XML Validation Interceptor" to the right place in the CXF Interceptor Chain. You can find more detail &lt;a href="http://www.nabble.com/Validate-SOAP-Message-with-Aegis-Binding--td18957149.html"&gt;here&lt;/a&gt; from the CXF User Mailing List &lt;br /&gt;&lt;br /&gt;2. WS Client Connection Pool&lt;br /&gt;&lt;br /&gt;XFire WS Client is built on top Commons HTTP Client 3.0, which allows us to set up a connection pool to control the concurrent requests and the load at the client side. But, since CXF is not using Commons HTTP Client as Client Transport Layer, this is not available from CXF anymore. &lt;br /&gt;&lt;br /&gt;This problem was partially resolved by building a simple CommonsHttpClientTransportFactory with a simple CommonsHttpClientConduit. It would be nice that CXF can provide a full-fledged CommonsHttpClientConduit. More detail can be found &lt;a href="http://www.nabble.com/Any-Example-to-use-Apache-Commons-HTTP-Client-in-CXF-Client--or-Status-of-CXF-291-td18459569.html"&gt;here&lt;/a&gt; and &lt;a href="http://www.nabble.com/Need-Help%3A-How-to-configure-CXF-Client-use-a-CommonsHttpClientTransportFactory-td18664583.html"&gt;here&lt;/a&gt; from the CXF User Mailing List &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Apache CXF Actually Performs Better&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;To evaluate the performance of CXF, We did one round of load testing by puting two WS Servers behind one Load Balancer, one using XFire and another using Apache CXF, the results show that the performance of CXF is compatable with XFire.&lt;br /&gt;&lt;br /&gt;We also run the similar deployment in the real production environment to compare the performance, and our new servers using CXF are wroking very well. We actually see the CPU Utilization on the Servers using CXF is less than the existing servers using XFire. This is a little good surprise for us since we originally expect CXF should consume more resources given the fact that CXF has to build two intercept chains, "in" and "out", for each request.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7643943-8315609433939848858?l=jianwu.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jianwu.blogspot.com/feeds/8315609433939848858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7643943&amp;postID=8315609433939848858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7643943/posts/default/8315609433939848858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7643943/posts/default/8315609433939848858'/><link rel='alternate' type='text/html' href='http://jianwu.blogspot.com/2008/09/migrate-web-service-from-xfire-to.html' title='Migrate Web Service From XFire to Apache CXF'/><author><name>Jian Wu</name><uri>http://www.blogger.com/profile/05389853921773066488</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15886127638949554222'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7643943.post-3542804330787707687</id><published>2007-09-05T01:16:00.000-07:00</published><updated>2007-09-21T23:43:07.376-07:00</updated><title type='text'>It's All About the Traceability</title><content type='html'>I just come across a very interesting blog &lt;a href="http://highscalability.com/log-everything-all-time"&gt;Log Everything All the Time&lt;/a&gt; talking about logging information in a production environment.&lt;br /&gt;&lt;br /&gt;As a software developer, I just want to further elaborate on this:&lt;br /&gt;&lt;br /&gt;1. It is all about the Traceability! &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Since in the real production environment, there is always some failure somewhere: router/switch could die or rebooted, connections will timeout if the firewall is jammed, SSL Certificates will expire, and there'll be DB upgrade, OS Patching, ... ..., the failure could happen just at the time a new merchant customer just send out his second credit authorization request, or approval of a financial transaction with $10,000 just arrived, ... ... finally, you'll grab all the forensic information you could find to diagnose. &lt;br /&gt;&lt;br /&gt;2. All these logging are neither for Operation Team nor for Support Engineers, they are actually for the developers themselves.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Borrowing a word our &lt;a href="http://www.linkedin.com/pub/0/296/b8a"&gt;Infrastructure Architect&lt;/a&gt; often said: "if there is anything you wish to see when you get called at 2AM, you should log it for yourself"&lt;br /&gt;&lt;br /&gt;3. Strong Infrastructure Support &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Obviously, to make "&lt;a href="http://highscalability.com/log-everything-all-time"&gt;Log Everything All the Time&lt;/a&gt;" work, you need a very powerful Logging Server/Bus to consume all these generated log info, you also need some powerful Log Miner or Search Tool to help you query, filter and correlate. Fortunately, in my current working enrionment, we have these kind of infrastructure available so we have no excuse but write logging code.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Given a production environment with firewall, load balancer, front service gateway, Application Server, and backend DB, if it is not feasible to really log everything, you should at least log any request/response coming in and out any system/component, any critical state change in any system/component, and any state change in any system/component if it is possible. Again, it is all about the traceability.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7643943-3542804330787707687?l=jianwu.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jianwu.blogspot.com/feeds/3542804330787707687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7643943&amp;postID=3542804330787707687' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7643943/posts/default/3542804330787707687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7643943/posts/default/3542804330787707687'/><link rel='alternate' type='text/html' href='http://jianwu.blogspot.com/2007/09/its-all-about-traceability.html' title='It&apos;s All About the Traceability'/><author><name>Jian Wu</name><uri>http://www.blogger.com/profile/05389853921773066488</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15886127638949554222'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7643943.post-3419676908680313497</id><published>2007-08-16T00:13:00.000-07:00</published><updated>2007-08-25T16:40:10.196-07:00</updated><title type='text'>Can you design a good benchmark to compare Apache Mina and Python Twisted?</title><content type='html'>There is an interesting blog entry &lt;a href="http://blog.bluendo.com/ff/mina-and-twisted-matrix-benchmarks"&gt;Mina and Twisted Matrix benchmark&lt;/a&gt; with &lt;a href="http://blog.bluendo.com/ff/update-on-mina-and-twisted-benchmarks"&gt;update&lt;/a&gt;, it claimed that Twisted out-perform Apache Mina with the blogger's benchmark.&lt;br /&gt;&lt;br /&gt;It actually raised a very interesting question: can we design a good and fair benchmark to evaluate Apache Mina and Python Twisted? &lt;br /&gt;&lt;br /&gt;The following are some of my rough thoughts on a might-be good benchmark to evaluate Apache Mina and Twisted for TCP based Networking Application:&lt;br /&gt;&lt;br /&gt;1. The benchmark should run on a platform which both Mina and Twisted can utilize its advanced Non-blocking Networking feature, such as Linux with epoll, otherwise we are not really benchmark two frameworks on a fair playground&lt;br /&gt;&lt;br /&gt;2. Since both Apache Mina and Twisted have protocol processing component built in,   we can define a simple Text Protocol with a simple format like "[Header][PayLoadLength][PayLoad]" and a binary protocol sending image for protocol  processing. Based on these, we can create a group of sample protocol messages with different size/length for benchmark&lt;br /&gt;&lt;br /&gt;3. We can create a test driver which will open a TCP Connection to the server, send a sample protocol messages to the server, the server will decode the message, construct a response with a different format like "[Header][PayLoad][PayLoadLength]", and echo back the payload received and close TCP Connection, the driver can process the response and make sure that the payload is correctly returned by the server.&lt;br /&gt;&lt;br /&gt;We can increase concurrent connections to compare total connections established, the processing time and total payload size measured at driver side&lt;br /&gt;&lt;br /&gt;4. We can create a test driver which will open a persistent TCP Connection to the server, and keep sending protocol messages to the server and server keep echoing back the payload received in a similar fashion as 3.&lt;br /&gt;&lt;br /&gt;We can increase concurrent connections to compare total connections established, the processing time and total payload size measured at driver side&lt;br /&gt;&lt;br /&gt;5. Since both Apache Mina and Twisted support building Networking Client and Server, the test actually can be done in the following combination:&lt;br /&gt;-- Apache Mina Client against Twisted Server&lt;br /&gt;-- Twisted Client against Apache Mina Server&lt;br /&gt;-- Apache Mina Client against Apache Mina Server&lt;br /&gt;-- Twisted Client against Twisted Server&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7643943-3419676908680313497?l=jianwu.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jianwu.blogspot.com/feeds/3419676908680313497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7643943&amp;postID=3419676908680313497' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7643943/posts/default/3419676908680313497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7643943/posts/default/3419676908680313497'/><link rel='alternate' type='text/html' href='http://jianwu.blogspot.com/2007/08/can-you-design-good-benchmark-to.html' title='Can you design a good benchmark to compare Apache Mina and Python Twisted?'/><author><name>Jian Wu</name><uri>http://www.blogger.com/profile/05389853921773066488</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15886127638949554222'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7643943.post-8231962298478372213</id><published>2007-04-20T23:45:00.000-07:00</published><updated>2007-04-21T22:59:34.645-07:00</updated><title type='text'>Python Twisted and Apache Mina, Two Great Asynchronous Network Application Frameworks</title><content type='html'>For last 10 months I have been working on a high scalable asynchronous network messaging gateway project using &lt;a href="http://mina.apache.org/"&gt;Apache MINA(Multipurpose Infrastructure for Network Applications)&lt;/a&gt;, which is a Java Network Application Framework based on &lt;a href="http://java.sun.com/j2se/1.4.2/docs/guide/nio/"&gt;Java NIO&lt;/a&gt;.&lt;br&gt;&lt;br&gt;One challenge to develop a high scalable asynchronous network messaging gateway is how you test it for functionality, load and performance. I eventually developed several Test Simulators and Drivers using &lt;a href="http://twistedmatrix.com/trac/"&gt;Python Twisted&lt;/a&gt;, "an event-driven networking engine written in Python".&lt;br&gt;&lt;br&gt;&lt;a href="http://twistedmatrix.com/trac/"&gt;Twisted&lt;/a&gt; obviously is THE python framework if you want to develop a scalable asynchronous network application using &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt;. Personally, I think that Apache Mina has a very good chance to become the De facto java framework for developing NIO based network applications.&lt;br&gt;&lt;br&gt;If you compare Twisted with Mina, they both adopt the "reactor pattern", they both have the goal to encapsulate/hide the complexity of Non-blocking network IO and provide a simple and elegant framework for developer to use. Actually, they are very similar at &lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;concept level&lt;/span&gt;&lt;/span&gt; as the following table shows:&lt;br&gt;&lt;center&gt;&lt;table border="2" frame="border"&gt;&lt;tbody&gt;&lt;tr align="center"&gt;&lt;td&gt;&lt;span style="font-weight: bold;"&gt;Python Twisted&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-weight: bold;"&gt;Apache MINA&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td&gt;Protocol&lt;/td&gt;&lt;td&gt;ProtocolEncoder/ProtocolDecoder&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td&gt;LineRecevier&lt;/td&gt;&lt;td&gt;TextLineEncoder/TextLineDecoder&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr align="center"&gt;&lt;td&gt;protocol.ClientFactory&lt;/td&gt;&lt;td&gt;IoConnector&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td&gt;protocol.ServerFactory&lt;/td&gt;&lt;td&gt;IoAcceptor&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td&gt;Deferred&lt;/td&gt;&lt;td&gt;IoFuture&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td&gt;callback chain/errback chain&lt;/td&gt;&lt;td&gt;IoFilterChain&lt;/td&gt;&lt;/tr&gt;&lt;tr align="center"&gt;&lt;td&gt;reactor ThreadPool&lt;/td&gt;&lt;td&gt;ExecutorFilter&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7643943-8231962298478372213?l=jianwu.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jianwu.blogspot.com/feeds/8231962298478372213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7643943&amp;postID=8231962298478372213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7643943/posts/default/8231962298478372213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7643943/posts/default/8231962298478372213'/><link rel='alternate' type='text/html' href='http://jianwu.blogspot.com/2007/04/python-twisted-and-apache-mina-two.html' title='Python Twisted and Apache Mina, Two Great Asynchronous Network Application Frameworks'/><author><name>Jian Wu</name><uri>http://www.blogger.com/profile/05389853921773066488</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15886127638949554222'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7643943.post-115450242046721232</id><published>2006-08-02T00:06:00.000-07:00</published><updated>2008-12-09T05:37:56.307-08:00</updated><title type='text'>Building Billing Processes with BPEL for Telecom Web Services</title><content type='html'>&lt;br&gt;&amp;nbsp;&amp;nbsp;This is the last prototype project I did before I left Oracle. The goal is to explore a general approach for building flexible business processes to control Telecom Service Delivery by integrating &lt;a href="http://www.oracle.com/technology/products/ias/bpel/index.html"&gt;Oracle BPEL PM&lt;/a&gt; with &lt;a href="http://www.oracle.com/technology/products/webservices_manager/index.html"&gt;Oracle Web Services Manager (OWSM)&lt;/a&gt;. So, &lt;a href="http://www.oracle.com/technology/products/ias/bpel/index.html"&gt;Oracle BPEL Process Manager&lt;/a&gt; and &lt;a href="http://www.oracle.com/technology/products/webservices_manager/index.html"&gt;Oracle Web Services Manager (OWSM)&lt;/a&gt; can be used as foundation platform to build Telecom Service Gateway.&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;The sample Telecom Service we used is a Parlay X Send SMS Web Service built on top of &lt;a href="http://www.oracle.com/technology/products/iaswe/messaging/index.html"&gt;Oracle Application Server Wireless Messaging&lt;/a&gt;. The whole Service Delivery Platform environment I set up is shown in the following diagram:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_DQQLbacaz4k/Riq_EZnGBRI/AAAAAAAAAAU/gRYABe1SRk8/s1600-h/owsm_bpel_integrated_env3.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_DQQLbacaz4k/Riq_EZnGBRI/AAAAAAAAAAU/gRYABe1SRk8/s400/owsm_bpel_integrated_env3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5056063613992043794" /&gt;&lt;/a&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;For this project, one key thinking is that, in the governed SOA world, exposed Web Services or Business Services should be protected by certain Control Policies and we can orchestrate at least some type of Control Policy, such as Orchestrate Pre-Paid Billing Policy, Using BPEL.&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;In general, we can see at least two types of control policies in the real world: &lt;span style="font-style:italic;"&gt;&lt;span style="font-weight:bold;"&gt;declarative policy&lt;/span&gt;&lt;/span&gt; and &lt;span style="font-style:italic;"&gt;&lt;span style="font-weight:bold;"&gt;process-driven policy&lt;/span&gt;&lt;/span&gt;. “Only the users with manager role can access Approving-PO Web Service” is a typical example of declarative policy. Process-driven policy usually involves a list of process steps to enforce the policy before and after service invocation. “Billing Policy” used in Telecom Industry, especially “Pre-Paid Billing Policy” is a typical example of process-driven policy.&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;To use a service enforced by Pre-Paid Billing Policy, the service consumer will usually pay certain a mount of money as credit before he can start to use the service. Later, every time he/she uses the service his/her credit will be deducted based on the usage. Once the credit is used up, he/she will not allowed to use the service anymore unless he/she put new money in. Actually, it can be described as a list of processing steps as the following:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A Service Request come in and the User has been authenticated&lt;/li&gt;&lt;li&gt;User will be authorized if his account has enough credit for the service involved&lt;/li&gt;&lt;li&gt;An adequate fund has been reserved from user account&lt;/li&gt;&lt;li&gt;If the Service Request has been fulfilled successfully, the reserved fund will be transferred to service provider. If the service request failed due to network or server or other issues, the reserved fund should be returned to user's account as credit available&lt;/li&gt;&lt;/ol&gt;&amp;nbsp;&amp;nbsp;Since Process-Driven Policy often invoke a list of pre-processing and/or post-processing steps, some of them might also be long-standing steps, BPEL actually is an ideal language/tool to describe and enforce it. The Pre-Paid Billing Policy described above can be easily implemented by orchestrated BPEL Processes.&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;Assuming there is a BPEL Engine like &lt;a href="http://www.oracle.com/technology/products/ias/bpel/index.html"&gt;Oracle BPEL PM&lt;/a&gt; running all the Pre-Paid Billing Policy Processes which integrated with existing external Billing System through exposed Web Service Interfaces, and there is a Service Execution and Enforcing Environment, such as &lt;a href="http://www.oracle.com/technology/products/webservices_manager/index.html"&gt;Oracle Web Service Manager&lt;/a&gt; which will notify Billing Policy Process at different execution phases. The Pre-Paid Billing Policy can easily be orchestrated by multiple BPEL Processes as the following diagram shown:&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/5585/480/1600/pre-paid-bpel-procs.1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5585/480/400/pre-paid-bpel-procs.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;When the service request is received in the Service Execution Environment, the associated Policy Enforcement Point (PEP) will invoke the "Rating And Fund Reservation Billing Process" with collected Service Detail Record (SDR), which will check the user's credit at real time, reserve the fund if there is enough fund available and start "QoS And Charging Billing Process".&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;"QoS And Charging Billing Process" will in turn start "Service Notification Process" waiting for the Asynchronous Service Notification.&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;Then the Policy Enforcement Point (PEP) will notify "Service Notification Process" whether the Service Request is fulfilled, which will in turn notify the "QoS And Charging Billing Process", which will cancel the reserved fund if the request is failed to fulfill, otherwise, it will start "Post-Pay Confirmation Process" waiting for the final status notification &lt;!-- from the Policy Enforcement Point (PEP) --&gt; once the final fulfillment is confirmed, which will finally let the "QoS And Charging Billing Process" deduct/transfer the reserved fund.&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;In addition, "Service Notification Process" is also responsible to notify the "QoS And Charging Billing Process" in case that the Service Invocation is crushed without a chance to send out the notification.&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;The Pre-Paid Billing Policy logic are mainly implemented in two orchestrated BPEL Processes:&lt;OL&gt;&lt;LI&gt;&lt;U&gt;Rating and Fund Reservation Billing Process&lt;/U&gt;, its business process logic is straightforward as the following diagram shown, when the process receives the service invocation request containing the Service Detail Record (SDR), it will invoke the external "Authorize Pay Web Service" to check whether the user has enough fund for the service request, if it is true, it then will reserve the fund through external "Reserve Fund Web Service" and start "QoS and Charging Process" and return the status of “Success”, otherwise the status of "Failed" will be returned&lt;br&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/5585/480/1600/bpel-for-rating.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5585/480/400/bpel-for-rating.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/LI&gt;&lt;br /&gt;&lt;LI&gt;&lt;U&gt;QoS And Charging Billing Process&lt;/U&gt;, as the following diagram shown, when it get started, it will immediately start "Service Notification Process" waiting for the Service Notification, if the "service fulfilled" status is received, the "Post-Pay Confirmation Process" will be started waiting for the final delivery status to invoke the external "Transfer Fund Web Service" and finish the whole Pre-Paid Billing Policy Processing. In case of failure, "QoS And Charging Billing Process" will invoke the external "Cancel Reserved Fund Web Service" to return the fund back to the customer's account.&lt;br&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/5585/480/1600/bpel-for-charging.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5585/480/400/bpel-for-charging.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;As demostrated, using BPEL to build process-driven policies make these policies not only naturally executable but also easily integrated with both internal and external enterprise software systems&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7643943-115450242046721232?l=jianwu.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jianwu.blogspot.com/feeds/115450242046721232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7643943&amp;postID=115450242046721232' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7643943/posts/default/115450242046721232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7643943/posts/default/115450242046721232'/><link rel='alternate' type='text/html' href='http://jianwu.blogspot.com/2006/08/sun-certified-developer-for-java-web.html' title='Building Billing Processes with BPEL for Telecom Web Services'/><author><name>Jian Wu</name><uri>http://www.blogger.com/profile/05389853921773066488</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15886127638949554222'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_DQQLbacaz4k/Riq_EZnGBRI/AAAAAAAAAAU/gRYABe1SRk8/s72-c/owsm_bpel_integrated_env3.JPG' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7643943.post-114500078962659093</id><published>2006-04-14T00:38:00.000-07:00</published><updated>2007-04-21T18:13:06.935-07:00</updated><title type='text'>Using Maven2 to Build J2EE Application in a Corporate Environment</title><content type='html'>Maven2 is a great building tool, but using Maven2 is not easy since the lack of document make it not user friendly, Timothy M. O'Brien, who co-wrote the book &lt;a href="http://www.oreilly.com/catalog/mavenadn/"&gt;Maven: A Developer's Book&lt;/a&gt;, just wrote a blog entry &lt;a href="http://www.oreillynet.com/onjava/blog/2006/03/maven_project_info_reports_con.html"&gt;Maven Project Info Reports Considered Dangerous&lt;/a&gt; talking about some difficulties a developer will encounter when trying to use Maven2.&lt;br /&gt;&lt;br /&gt; Right now, as developer, I'm trying to set up a new build process using Maven2 for our development group in the coming projects. I'll try to document and share some tips, work-arounds and maybe the issues related to Maven2.&lt;br /&gt;&lt;br /&gt; In general, to make Maven2 successfull in a Corporate Environment, we need some guidelines or best practices in the following areas:&lt;ol&gt;&lt;li&gt;Building and Managing a Internal Remote Repository shared among developers&lt;br /&gt;(&lt;b&gt;Note&lt;/b&gt;: The two very useful documents I saw on the Internet are &lt;a href="http://www.coffeebreaks.org/blogs/?p=37"&gt;Corporate https maven2 repositories&lt;/a&gt; and &lt;a href="http://docs.codehaus.org/display/MAVENUSER/Using+Maven+in+a+corporate+environment"&gt;Using Maven in a corporate environment&lt;/a&gt;)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Optionally set up a &lt;a href="http://maven-proxy.codehaus.org/"&gt;Maven-Proxy&lt;/a&gt; inside Firewall to ease the access to central Maven2 Repository at &lt;a href="http://www.ibiblio.org/maven/"&gt;Ibiblio&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Developing RAR, WAR, EJB Archetype or Project Templates for common J2EE Component Projects&lt;br /&gt;(&lt;b&gt;Note&lt;/b&gt;: So far, the &lt;a href="http://www.ibiblio.org/maven2/org/apache/maven/archetypes/"&gt;Maven2 ArcheTypes posted on Maven2 Repository&lt;/a&gt; and &lt;a href="http://svn.apache.org/repos/test/myfaces/maven-myfaces-plugins/myfaces-archetype/"&gt;MyFaces ArcheType&lt;/a&gt; are all single project based ArcheTypes, which means that each archetype only generates one pom.xml)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Write or customize Maven2 Plug-ins for your own building process&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A Typical J2EE Application Project Layout or Directory Structure&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Continuous Integration with Nightly Build and Reports&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Caveats and Workarounds:&lt;br /&gt;7.1 How to exclude Maven Property files such as pom.xml and pom.properties in the generated JAR, RAR, and EAR File&lt;br /&gt;&lt;br /&gt;7.2 How to set the RAR File name through the pom.xml&lt;br /&gt;&lt;br /&gt;7.3 Maven2 ArcheType Plug-in did not recognize internal remote repository&lt;/li&gt;&lt;/ol&gt;  In the last three weeks, I already spent a lot of night time browsing through Maven Web site, articles, blog entries, Maven Mailing List to gain some knowledge in the above areas. I'll update this blog entry with more Maven2 related detail when I make progress with my project in these areas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7643943-114500078962659093?l=jianwu.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jianwu.blogspot.com/feeds/114500078962659093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7643943&amp;postID=114500078962659093' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7643943/posts/default/114500078962659093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7643943/posts/default/114500078962659093'/><link rel='alternate' type='text/html' href='http://jianwu.blogspot.com/2006/04/orchestrate-pre-paid-billing-policy.html' title='Using Maven2 to Build J2EE Application in a Corporate Environment'/><author><name>Jian Wu</name><uri>http://www.blogger.com/profile/05389853921773066488</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15886127638949554222'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7643943.post-114201618796267836</id><published>2006-03-10T10:13:00.000-08:00</published><updated>2007-03-11T00:17:05.449-08:00</updated><title type='text'>Sun Certified Developer for Java Web Services (SCDJWS)</title><content type='html'>I just passed Sun Certified Developer for Java Web Services Exam. I thought that combining &lt;a href="http://www.sun.com/training/certification/java/java_webj2ee.html"&gt;Sun Certified Developer for Java Web Services (SCDJWS)&lt;/a&gt; with &lt;a href="http://www.activebpel.org/certification/cbe.html"&gt;Certified BPEL Engineer (CBE)&lt;/a&gt; demonstrates my strong technical knowledge as a Senior/Principal Software Engineer working in SOA related Project/Product Development&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7643943-114201618796267836?l=jianwu.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jianwu.blogspot.com/feeds/114201618796267836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7643943&amp;postID=114201618796267836' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7643943/posts/default/114201618796267836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7643943/posts/default/114201618796267836'/><link rel='alternate' type='text/html' href='http://jianwu.blogspot.com/2006/03/using-maven2-to-build-j2ee-application.html' title='Sun Certified Developer for Java Web Services (SCDJWS)'/><author><name>Jian Wu</name><uri>http://www.blogger.com/profile/05389853921773066488</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15886127638949554222'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7643943.post-113642462533756188</id><published>2006-01-04T17:03:00.000-08:00</published><updated>2006-01-05T17:47:00.180-08:00</updated><title type='text'>Certified BPEL Engineer</title><content type='html'>I was very pleased to pass the actvieBPEL's &lt;a href="http://www.activebpel.org/certification/cbe.html"&gt;Certified BPEL Engineer Exam&lt;/a&gt; with a 95% (57/60) score.&lt;br /&gt;&lt;br /&gt;The following are my learning and working experience related to BPEL which help me pass through the &lt;a href="http://www.activebpel.org/certification/cbe.html"&gt;Certified BPEL Engineer Exam&lt;/a&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Working Experience:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;R&amp;D Project for Smart Client using Oracle BPEL PM 10.1.2 with WSIF for routing the request from mobile device to the related business applications&lt;/li&gt;&lt;li&gt;R&amp;amp;D Project using Oracle BPEL PM 10.1.2 with Oracle Web Service Manager 4.0.3 to demostrate a comprehensive Pre-Paid Billing Policy orchestrated with 9 BPEL Processes for controlling Service Invocation  &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;Learning Experience:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Oracle University Training Course "Oracle BPEL Process Manager: Services Orchestration"&lt;/li&gt;&lt;li&gt;&lt;a href="http://www-128.ibm.com/developerworks/library/specification/ws-bpel/"&gt; Business Process Execution Language for Web Services Version 1.1&lt;/a&gt; Specification&lt;/li&gt;&lt;li&gt;Matjaz B Juric's Book &lt;a href="http://www.amazon.com/gp/product/1904811183/qid=1136426015/sr=1-1/ref=sr_1_1/104-8665590-5307943?s=books&amp;v=glance&amp;n=283155"&gt;"Business Process Execution Language for Web Services"&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.oracle.com/technology/pub/articles/bpel_cookbook/index.html"&gt;SOA Best Practices: The BPEL Cookbook&lt;/a&gt; from Oracle Technology Network&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; Also, &lt;a href="http://www.orablogs.com/reynolds/"&gt;Antony Reynold's Blog&lt;/a&gt; is a very good resource for BPEL, especially Oracle BPEL PM&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7643943-113642462533756188?l=jianwu.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jianwu.blogspot.com/feeds/113642462533756188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7643943&amp;postID=113642462533756188' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7643943/posts/default/113642462533756188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7643943/posts/default/113642462533756188'/><link rel='alternate' type='text/html' href='http://jianwu.blogspot.com/2006/01/certified-bpel-engineer.html' title='Certified BPEL Engineer'/><author><name>Jian Wu</name><uri>http://www.blogger.com/profile/05389853921773066488</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15886127638949554222'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7643943.post-113126886079730727</id><published>2005-11-06T01:09:00.000-08:00</published><updated>2006-08-02T23:11:42.283-07:00</updated><title type='text'>Network Connection Limitation when using BlackBerry Device with "Direct TCP/IP Mode"</title><content type='html'>I recently had developed some prototype using J2ME/MIDP 2.0 on BlackBerry 7290 Device with Cingular GPRS Network. &lt;br /&gt;&lt;br /&gt;I encountered a problem when making direct network connection from BlackBerry Device through Cingular APN without using BlackBerry Enterprise Service ( Note: &lt;a href="http://www.blackberry.com/knowledgecenterpublic/livelink.exe/fetch/2000/348583/796557/800451/800563/What_are_-_The_different_ways_to_make_an_HTTP_or_%20socket_connection.html?nodeid=826935&amp;vernum=2"&gt;"&lt;i&gt;What are - The different ways to make an HTTP or socket connection&lt;/i&gt;" is a good article describing three different ways to make socket connections from BlackBerry devices&lt;/a&gt; ). The exceptions was only occurred on the real device with trace on device log like:&lt;br /&gt;&lt;br /&gt;======================================&lt;br /&gt;app:Java Exception data:&lt;br /&gt;ArrayIndexOutOfBoundsException&lt;br /&gt;No detail message&lt;br /&gt;net_rim_cldc_io_tcp&lt;br /&gt;StreamDatagramTransportBase&lt;br /&gt;close&lt;br /&gt;0x3474&lt;br /&gt;net_rim_cldc_io_tcp&lt;br /&gt;StreamDatagramConnectionBase&lt;br /&gt;close&lt;br /&gt;0x29B7&lt;br /&gt;net_rim_cldc_io_tcp&lt;br /&gt;Protocol&lt;br /&gt;shutDownConnection&lt;br /&gt;0x5A5&lt;br /&gt;net_rim_cldc_io_tcp&lt;br /&gt;TcpIOThread&lt;br /&gt;run&lt;br /&gt;0x51B9&lt;br /&gt;===================================&lt;br /&gt;&lt;br /&gt;After talking to a nice BlackBerry Support Engineer I learned that "&lt;strong&gt;The BlackBerry supports&lt;/strong&gt; &lt;strong&gt;a maximum of 5 direct TCP connections to occur at a time&lt;/strong&gt;" and this limitation is existed in both 4.0, latest 4.0.2 and the coming 4.1 Handheld Software&lt;br /&gt;&lt;br /&gt;So, this has a very sad implication: &lt;b&gt;you have to use BlackBerry Enterprise Service(BES) to communicate with BlackBerry Device if you want to develope a real Enterprise Mobile Software targeting BlackBerry Device&lt;/b&gt;. BlackBerry is realy not an Open Platform for developing Enterprise Mobile Software. You can not develop a Mobile Enterprise Solution for BlackBerry Device ONLY, you have to be a RIM Partner or VAR to build a BES centric solution and I hope this was not RIM intended to be.&lt;br /&gt;&lt;br /&gt;( Note: &lt;span style="color: rgb(0, 0, 153); font-style: italic;"&gt;My personal guess is that, for BlackBerry Devices, "Direct TCP/IP Mode" actually is a shortcut of BES Solution, the internal TcpIOThread actually is just an on-device light weight BES Daemon thread for network communication&lt;/span&gt; )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7643943-113126886079730727?l=jianwu.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jianwu.blogspot.com/feeds/113126886079730727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7643943&amp;postID=113126886079730727' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7643943/posts/default/113126886079730727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7643943/posts/default/113126886079730727'/><link rel='alternate' type='text/html' href='http://jianwu.blogspot.com/2005/11/network-connection-limitation-when.html' title='Network Connection Limitation when using BlackBerry Device with &quot;Direct TCP/IP Mode&quot;'/><author><name>Jian Wu</name><uri>http://www.blogger.com/profile/05389853921773066488</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15886127638949554222'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7643943.post-108991791559278997</id><published>2004-07-15T11:55:00.000-07:00</published><updated>2007-04-21T23:10:43.459-07:00</updated><title type='text'>I'll use this blog as my personal tech notes</title><content type='html'>I'm a software engineer working here in Silicon Valley,&lt;br /&gt;you can find my detailed working experience from &lt;a href="http://hellojianwu.googlepages.com/"&gt;my on-line resume&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7643943-108991791559278997?l=jianwu.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jianwu.blogspot.com/feeds/108991791559278997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7643943&amp;postID=108991791559278997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7643943/posts/default/108991791559278997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7643943/posts/default/108991791559278997'/><link rel='alternate' type='text/html' href='http://jianwu.blogspot.com/2004/07/ill-use-this-blog-as-my-personal-tech.html' title='I&apos;ll use this blog as my personal tech notes'/><author><name>Jian Wu</name><uri>http://www.blogger.com/profile/05389853921773066488</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15886127638949554222'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>