tag:blogger.com,1999:blog-54163463550711423262024-03-13T03:18:02.087-07:00shivnarayanShivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.comBlogger36125tag:blogger.com,1999:blog-5416346355071142326.post-82948313170625350882014-08-07T02:40:00.002-07:002014-08-07T02:40:50.689-07:00How Mocking works<div dir="ltr" style="text-align: left;" trbidi="on">
<h1 style="background-color: white; color: #555555; font-family: Optima, Lucida, 'MgOpen Cosmetica', 'Lucida Sans Unicode', sans-serif; font-size: 26px; font-weight: normal; line-height: 26px; margin: 10px 0px; padding-bottom: 5px;">
Enter Mock Objects</h1>
<div style="background-color: white; color: #555555; font-family: Optima, Lucida, 'MgOpen Cosmetica', 'Lucida Sans Unicode', sans-serif; font-size: 13px; line-height: 17.5499992370605px; margin-bottom: 15px; margin-top: 10px;">
The concept behind mock objects is that we want to create an object that will take the place of the real object. This mock object will expect a certain method to be called with certain parameters and when that happens, it will return an expected result. Using the above code as an example, let's say that when I pass in 1234 for my key to the <code>service.lookupByKey</code> call, I should get back a <code>List</code> with 4 values in it. Our mock object should expect <code>lookupByKey</code> to be called with the parameter "1234" and when that occurs, it will return a <code>List</code> with four objects in it.</div>
<h1 style="background-color: white; color: #555555; font-family: Optima, Lucida, 'MgOpen Cosmetica', 'Lucida Sans Unicode', sans-serif; font-size: 26px; font-weight: normal; line-height: 26px; margin: 10px 0px; padding-bottom: 5px;">
How Mock Objects Work</h1>
<div style="background-color: white; color: #555555; font-family: Optima, Lucida, 'MgOpen Cosmetica', 'Lucida Sans Unicode', sans-serif; font-size: 13px; line-height: 17.5499992370605px; margin-bottom: 15px; margin-top: 10px;">
There are many different mocking frameworks in the Java space. I am not going to discuss any of them in great detail here. However, I will discuss how they work and design considerations you need to take in mind because of their implementations.</div>
<div style="background-color: white; color: #555555; font-family: Optima, Lucida, 'MgOpen Cosmetica', 'Lucida Sans Unicode', sans-serif; font-size: 13px; line-height: 17.5499992370605px; margin-bottom: 15px; margin-top: 10px;">
There are essentially two main types of mock object frameworks, ones that are implemented via proxy and ones that are implemented via class remapping. Let's take a look at the first (and by far more popular) option, proxy.</div>
<div style="background-color: white; color: #555555; font-family: Optima, Lucida, 'MgOpen Cosmetica', 'Lucida Sans Unicode', sans-serif; font-size: 13px; line-height: 17.5499992370605px; margin-bottom: 15px; margin-top: 10px;">
A proxy object is an object that is used to take the place of a real object. In the case of mock objects, a proxy object is used to imitate the real object your code is dependent on. You create a proxy object with the mocking framework, and then set it on the object using either a setter or constructor. This points out an inherent issue with mocking using proxy objects. You have to be able to set the dependency up thru an external means. In other words, you can't create the dependency by calling <code>new MyObject()</code> since there is no way to mock that with a proxy object. This is one of the reasons Dependency Injection frameworks like Spring have taken off. They allow you to inject your proxy objects without modifying any code.</div>
<div style="background-color: white; color: #555555; font-family: Optima, Lucida, 'MgOpen Cosmetica', 'Lucida Sans Unicode', sans-serif; font-size: 13px; line-height: 17.5499992370605px; margin-bottom: 15px; margin-top: 10px;">
The second form of mocking is to remap the class file in the class loader. The mocking framework jmockit is the only framework I am aware of that currently exploits this ability for mock objects. The concept is relatively new (since JDK 1.5 although jmockit supports jdk1.4 thru other means as well) and is provided by the new <code>java.lang.Insturment</code> class. What happens is that you tell the class loader to remap the reference to the class file it will load. So let's say that I have a class MyDependency with the corresponding .class file called MyDependency.class and I want to mock it to use MyMock instead. By using this type of mock objects, you will actually remap in the classloader the reference from MyDependency to MyMock.class. This allows you to be able to mock objects that are created by using thew new operator. Although this approach provides more power than the proxy object approach, it is also harder/more confusing to get going given the knowledge of classloaders you need to really be able to use all its features.</div>
<h1 style="background-color: white; color: #555555; font-family: Optima, Lucida, 'MgOpen Cosmetica', 'Lucida Sans Unicode', sans-serif; font-size: 26px; font-weight: normal; line-height: 26px; margin: 10px 0px; padding-bottom: 5px;">
Conclusion</h1>
<div style="background-color: white; color: #555555; font-family: Optima, Lucida, 'MgOpen Cosmetica', 'Lucida Sans Unicode', sans-serif; font-size: 13px; line-height: 17.5499992370605px; margin-bottom: 15px; margin-top: 10px;">
Mock objects are a very valuable tool in testing. They provide you with the ability to test what you write without having to address dependency concerns.</div>
<div style="background-color: white; color: #555555; font-family: Optima, Lucida, 'MgOpen Cosmetica', 'Lucida Sans Unicode', sans-serif; font-size: 13px; line-height: 17.5499992370605px; margin-bottom: 15px; margin-top: 10px;">
Ref : http://www.michaelminella.com/testing/the-concept-of-mocking.html</div>
</div>
Shivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-11038528191086037662014-08-06T04:53:00.000-07:002014-08-06T04:53:44.922-07:00<div dir="ltr" style="text-align: left;" trbidi="on">
We can have multiple level security in enterprise application<br />
1. data level security with masking (enrypting data)<br />
2. SSL/TLS<br />
<br />
Another thing is how we organize how to store private keys<br />
<br />
<div style="background: rgb(240, 240, 241); border: 0px; font-family: Arial; font-size: 14px; line-height: 20px; outline: 0px; padding: 0px;">
<strong class="style_important" style="background: transparent; border: 0px; color: #e32033; font-stretch: normal; margin: 0px; outline: 0px; padding: 0px;">Advanced protection of Web applicationsagainst the following threats:</strong></div>
<ul style="background: rgb(240, 240, 241); border: 0px; font-family: Arial; font-size: 14px; line-height: 20px; list-style: square outside url(http://www.matic.com.pl/templates/img/skins/square.gif); margin: 0px 0px 0px 20px; outline: 0px; padding: 0px;">
<li style="background: transparent; border: 0px; margin: 6px 0px; outline: 0px; padding: 0px;">Web, HTTPS and XML attacks</li>
<li style="background: transparent; border: 0px; margin: 6px 0px; outline: 0px; padding: 0px;">SQL Injection</li>
<li style="background: transparent; border: 0px; margin: 6px 0px; outline: 0px; padding: 0px;">session hijacking</li>
<li style="background: transparent; border: 0px; margin: 6px 0px; outline: 0px; padding: 0px;">cross site scripting (XSS)</li>
<li style="background: transparent; border: 0px; margin: 6px 0px; outline: 0px; padding: 0px;">abuse of form fields</li>
<li style="background: transparent; border: 0px; margin: 6px 0px; outline: 0px; padding: 0px;">known worms</li>
<li style="background: transparent; border: 0px; margin: 6px 0px; outline: 0px; padding: 0px;">Zero Day worms</li>
<li style="background: transparent; border: 0px; margin: 6px 0px; outline: 0px; padding: 0px;">buffer overflow</li>
<li style="background: transparent; border: 0px; margin: 6px 0px; outline: 0px; padding: 0px;">cookie poisoning</li>
<li style="background: transparent; border: 0px; margin: 6px 0px; outline: 0px; padding: 0px;">Denial of Service</li>
<li style="background: transparent; border: 0px; margin: 6px 0px; outline: 0px; padding: 0px;">parameter tampering</li>
<li style="background: transparent; border: 0px; margin: 6px 0px; outline: 0px; padding: 0px;">brute force login</li>
<li style="background: transparent; border: 0px; margin: 6px 0px; outline: 0px; padding: 0px;">malicious code</li>
<li style="background: transparent; border: 0px; margin: 6px 0px; outline: 0px; padding: 0px;">directory traversal</li>
<li style="background: transparent; border: 0px; margin: 6px 0px; outline: 0px; padding: 0px;">attacks on Web servers and operating systems</li>
<li style="background: transparent; border: 0px; margin: 6px 0px; outline: 0px; padding: 0px;">scanning</li>
<li style="background: transparent; border: 0px; margin: 6px 0px; outline: 0px; padding: 0px;">command injection</li>
<li style="background: transparent; border: 0px; margin: 6px 0px; outline: 0px; padding: 0px;">illegal coding</li>
<li style="background: transparent; border: 0px; margin: 6px 0px; outline: 0px; padding: 0px;">identity theft</li>
<li style="background: transparent; border: 0px; margin: 6px 0px; outline: 0px; padding: 0px;">data theft</li>
<li style="background: transparent; border: 0px; margin: 6px 0px; outline: 0px; padding: 0px;">data disclosure</li>
<li style="background: transparent; border: 0px; margin: 6px 0px; outline: 0px; padding: 0px;">corporate espionage</li>
<li style="background: transparent; border: 0px; margin: 6px 0px; outline: 0px; padding: 0px;">phishing</li>
</ul>
<div style="background: rgb(240, 240, 241); border: 0px; font-family: Arial; font-size: 14px; line-height: 20px; outline: 0px; padding: 0px;">
data destruction</div>
<div>
<br /></div>
</div>
Shivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-5751099442376956632014-07-02T07:57:00.001-07:002014-07-02T07:57:04.684-07:00How to achieve reverse navigation flow within user Tasks in aciviti BPM<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
Achieving reverse workflow movement is tricky in BPM workflow. I tried such use case. I am providing potential approach for same in below write-up.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
Reverse flow for sequential workflow</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdyCI3wNCbQRTVEJ_lJBsuhszlkpLglET_0-TZ2MDf5YvKJIhgXEQ2LgdhakC-wR-d2Z5VQ5aMQ79H1ZiT5Gwm3fI1c_DrR5iZODKdebges6NnK8nR1jY8IzHXVhHlfiH9BjuQltFkTGQ/s1600/SampleReverse.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdyCI3wNCbQRTVEJ_lJBsuhszlkpLglET_0-TZ2MDf5YvKJIhgXEQ2LgdhakC-wR-d2Z5VQ5aMQ79H1ZiT5Gwm3fI1c_DrR5iZODKdebges6NnK8nR1jY8IzHXVhHlfiH9BjuQltFkTGQ/s1600/SampleReverse.PNG" height="136" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
Reverse flow for Parallel workflow</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg83X_NLcvdYDcOgfYWbnUCN7ogepLM0PUgUn1BaC6KKcQWqjRgQ2xIfxX5c2vCJLJRBUklZ6MgQHgOKJWW7B6A6NNmsbf5xzo_bp_LF3PBL4yNQIeH45AeogRJBpRDCXIPbdiFq13-VCY/s1600/FixParallelProcessPay.FixParallelProcess.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg83X_NLcvdYDcOgfYWbnUCN7ogepLM0PUgUn1BaC6KKcQWqjRgQ2xIfxX5c2vCJLJRBUklZ6MgQHgOKJWW7B6A6NNmsbf5xzo_bp_LF3PBL4yNQIeH45AeogRJBpRDCXIPbdiFq13-VCY/s1600/FixParallelProcessPay.FixParallelProcess.png" height="201" width="640" /></a></div>
<br />
Reverse flow can be achieved in activiti task using adding conditional links with appropriate source references.<br />
<br />
e.g flow can be directed from Pay back to First task using conditions like<br />
<br />
${sourceEvent == 'XXX'} etc.<br />
<br />
flow can be directed from Xtask to approve using appropriate conditional statements.<br />
<br />
Parallel gateway have behavior of fork and join.<br />
<br />
So extra logic need to build to keep taking of waiting and completed tasks.<br />
<br />
<br />Please see attached sample BPMN and Test case to run this logic.<br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><?xml version="1.0" encoding="UTF-8"?></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <process id="SampleReverse" name="SampleReverse" isExecutable="true"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <startEvent id="startevent1" name="Start"></startEvent></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <userTask id="FirstLevel" name="FirstLevel"></userTask></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <exclusiveGateway id="exclusivegateway1" name="Exclusive Gateway"></exclusiveGateway></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <sequenceFlow id="flow1" sourceRef="FirstLevel" targetRef="exclusivegateway1"></sequenceFlow></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <userTask id="SecondLevel" name="SecondLevel"></userTask></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <exclusiveGateway id="exclusivegateway2" name="Exclusive Gateway"></exclusiveGateway></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <sequenceFlow id="flow2" sourceRef="SecondLevel" targetRef="exclusivegateway2"></sequenceFlow></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <userTask id="ThirdLevel" name="ThirdLevel"></userTask></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <sequenceFlow id="flow3" sourceRef="exclusivegateway2" targetRef="ThirdLevel"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${backButton == 'false'}]]></conditionExpression></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </sequenceFlow></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <sequenceFlow id="flow4" sourceRef="exclusivegateway1" targetRef="SecondLevel"></sequenceFlow></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <sequenceFlow id="flow6" sourceRef="startevent1" targetRef="FirstLevel"></sequenceFlow></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <sequenceFlow id="flow7" sourceRef="exclusivegateway2" targetRef="FirstLevel"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${backButton == 'false'}]]></conditionExpression></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </sequenceFlow></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <exclusiveGateway id="exclusivegateway3" name="Exclusive Gateway"></exclusiveGateway></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <sequenceFlow id="flow8" sourceRef="ThirdLevel" targetRef="exclusivegateway3"></sequenceFlow></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <endEvent id="endevent1" name="End"></endEvent></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <sequenceFlow id="flow9" sourceRef="exclusivegateway3" targetRef="endevent1"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${backButton == 'false'}]]></conditionExpression></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </sequenceFlow></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <sequenceFlow id="flow10" sourceRef="exclusivegateway3" targetRef="SecondLevel"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${backButton == 'false'}]]></conditionExpression></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </sequenceFlow></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </process></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <bpmndi:BPMNDiagram id="BPMNDiagram_myProcess"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <bpmndi:BPMNPlane bpmnElement="myProcess" id="BPMNPlane_myProcess"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdc:Bounds height="35.0" width="35.0" x="70.0" y="111.0"></omgdc:Bounds></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </bpmndi:BPMNShape></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <bpmndi:BPMNShape bpmnElement="FirstLevel" id="BPMNShape_FirstLevel"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdc:Bounds height="55.0" width="105.0" x="150.0" y="100.0"></omgdc:Bounds></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </bpmndi:BPMNShape></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <bpmndi:BPMNShape bpmnElement="exclusivegateway1" id="BPMNShape_exclusivegateway1"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdc:Bounds height="40.0" width="40.0" x="287.0" y="107.0"></omgdc:Bounds></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </bpmndi:BPMNShape></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <bpmndi:BPMNShape bpmnElement="SecondLevel" id="BPMNShape_SecondLevel"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdc:Bounds height="55.0" width="105.0" x="350.0" y="100.0"></omgdc:Bounds></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </bpmndi:BPMNShape></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <bpmndi:BPMNShape bpmnElement="exclusivegateway2" id="BPMNShape_exclusivegateway2"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdc:Bounds height="40.0" width="40.0" x="488.0" y="107.0"></omgdc:Bounds></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </bpmndi:BPMNShape></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <bpmndi:BPMNShape bpmnElement="ThirdLevel" id="BPMNShape_ThirdLevel"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdc:Bounds height="55.0" width="105.0" x="563.0" y="100.0"></omgdc:Bounds></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </bpmndi:BPMNShape></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <bpmndi:BPMNShape bpmnElement="exclusivegateway3" id="BPMNShape_exclusivegateway3"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdc:Bounds height="40.0" width="40.0" x="699.0" y="107.0"></omgdc:Bounds></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </bpmndi:BPMNShape></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdc:Bounds height="35.0" width="35.0" x="780.0" y="110.0"></omgdc:Bounds></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </bpmndi:BPMNShape></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdi:waypoint x="455.0" y="127.0"></omgdi:waypoint></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdi:waypoint x="488.0" y="127.0"></omgdi:waypoint></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </bpmndi:BPMNEdge></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdi:waypoint x="528.0" y="127.0"></omgdi:waypoint></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdi:waypoint x="563.0" y="127.0"></omgdi:waypoint></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </bpmndi:BPMNEdge></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdi:waypoint x="327.0" y="127.0"></omgdi:waypoint></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdi:waypoint x="350.0" y="127.0"></omgdi:waypoint></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </bpmndi:BPMNEdge></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <bpmndi:BPMNEdge bpmnElement="flow6" id="BPMNEdge_flow6"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdi:waypoint x="105.0" y="128.0"></omgdi:waypoint></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdi:waypoint x="150.0" y="127.0"></omgdi:waypoint></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </bpmndi:BPMNEdge></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <bpmndi:BPMNEdge bpmnElement="flow7" id="BPMNEdge_flow7"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdi:waypoint x="508.0" y="147.0"></omgdi:waypoint></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdi:waypoint x="507.0" y="204.0"></omgdi:waypoint></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdi:waypoint x="115.0" y="204.0"></omgdi:waypoint></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdi:waypoint x="115.0" y="128.0"></omgdi:waypoint></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdi:waypoint x="150.0" y="127.0"></omgdi:waypoint></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </bpmndi:BPMNEdge></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <bpmndi:BPMNEdge bpmnElement="flow8" id="BPMNEdge_flow8"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdi:waypoint x="668.0" y="127.0"></omgdi:waypoint></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdi:waypoint x="699.0" y="127.0"></omgdi:waypoint></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </bpmndi:BPMNEdge></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <bpmndi:BPMNEdge bpmnElement="flow9" id="BPMNEdge_flow9"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdi:waypoint x="739.0" y="127.0"></omgdi:waypoint></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdi:waypoint x="780.0" y="127.0"></omgdi:waypoint></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </bpmndi:BPMNEdge></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <bpmndi:BPMNEdge bpmnElement="flow10" id="BPMNEdge_flow10"></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdi:waypoint x="719.0" y="147.0"></omgdi:waypoint></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdi:waypoint x="718.0" y="187.0"></omgdi:waypoint></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdi:waypoint x="321.0" y="187.0"></omgdi:waypoint></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdi:waypoint x="321.0" y="129.0"></omgdi:waypoint></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <omgdi:waypoint x="350.0" y="127.0"></omgdi:waypoint></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </bpmndi:BPMNEdge></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </bpmndi:BPMNPlane></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </bpmndi:BPMNDiagram></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"></definitions></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><br /></span>
<br />
<br />
<a name='more'></a>Test case:<br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;">package org.activiti.designer.test;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;">import static org.junit.Assert.assertNotNull;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;">import java.io.FileInputStream;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;">import java.util.HashMap;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;">import java.util.List;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;">import java.util.Map;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;">import org.activiti.engine.RepositoryService;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;">import org.activiti.engine.RuntimeService;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;">import org.activiti.engine.TaskService;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;">import org.activiti.engine.runtime.ProcessInstance;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;">import org.activiti.engine.task.Task;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;">import org.junit.Test;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;">import org.springframework.context.support.ClassPathXmlApplicationContext;</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;">public class TestMyProcessReverse {</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>private String filename = "D:/Development/TestProject/TestBPM/src/main/resources/diagrams/MyProcessReverse.bpmn";</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>@Test</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>public void startProcess() {</span><br />
<span class="Apple-tab-span" style="white-space: pre;"><span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>try{</span><br />
<span class="Apple-tab-span" style="white-space: pre;"><span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>ClassPathXmlApplicationContext applicationContext = </span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>new ClassPathXmlApplicationContext("spring-test-config.xml");</span><br />
<span class="Apple-tab-span" style="white-space: pre;"><span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>// review : shiv,sunita</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>// verify : soumya</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>// approve : vishal</span><br />
<span class="Apple-tab-span" style="white-space: pre;"><span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>RepositoryService repositoryService = (RepositoryService) applicationContext.getBean("repositoryService");</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>repositoryService.createDeployment().addInputStream(filename,</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>new FileInputStream(filename)).deploy();</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>RuntimeService runtimeService = (RuntimeService) applicationContext.getBean("runtimeService");</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>TaskService taskService = (TaskService) applicationContext.getBean("taskService");</span><br />
<span class="Apple-tab-span" style="white-space: pre;"><span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>Map<String, Object> variableMap = new HashMap<String, Object>();</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>variableMap.put("fromBackButton", "false");</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>variableMap.put("invoiceId", "10");</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcessReverse","10", variableMap);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>assertNotNull(processInstance.getId());</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>System.out.println("id " + processInstance.getId() + " "</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>+ processInstance.getProcessDefinitionId());</span><br />
<span class="Apple-tab-span" style="white-space: pre;"><span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>List<Task> taskList = taskService.createTaskQuery().includeProcessVariables().list();</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>List<Task> invoiceUserList = taskService.createTaskQuery().taskCandidateUser("shiv").includeTaskLocalVariables().includeProcessVariables().list();</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>System.out.println("invoiceUserList:fisrtLevel:shiv::"+invoiceUserList);</span><br />
<span class="Apple-tab-span" style="white-space: pre;"><span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>for(Task task : invoiceUserList ){</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <span class="Apple-tab-span" style="white-space: pre;"> </span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>System.out.println("Taskid for first level:"+task.getId());</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>variableMap.put("fromBackButton", "false");</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>taskService.complete(task.getId(),variableMap);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <span class="Apple-tab-span" style="white-space: pre;"> </span>System.out.println("First TASK COMPLETED");</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>}</span><br />
<span class="Apple-tab-span" style="white-space: pre;"><span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>taskList = taskService.createTaskQuery().includeProcessVariables().list();</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>invoiceUserList = taskService.createTaskQuery().taskCandidateUser("soumya").includeTaskLocalVariables().includeProcessVariables().list();</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>System.out.println("invoiceUserList:fisrtLevel:soumya::"+invoiceUserList);</span><br />
<span class="Apple-tab-span" style="white-space: pre;"><span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>for(Task task : invoiceUserList ){</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <span class="Apple-tab-span" style="white-space: pre;"> </span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>System.out.println("Taskid for second level"+task.getId());</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>variableMap.put("fromBackButton", "true");</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>taskService.complete(task.getId(),variableMap);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <span class="Apple-tab-span" style="white-space: pre;"> </span>System.out.println("First TASK Reversed");</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>}</span><br />
<span class="Apple-tab-span" style="white-space: pre;"><span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>taskList = taskService.createTaskQuery().includeProcessVariables().list();</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>invoiceUserList = taskService.createTaskQuery().taskCandidateUser("soumya").includeTaskLocalVariables().includeProcessVariables().list();</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>System.out.println("I am moving to next level");</span><br />
<span class="Apple-tab-span" style="white-space: pre;"><span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </span></span><br />
<span class="Apple-tab-span" style="white-space: pre;"><span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </span></span><br />
<span class="Apple-tab-span" style="white-space: pre;"><span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>for(Task task : invoiceUserList ){</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <span class="Apple-tab-span" style="white-space: pre;"> </span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>System.out.println("Taskid moving to second level again:"+task.getId());</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>variableMap.put("fromBackButton", "false");</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>taskService.complete(task.getId(),variableMap);</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <span class="Apple-tab-span" style="white-space: pre;"> </span>System.out.println("Taskid moved to second level again");</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> <span class="Apple-tab-span" style="white-space: pre;"> </span>invoiceUserList = taskService.createTaskQuery().taskCandidateUser("soumya").includeTaskLocalVariables().includeProcessVariables().list();</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>}</span><br />
<span class="Apple-tab-span" style="white-space: pre;"><span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"> </span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>} catch (Throwable e){</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>e.printStackTrace();</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>}</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>}</span><br />
<span style="font-family: Arial, Helvetica, sans-serif; font-size: xx-small;">}</span><br />
<br />
<br />
<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br /></div>
Shivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-78949402421583840962013-06-27T07:52:00.001-07:002013-06-27T07:52:12.733-07:00When to not use static<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
http://stackoverflow.com/questions/1766715/when-not-to-use-the-static-keyword-in-java
</div>Shivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-46791131228090420282012-11-18T07:19:00.002-08:002012-11-18T07:19:48.891-08:00How to delete records in join sql query in oracle.<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<pre>
2.
How to delete records in join sql query in oracle.
DELETE
from role_resource_privilege
where exists (select rrp.*
FROM role_resource_privilege rrp
LEFT JOIN role r
ON r.role_id = rrp.role_id
LEFT JOIN resource_privilege rp
ON rp.resource_id = rrp.resource_id
AND rp.privilege_id = rrp.privilege_id
where rp.resource_id is null
OR r.role_id IS NULL);
</pre>
</div>Shivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-44527496011290739012012-11-18T07:14:00.001-08:002012-11-18T07:17:53.254-08:00ORA-01779: cannot modify a column which maps to a non key-preserved table<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<pre>
Oracle issue :
------------------
ORA-01779: cannot modify a column which maps to a non key-preserved table
Reason :
update (
select ur.sysadmin FROM user_role ur
INNER JOIN user_profile up
ON up.user_id = ur.user_id
INNER JOIN role r
ON r.role_id = ur.role_id
WHERE ur.sysadmin = 1
and ( up.sysadmin = 0
or r.sysadmin = 0 )) t
SET t.sysadmin = 0;
Because inline view returns 0 rows and oracle could figure out records to be updated.
Solution :
update user_role usr set usr.sysadmin = 0
where exists (
select ur.* FROM user_role ur
INNER JOIN user_profile up
ON up.user_id = ur.user_id
INNER JOIN role r
ON r.role_id = ur.role_id
WHERE ur.sysadmin = 1
and ( up.sysadmin = 0
or r.sysadmin = 0 ));
We can also use merge statement to update rows in join
merge INTO resource_master c USING resource_master p ON (p.resource_id = c.parent_id)
WHEN matched THEN
UPDATE SET c.active = 0;
</pre>
</div>
Shivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-20361095517203460512012-11-18T07:12:00.004-08:002012-11-18T07:18:30.287-08:00Why do we need 64 bit JVM<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<pre>
Why do we need 64 bit JVM:
----------------------------
The primary reason would be if you wanted to write an app capable of using a large amount of memory (e.g. over 4GB, or whatever the per-process limit on your operating system is).
1. When we need to handle more memory ptentially more than 4G.
2. Note, however, that due to the larger adresses (32-bit is 4 bytes, 64-bit is 8 bytes) a 64-bit JVM will require more memory than a 32-bit JVM for the same task.
3. The Java compiler produces byte code which is same whether you use the 32-bit or 64-bit JDK and plan to use the 32-bit or 64-bit JRE.
4. One way to use a 64-bit JVM efficiently is to use the -XX:+UseCompressedOops which uses 32-bit references in a way which can still access 32 GB of memory. It can do this because every object in the Sun/Oracle JVM is allocated on a 8-byte boundary (i.e. the lower 3 bits of the address are 000) By shifting the bits of the 32-bit reference, it can access 4GB * 8 or 32 GB in total. It has been suggested that this should be the default for Java 7.
Support for 32-bit programs
Programs written and compiled for a 32-bit JVM will work without re-compilation. However any native libraries used will not. A 64-bit JVM can only load 64-bit native libraries.
http://software.intel.com/en-us/blogs/2011/07/07/all-about-64-bit-programming-in-one-place/
http://java.dzone.com/articles/java-all-about-64-bit
</pre>
</div>
Shivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-3975176551356635022012-04-19T05:27:00.002-07:002012-04-19T05:27:49.359-07:00Load balancerLoad Balancer<br />
<br />
A load balancer in front of the cluster makes sure that all servers receive fair share of user requests. A hardware load balancer is usually a best option as it provides maximum performance. Companies such F5 and Cisco (big IP) are known for good hardware load balancers. If your budged cannot afford a hardware load balancer, an Apache server running a combination of mod_proxy, mod_rewrite and mod_redundancy can be another option.Shivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-3089602261985161742012-04-19T04:24:00.000-07:002012-04-19T04:24:38.689-07:00Tangosol vs TerracottaTerracotta DSO uses a TCP/IP-based client/server architecture that consists of client-side instrumentation (byte code changes for "transparent clustering"), combined with a central server ("hub") for sharing state between application servers. In a Coherence cluster, the analogous components would be our free Coherence Data Client on the application servers, combined with any of our server-side editions (e.g. Coherence Caching Edition) as a fault-tolerant scale-out solution for state and data management.<br />
<br />
Terracotta explains their clustering as follows:<br />
<br />
<br />
Terracotta servers can be deployed as an active-Primary plus a passive-Secondary (i.e. 1 or numerous hot-standby(s)) - the hot-standby shares disk with the primary Terracotta Server. On failure of the primary, client-JVMs transparently connect to the standby.<br />
<br />
<br />
Any my response:<br />
<br />
For reference, this is one of the primary differences betweent Terracotta clustering and Tangosol clustering. Terracotta can cluster two servers (one hot, one standby) while Tangosol can run a couple thousand servers as "hot" (active + active + active + etc) in an n-way fully-connected mesh (virtual channels). Our server throughput in a 100-server system is 50x that of a hot+hot 2-server system, and (in a fully switched fabric) our throughput in a 1000-server system is 10x that of a 100-server system. And failover time (automatic, without data loss or interruption of application flow) is still typically sub-second.<br />
<br />
Regarding the connections between the application servers and the Terracotta server, it is a TCP/IP client/server connection (no fundamental differences at the wire level from a Telnet session, JDBC connection or RMI). It is analogous to our free Data Client or our low-cost Real-Time Client.<br />
<br />
Speaking for me personally, I would evaluate plugging Terracotta in through the TCP/IP connectivity (ours, theirs, whatever), because Terracotta has focused on the programming model (AOP, Spring, etc.), and it could be a good addition for working with data in a Data Grid.<br />
<br />
--From link : http://www.infoq.com/news/2006/12/terracotta-jvm-clusteringShivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-18253036479040088982012-02-27T22:46:00.001-08:002012-02-27T22:48:52.407-08:00Low latency architectureLMAX - How to Do 100K TPS at Less than 1ms Latency<br />
<br />
Imp links :<br />
http://martinfowler.com/articles/lmax.html<br />
http://ftalphaville.ft.com/blog/2009/07/08/60761/the-cold-war-in-high-frequency-trading/<br />
http://ftalphaville.ft.com/blog/tag/high-frequency-trading/Shivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-54665921553499649852011-03-28T05:40:00.000-07:002011-03-28T05:43:19.354-07:00potential uses for dynamic proxies1.Event publishing - on method x(), transparently call y() or send message z.<br />2.Transaction management (for db connections or other transactional ops)<br />3.Thread management - thread out expensive operations transparently. <br />4.Performance tracking - timing operations checked by a CountdownLatch, for example.<br />5.Connection management - thinking of APIs like Salesforce's Enterprise API that require clients of their service to start a session before executing any operations.<br />6.Changing method parameters - in case you want to pass default values for nulls, if that's your sort of thing.<br />Those are just a few options in addition to validation and logging like you've described above. FWIW, JSR 303, a bean validation specification, has an AOP-style implementation in Hibernate Validator, so you don't need to implement it for your data objects specifically. Spring framework also has validation built in and has really nice integration with AspectJ for some of the stuff described here.<br />7. Another useful side of a dynamic proxy is when you want to apply the same operation to all methods. With a static proxy you'd need a lot of duplicated code (on each proxied method you would need the same call to a method, and then delegate to the proxied object), and a dynamic proxy would minimize this.Shivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-70969698810111431262011-03-28T05:01:00.000-07:002011-03-28T05:02:34.242-07:00How Java AOP implementedHow Java AOP works<br /><br />Class-weaving-based, such as AspectJ and JBoss AOP. Core and crosscutting concerns are implemented independently. Class weaving is the process of integrating the concern implementations to form the final system. Weaving can be performed at compile, load, and run time. Both AspectJ and JBoss AOP are very powerful AOP implementations. They provide field interception, caller side interception, and constructor interception.<br />Proxy-based, such as Spring AOP, Nanning, and dynaop. With proxies, method invocations on an object can be intercepted to inject custom code. The aforementioned AOP frameworks use JDK dynamic proxy, CGLIB proxy, or both. Unlike the class-weaving-based ones, proxy-based AOP frameworks are simpler and often focus on method interception. Most of the time, Java developers use method interception only. Some proxy-based AOP implementations, such as Spring AOP, provide close integration with AspectJ to take advantage of its capabilities.<br /><br />What if you want to proxy legacy classes that do not have interfaces? You can use CGLIB. CGLIB is a powerful, high-performance code generation library. Under the cover, it uses ASM, a small but fast bytecode manipulation framework, to transform existing byte code to generate new classes. CGLIB is faster than the JDK dynamic proxy approach. Essentially, it dynamically generates a subclass to override the non-final methods of the proxied class and wires up hooks that call back to the user-defined interceptors.<br /><br />1. Dynamic proxy using InvocationHandler<br /><br />public Object invoke(Object target, Method method, Object[] arguments) { <br />System.out.println("before method " + method.getName()); <br />return method.invoke(obj, args); <br />} <br />} <br /><br />2. Java byte-code transformation:<br /><br />http://asm.ow2.org/doc/tutorial-annotations.html<br /><br />Refere this article : http://today.java.net/pub/a/today/2005/11/01/implement-proxy-based-aop.htmlShivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-10391027181903522042011-03-28T02:54:00.000-07:002011-03-28T02:55:37.786-07:00Java classpath discoveryLibrary which allows discovering classes at runtime. In Java one can use <br />ClassLoader.getResourceAsInputStream(resource);<br />to load the data from the CLASS_PATH provided that you know the name of the resource. This library allows you to discover what Java packages and classes are available at runtime.<br /> <br />ClassPathFactory factory = new ClassPathFactory(); <br />ClassPath classPath = factory.createFromJVM(); <br />for (String packageName : classPath.listPackages("")) { <br /> System.out.println(packageName); <br />}Shivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-31400331630380035502011-03-28T00:07:00.000-07:002011-03-28T00:08:24.552-07:00Catching Exception in ThreadsJava 5 introduced a new way to catch unexpected exceptions: Thread.UncaughtExceptionHandler. This is an interface with the following API:<br />public interface UncaughtExceptionHandler {<br /> void uncaughtException(Thread t, Throwable e);<br />}<br />Your job is to write a class that implements this interface. You then register your implementation on a per-thread basis, or globally for every thread. To register your handler for a single thread you do something like this:<br />Thread.currentThread().setUncaughtExceptionHandler(new MyExceptionHandler());<br />To register your handler for every thread, do this:<br />Thread.setDefaultUncaughtExceptionHandler(new MyExceptionHandler());<br />Notice that setDefaultUncaughtExceptionHandler(...) is a static method in the Thread class, while setUncaughtExceptionHandler(...) is a non-static method.<br /><br />Simple enough. Let’s add an uncaught exception handler.<br />MyExceptionHandler<br />Here is a simple uncaught exception handler that shows the exception message in a dialog box.<br />public class MyExceptionHandler implements Thread.UncaughtExceptionHandler {<br /><br /> public void uncaughtException(final Thread t, final Throwable e) {<br /> if (SwingUtilities.isEventDispatchThread()) {<br /> showException(t, e);<br /> } else {<br /> SwingUtilities.invokeLater(new Runnable() {<br /> public void run() {<br /> showException(t, e);<br /> }<br /> });<br /> }<br /> }<br /><br /> private void showException(Thread t, Throwable e) {<br /> String msg = String.format("Unexpected problem on thread %s: %s",<br /> t.getName(), e.getMessage());<br /><br /> logException(t, e);<br /><br /> // note: in a real app, you should locate the currently focused frame<br /> // or dialog and use it as the parent. In this example, I'm just passing<br /> // a null owner, which means this dialog may get buried behind<br /> // some other screen.<br /> JOptionPane.showMessageDialog(null, msg);<br /> }<br /><br /> private void logException(Thread t, Throwable e) {<br /> // todo: start a thread that sends an email, or write to a log file, or<br /> // send a JMS message...whatever<br /> }<br />}<br />To use this handler, you must register it. Simply modify the code as follows:<br />public static void main(String[] args) {<br /> Thread.setDefaultUncaughtExceptionHandler(new MyExceptionHandler());<br /><br /> ...<br />Now, whenever an “unexpected” exception occurs, MyExceptionHandler kicks in and shows this lovely dialog box:Shivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-23942674135145621032010-09-24T23:28:00.000-07:002010-09-24T23:30:53.912-07:00load() vs get() hibernateHibernate load vs. Hibernate get Methods<br /><br />Well, if you were to compare the load and get methods of the Hibernate Session, you'd think that they looked pretty darned similar; and you'd be correct, but there are subtle and very important differences.<br /><br />First of all, the get method hits the database as soon as it is called. So, using the Hibernate Session's get method will always trigger a database hit. On the other hand, the load method only hits the database when a particular field of the entity is accessed. So, if we use the load method to retrieve an entity, but we never actually access any of the fields of that entity, we never actually hit the database. Pretty kewl, eh?<br /><br />Well, actually, as kewl as the load method might sound, it actually triggers more problems than it solves, and here's why. If you initialize a JavaBean instance with a load method call, you can only access the properties of that JavaBean, for the first time, within the transactional context in which it was initialized. If you try to access the various properties of the JavaBean after the transaction that loaded it has been committed, you'll get an exception, a LazyInitializationException, as Hibernate no longer has a valid transactional context to use to hit the database.<br /><br />So, while this code will work just fine?..<br /><br />session.beginTransaction();<br />User user=(User)session.load(User.class, new Long(1));<br />System.out.println(user.getPassword());<br />session.getTransaction().commit();<br />.. this code will fail ?..<br /><br />session.beginTransaction();<br />User user=(User)session.load(User.class, new Long(1));<br />session.getTransaction().commit();<br />System.out.println(user.getPassword());<br />.. and generate the following error, telling you that since the transaction was committed, there was no valid Session in which a read transaction against the database could be issued:<br /><br />org.hibernate.LazyInitializationException: <br />could not initialize proxy - no Session<br /><br />When to use get? When to use load?<br /><br />So, after comparing and contrasting the load and get methods, the natural question that arises is "when do I use the get, and when do I use load?" It's a good question.<br /><br />For the most part, you'll probably use the get method most often in your code. If you ever want to use the JavaBean that you are retrieving from the database after the database transaction has been committed, you'll want to use the get method, and quite frankly, that tends to be most of the time.<br /><br />-- From Hibernate made easyShivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-89030602834811685372010-09-22T19:41:00.000-07:002010-09-22T19:42:26.124-07:00IN vs EXISTSbY Tome Kyte :<br /><br />can you give me some example at which situation<br />IN is better than exist, and vice versa. <br /><br />and we said...<br /><br />Well, the two are processed very very differently.<br /><br />Select * from T1 where x in ( select y from T2 )<br /><br />is typically processed as:<br /><br />select * <br /> from t1, ( select distinct y from t2 ) t2<br /> where t1.x = t2.y;<br /><br />The subquery is evaluated, distinct'ed, indexed (or hashed or sorted) and then joined to <br />the original table -- typically.<br /><br /><br />As opposed to <br /><br />select * from t1 where exists ( select null from t2 where y = x )<br /><br />That is processed more like:<br /><br /><br /> for x in ( select * from t1 )<br /> loop<br /> if ( exists ( select null from t2 where y = x.x )<br /> then <br /> OUTPUT THE RECORD<br /> end if<br /> end loop<br /><br />It always results in a full scan of T1 whereas the first query can make use of an index <br />on T1(x).<br /><br /><br />So, when is where exists appropriate and in appropriate?<br /><br />Lets say the result of the subquery<br /> ( select y from T2 )<br /><br />is "huge" and takes a long time. But the table T1 is relatively small and executing ( <br />select null from t2 where y = x.x ) is very very fast (nice index on t2(y)). Then the <br />exists will be faster as the time to full scan T1 and do the index probe into T2 could be <br />less then the time to simply full scan T2 to build the subquery we need to distinct on.<br /><br /><br />Lets say the result of the subquery is small -- then IN is typicaly more appropriate.<br /><br /><br />If both the subquery and the outer table are huge -- either might work as well as the <br />other -- depends on the indexes and other factors.Shivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-29113394057064194772010-09-21T17:30:00.000-07:002010-09-21T17:42:22.852-07:00Producer Consumer using concurrent : by Enno Shioji<span class="Apple-style-span" style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; border-collapse: collapse; font-size: 14px; line-height: 18px; "><pre class="prettyprint" style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(238, 238, 238); font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; overflow-x: auto; overflow-y: auto; width: auto; max-height: 600px; background-position: initial initial; background-repeat: initial initial; "><code style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(238, 238, 238); font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; background-position: initial initial; background-repeat: initial initial; "><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">public</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">class</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">Main</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">{</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br />
<br />
<br /> </span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">public</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">static</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">void</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> main</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">(</span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">String</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">[]</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> args</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">){</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br />
<br /> </span><span class="com" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: gray; background-position: initial initial; background-repeat: initial initial; ">//The numbers are just silly tune parameters. Refer to the API.</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /> </span><span class="com" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: gray; background-position: initial initial; background-repeat: initial initial; ">//The important thing is, we are passing a bounded queue.</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /> </span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">ExecutorService</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> consumer </span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">=</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">new</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">ThreadPoolExecutor</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">(</span><span class="lit" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: maroon; background-position: initial initial; background-repeat: initial initial; ">1</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">,</span><span class="lit" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: maroon; background-position: initial initial; background-repeat: initial initial; ">4</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">,</span><span class="lit" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: maroon; background-position: initial initial; background-repeat: initial initial; ">30</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">,</span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">TimeUnit</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">.</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">SECONDS</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">,</span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">new</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">LinkedBlockingQueue</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "><</span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">Runnable</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">>(</span><span class="lit" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: maroon; background-position: initial initial; background-repeat: initial initial; ">100</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">));</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br />
<br /> </span><span class="com" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: gray; background-position: initial initial; background-repeat: initial initial; ">//No need to bound the queue for this executor.</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /> </span><span class="com" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: gray; background-position: initial initial; background-repeat: initial initial; ">//Use utility method instead of the complicated Constructor.</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /> </span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">ExecutorService</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> producer </span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">=</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">Executors</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">.</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">newSingleThreadExecutor</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">();</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br />
<br /> </span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">Runnable</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> produce </span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">=</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">new</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">Produce</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">(</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">consumer</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">);</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /> producer</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">.</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">submit</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">(</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">produce</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">);</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /> </span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">}</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br />
<br />
<br /></span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">}</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br />
<br />
<br />
<br /></span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">class</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">Produce</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">implements</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">Runnable</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">{</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /> </span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">private</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">final</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">ExecutorService</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> consumer</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">;</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br />
<br /> </span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">public</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">Produce</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">(</span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">ExecutorService</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> consumer</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">)</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">{</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /> </span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">this</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">.</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">consumer </span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">=</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> consumer</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">;</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /> </span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">}</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br />
<br /> </span><span class="lit" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: maroon; background-position: initial initial; background-repeat: initial initial; ">@Override</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /> </span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">public</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">void</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> run</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">()</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">{ </span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "><span class="Apple-style-span" style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; white-space: normal; "><pre class="prettyprint" style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(238, 238, 238); font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; overflow-x: auto; overflow-y: auto; width: auto; max-height: 600px; background-position: initial initial; background-repeat: initial initial; "><code style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(238, 238, 238); font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; background-position: initial initial; background-repeat: initial initial; "><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">while</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">(!</span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">Thread</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">.</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">isInterrupted</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">){</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /> </span><span class="com" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: gray; background-position: initial initial; background-repeat: initial initial; ">//do stuff</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">Pancake</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> cake </span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">=</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">Pan</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">.</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">cook</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">();</span></span></code></pre></span></span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">Runnable</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> consume </span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">=</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">new</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">Consume</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">(</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">cake</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">);</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /> consumer</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">.</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">submit</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">(</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">consume</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">);</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /> }</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">}</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br />
<br /></span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">}</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br />
<br /></span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">class</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">Consume</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">implements</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">Runnable</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">{</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /> </span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">private</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">final</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">Pancake</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> cake</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">;</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br />
<br /> </span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">public</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">Consume</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">(</span><span class="typ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(43, 145, 175); background-position: initial initial; background-repeat: initial initial; ">Pancake</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> cake</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">){</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /> </span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">this</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">.</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">cake </span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">=</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> cake</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">;</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /> </span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">}</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /> </span><span class="lit" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: maroon; background-position: initial initial; background-repeat: initial initial; ">@Override</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /> </span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">public</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="kwd" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: rgb(0, 0, 139); background-position: initial initial; background-repeat: initial initial; ">void</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> run</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">()</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; "> </span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">{</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /> cake</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">.</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">eat</span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">();</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /> </span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">}</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /></span><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">}</span><span class="pln" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /></span></code></pre><div><code style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(238, 238, 238); font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; background-position: initial initial; background-repeat: initial initial; "><span class="pun" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: black; background-position: initial initial; background-repeat: initial initial; ">
<br /></span></code></div></span>Shivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-79228822764036129772010-09-13T17:20:00.000-07:002010-09-13T17:23:49.558-07:00How to work on inherited codebaseGood link : <a href="http://stackoverflow.com/questions/215076/whats-the-best-way-to-become-familiar-with-a-large-codebase">http://stackoverflow.com/questions/215076/whats-the-best-way-to-become-familiar-with-a-large-codebase</a><div><br /></div><div><a href="http://stackoverflow.com/questions/214605/the-best-way-to-familiarize-yourself-with-an-inherited-codebase">http://stackoverflow.com/questions/214605/the-best-way-to-familiarize-yourself-with-an-inherited-codebase</a></div>Shivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-54331397308027119882010-09-12T17:45:00.000-07:002010-09-12T18:47:02.511-07:00OOD principles<span class="Apple-style-span" style="font-family: arial; font-size: 11px; "><div><span class="Apple-style-span" style="font-family: arial; font-size: 11px; "><b>All text copied from various sources :</b></span></div><div><span class="Apple-style-span" style="font-family: arial; font-size: 11px; "><b><span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: medium; "><a href="http://c2.com/cgi/wiki?LiskovSubstitutionPrinciple">LiskovSubstitutionPrinciple</a></span></b></span></div><div><span class="Apple-style-span" style="font-family: arial; font-size: 11px; "><b><span class="Apple-style-span" style="font-family: Verdana; font-weight: normal; font-size: 13px; color: rgb(34, 34, 34); -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">This principle is just an extension of the Open Close Principle and it means that we must make sure that new derived classes are extending the base classes without changing their behavior. Its corollary not principle.</span></b></span></div><div><span class="Apple-style-span" style="font-family: arial; font-size: 11px; "><b><br /></b></span></div><div><span class="Apple-style-span" style="font-family: arial; font-size: 11px; "><b>Dependency Inversion Principle [DIP]</b></span></div><div><span class="Apple-style-span" style="font-family: arial; font-size: 11px; "><b><span class="Apple-style-span" style="font-weight: normal; ">All said and done, why is it called Dependency Inversion Principle? The answer is again in thought thinking patterns. In the traditional approach, we start thinking from the high-level modules and cascade down to the lower levels. For example, we initially thought, we need an object to write data to the database and then created another object to write the data to the database and strongly coupled the high-level writer object to the low-level database writer object. This led to the bad design.</span></b></span></div>In Dependency Inversion Principle, we started thinking from the low-level modules. We identified that we may need to write to different destinations and thereby may need many <i>Writer</i> objects in the system. But all of them are writing data to somewhere and abstracted it to the <i>Writer</i> object. Then we associated this abstraction to the high-level module, the <i>DataWriter</i>.</span><div><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: 11px;"><br /></span></span></div><div><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: 11px;"><p>Last month, we discussed Liskov’s Substitution Principle (LSP). In this article, we will discuss the abstraction principle. While LSP describes different considerations to be made while creating sub-types in the application architecture, the abstraction is all about the design flexibility. If you are interested in good Object-Oriented design, this article is for you.</p><h2><span class="Apple-style-span" style="font-weight: normal; font-size: 11px; "><div><span class="Apple-style-span" style="font-family: arial; font-size: 11px; "><b>Open Close principle [OCP]</b></span></div><div><span class="Apple-style-span" style="font-size: 17px; font-weight: bold; ">Is it Open or Closed?</span></div></span></h2><p>This is the first question you should ask yourself after you have finished writing your application module. Beware if the answer is <b>closed</b>. It means you need to take a fresh look at your design. Object Oriented software does not only mean that your application is a combination of several objects but it must satisfy the requirements that the design is flexible, and OPEN for extension. At this point of time, we will define the Open-Closed principle (OCP) formally as:</p><p>A software module which should be closed for modification but open for extension.</p><p>You may wonder how it is possible to extend an application without modifying it. Precisely, a good OO design gives you this power. Remember, bug fixing your application is not an extension. Think about how Object1 uses Object 2 and Object 2 provides some business logic to Object1. This business logic may be customer specific. To meet different customer needs, if you have to change the business logic embedded in Object 2, your application is violating OCP.</p><p>So far so good but the example speaks more than a thousand words and I will present examples to illustrate the points about OCP. If you follow the examples, you should be able to understand and apply OCP in your own application design.</p><h2>Strong Coupling</h2><p>What it is? It means that one application module is totally dependent on the implementation of another module. This is the first sign of violation of OCP. Consider this example. You are going to design a banking application where a particular loan request is passed through a<i>LoanValidator </i>to approve the loan request. The <i>LoanValidator</i> looks to see if the balance is above certain values and then approves the request. Given this problem, one guy comes up with the following classes.</p><p>The <i>LoanRequestHandler</i> can assess a loan request. This class holds the balance and period of existence for a particular bank account. I have simplified all other features that this class should normally bear to represent a physical bank account. But still this is sufficient to make the point.</p><p>Listing 1 LoanRequestHandler.java</p><pre>public class LoanRequestHandler { private int balance; private int period; /** Creates a new instance of LoanRequestHandler */ public LoanRequestHandler(int balance, int period) { this.balance = balance; this.period = period; } public void approveLoan(PersonalLoanValidator validator) { if(validator.isValid(balance)) //sanction the loan System.out.println("Loan approved..."); else System.out.println("Sorry not enough balance..."); } } </pre><p>This program can tell you if your loan request is approved or not. It uses another object <i>PersonalLoanValidator</i> to decide if the loan request is valid or not. The <i>PersonalLoanValidator</i> just checks to see if the balance is more than 1000 and approves the loan or else rejects it.</p><p>Listing 2 PersonalLoanValidator.java</p><pre>public class PersonalLoanValidator { /** Creates a new instance of PersonalLoanValidator */ public PersonalLoanValidator() { } public boolean isValid(int balance) { if(balance>1000) return true; else return false; } } </pre><h2>Problem</h2><p>Do you see the problem with the above design? Probably yes. The <i>LoanRequestHandler </i>object is strongly coupled with<i>PersonalLoanValidator</i> object. What happens if the <i>LoanRequestHandler</i> object should be used to verify a business loan. Certainly, your business logic to approve a business loan will be different and <i>PersonalLoanValidator</i> is not capable of handling this business logic.</p><p>One solution may to be add another method to the <i>PersonalLoanValidator</i> class to verify the business loan approval process. Also we need to modify the <i>LoanRequestHandler</i> object with an if-else loop to apply different <i>Validator</i> objects for personal loans and business loans. This means every time the bank decides to provide a different type of loan, we need to make change in the <i>LoanRequestHandler</i>and <i>PersonalLoanValidator</i> objects.</p><p>This application is certainly not closed for modification. This is where the OCP comes into the picture. This application has violated the OCP and therefore it is not properly designed.</p><p><b>Single Responsibility principle [SRP]</b></p><p><b><span class="Apple-style-span" style="font-family: 'Times New Roman'; font-weight: normal; font-size: medium; "></span></b></p><b><pre> assignToSite(emp, site) // procedural <p></p> // OOP <p></p> emp.assignToSite(site) // OO variation 1 <p></p> Or <p></p> site.assignEmp(emp) // OO variation 2 <p></p> Or <p></p> site.employeeList.add(emp) // OO variation 3</pre></b></span><b></b><p></p><div><br /></div></span><div><span class="Apple-style-span" style="font-family: arial; font-size: 11px; "><br /></span></div></div>Shivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-63743580413433689972010-09-08T04:08:00.001-07:002010-09-09T02:34:48.199-07:00Phase 2 protocol links<div>Truly great article : Mike Spille</div><div>http://jroller.com/pyrasun/category/XA</div><div><br /></div><div>http://en.wikipedia.org/wiki/Two_phase_commit</div><div>http://www.aurorainfo.com/wp4/index.htm#18</div><div>http://www.informit.com/articles/printerfriendly.aspx?p=351607</div><div>http://onjava.com/lpt/a/792</div><div>http://www.javabeat.net/qna/842-what-is-the-difference-between-jts-and-jta/</div><div>http://www.jroller.com/raible/entry/two_phase_commit_in_tomcat</div><div>http://static.raibledesigns.com/downloads/howto-tomcat-jotm.html</div><div><br /></div><div>Architecture stuff</div><div>--------------------</div><div><div>http://www.rationalrose.com/models/architectural_patterns.htm</div><div>http://handbookofsoftwarearchitecture.com/index.jsp?page=Main</div><div>http://hillside.net/</div><div>http://c2.com/cgi/wiki?TimeFrameProcessingArchitecture</div><div>http://sourcemaking.com/design_patterns</div><div>http://www.oodesign.com/open-close-principle.html</div><div><br /></div></div>Shivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-24476028313318100982010-09-05T22:43:00.000-07:002010-09-05T22:53:53.959-07:00JNLP web start<div>I found one very nice resource over web by mkyong.</div><a href="http://www.mkyong.com/java/java-web-start-jnlp-tutorial-unofficial-guide/">http://www.mkyong.com/java/java-web-start-jnlp-tutorial-unofficial-guide/</a>Shivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-75943479276373229932010-09-03T05:04:00.001-07:002010-09-03T05:18:27.867-07:00Design priciple from "Better fast lighter java"<span class="Apple-style-span" style="font-family: verdana, sans-serif; font-size: 11px; "><p class="docText" style="margin-top: 0px; margin-right: 0px; margin-bottom: 12px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12px; line-height: 1.2em; font-family: verdana, sans-serif; color: black; ">Not all requirements can or should <a name="bfljava-CHP-6-ITERM-884"></a><a name="bfljava-CHP-6-ITERM-885"></a><a name="simple software"></a>be anticipated. Building simple software often means waiting to incorporate future requirements until they're needed. You don't have to completely write off the future, though. By making good decisions, you can make it easy to extend your frameworks in ways you might not have originally intended. You do so by following good design principles:</p><a name="bfljava-CHP-6-ITERM-886"></a><a name="bfljava-CHP-6-ITERM-887"></a><a name="bfljava-CHP-6-ITERM-888"></a><dl class="docList" style="font-family: verdana, sans-serif; color: black; font-size: 12px; "><dt><br /><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 12px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; line-height: 1.2em; "><i><span class="docPubcolor" style="color: rgb(53, 66, 120); "><a name="with the"></a>Expose the right methods, with the right granularity</span></i></p></dt><dd><p class="docList" style="margin-top: 0px; margin-right: 0px; margin-bottom: 12px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12px; line-height: 1.2em; font-family: verdana, sans-serif; color: black; "><a name="should be"></a>Methods should be fine-grained and <a name="bfljava-CHP-6-ITERM-886"></a><a name="handle a"></a>handle a single concept. If your methods bundle up too many concepts, you won't be able to extend the class by overriding the method.</p></dd><dt><br /><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 12px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; line-height: 1.2em; "><i><span class="docPubcolor" style="color: rgb(53, 66, 120); ">Use Java interfaces</span></i></p></dt><dd><p class="docList" style="margin-top: 0px; margin-right: 0px; margin-bottom: 12px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12px; line-height: 1.2em; font-family: verdana, sans-serif; color: black; "><a name="Java interfaces"></a>Providing general Java interfaces <a name="bfljava-CHP-6-ITERM-887"></a><a name="bfljava-CHP-6-ITERM-888"></a><a name="the interface"></a>separates the interface from implementation details. If you see a service or capability that's buried in a class definition, break it out into a separate interface.</p></dd><dt><br /><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 12px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; line-height: 1.2em; "><i><span class="docPubcolor" style="color: rgb(53, 66, 120); "><a name="coupling between"></a>Loosen coupling between key concepts</span></i></p></dt><dd><p class="docList" style="margin-top: 0px; margin-right: 0px; margin-bottom: 12px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12px; line-height: 1.2em; font-family: verdana, sans-serif; color: black; "><a name="good Java"></a>This concept always comes up in good Java programming books for a reason. It works.</p></dd><dt><br /><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 12px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; line-height: 1.2em; "><i><span class="docPubcolor" style="color: rgb(53, 66, 120); "><a name="and simple"></a>Keep designs clear and simple</span></i></p></dt><dd><p class="docList" style="margin-top: 0px; margin-right: 0px; margin-bottom: 12px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12px; line-height: 1.2em; font-family: verdana, sans-serif; color: black; "><a name="and understand"></a>Code that's hard to read and understand will be hard to extend.</p></dd><dt><br /><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 12px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; line-height: 1.2em; "><i><span class="docPubcolor" style="color: rgb(53, 66, 120); "><a name="code under"></a>Publish the code under an open source license</span></i></p></dt><dd><p class="docList" style="margin-top: 0px; margin-right: 0px; margin-bottom: 12px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12px; line-height: 1.2em; font-family: verdana, sans-serif; color: black; "><a name="source that"></a>An application with source that can be examined and modified is much easier to extend then a closed-source application.</p><div><br /></div></dd></dl></span>Shivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-56219100314664810952010-08-29T06:13:00.000-07:002010-08-29T06:46:55.254-07:00Visitor pattern<span class="Apple-style-span" style=" color: rgb(51, 51, 51); line-height: 24px; font-family:Georgia, 'Lucida Bright', 'Times New Roman', serif;"><div>Visitor Pattern :</div><div>-----------------------</div><div>From <span class="Apple-style-span" style="color: rgb(109, 114, 136); line-height: normal; font-family:verdana, sans-serif;font-size:17px;"><span class="Apple-style-span" style="color: rgb(0, 0, 0); font-weight: bold; line-height: 12px; font-size:10px;"><a href="http://techbus.safaribooksonline.com/0-201-48539-7" title="Java™ Design Patterns: A Tutorial" style="text-decoration: underline; outline-style: none; outline-width: initial; outline-color: initial; color: rgb(0, 51, 153); ">Java™ Design Patterns: A Tutorial</a></span></span></div><div><span class="Apple-style-span" style="color: rgb(109, 114, 136); line-height: normal; font-family:verdana, sans-serif;font-size:17px;"><br /></span></div><div><span class="Apple-style-span" style="color: rgb(109, 114, 136); line-height: normal; font-family:verdana, sans-serif;font-size:17px;"><span class="Apple-style-span" style="color: rgb(0, 0, 0); font-weight: bold; line-height: 12px; font-size:10px;"><a href="http://techbus.safaribooksonline.com/0-201-48539-7" title="Java™ Design Patterns: A Tutorial" style="text-decoration: underline; outline-style: none; outline-width: initial; outline-color: initial; color: rgb(0, 51, 153); "></a></span>When to Use the Visitor Pattern</span></div><div><span class="Apple-style-span" style="color: rgb(0, 0, 0); line-height: normal; font-family:verdana, sans-serif;font-size:11px;"><p class="docText" style="margin-top: 0px; margin-right: 0px; margin-bottom: 12px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12px; line-height: 1.2em; font-family: verdana, sans-serif; color: black; "><a name="You should"></a>You should consider using a Visitor pattern when you want to perform an operation on the data contained in a number of objects that have different interfaces. Visitors are also valuable if you must perform a number of unrelated operations on these classes. Visitors are a useful way to add function to class libraries or frameworks for which you either do not have the source or cannot change thesource for other technical (or political) reasons. In these latter cases, you simply subclass the classes of the framework and add the <span class="docEmphasis" style="font-style: italic; ">accept</span><a name="each subclass"></a> method to each subclass.</p></span></div><div><br /></div><div><span class="Apple-style-span" style="color: rgb(0, 0, 0); line-height: normal; font-family:verdana, sans-serif;font-size:11px;"><p class="docText" style="margin-top: 0px; margin-right: 0px; margin-bottom: 12px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12px; line-height: 1.2em; font-family: verdana, sans-serif; color: black; ">Let's consider a simple subset of the Employee problem discussed in the Composite pattern. We have a simple Employee object that maintains a record of the employee's name, salary, number of vacation days taken, and number of sick days taken. A simple version of this class is the following:</p><div class="docText" style="font-family: verdana, sans-serif; color: black; font-size: 12px; "><div class="codeSegmentsExpansionLinks"><span class="Apple-style-span" style="line-height: 14px; "><div class="codeSegmentsExpansionLinks">public class Employee { </div><div class="codeSegmentsExpansionLinks"><br /></div><div class="codeSegmentsExpansionLinks">private int </div><div class="codeSegmentsExpansionLinks">sickDays, vacDays; </div><div class="codeSegmentsExpansionLinks">private float Salary; </div><div class="codeSegmentsExpansionLinks">private String Name; </div><div class="codeSegmentsExpansionLinks">public Employee(String name, float salary, int vacdays,</div><div class="codeSegmentsExpansionLinks"><span class="Apple-tab-span" style="white-space:pre"> </span>int sickdays) </div><div class="codeSegmentsExpansionLinks">{ </div><div class="codeSegmentsExpansionLinks"><span class="Apple-tab-span" style="white-space:pre"> </span>vacDays = vacdays; </div><div class="codeSegmentsExpansionLinks"><span class="Apple-tab-span" style="white-space:pre"> </span>sickDays = sickdays; </div><div class="codeSegmentsExpansionLinks"><span class="Apple-tab-span" style="white-space:pre"> </span>Salary = salary </div><div class="codeSegmentsExpansionLinks"><span class="Apple-tab-span" style="white-space:pre"> </span>Name = name; </div><div class="codeSegmentsExpansionLinks">} </div><div class="codeSegmentsExpansionLinks"><br /></div><div class="codeSegmentsExpansionLinks">public String getName() { </div><div class="codeSegmentsExpansionLinks">return Name; </div><div class="codeSegmentsExpansionLinks">} </div><div class="codeSegmentsExpansionLinks"><br /></div><div class="codeSegmentsExpansionLinks">public int getSickdays() { </div><div class="codeSegmentsExpansionLinks">return sickDays; </div><div class="codeSegmentsExpansionLinks">} </div><div class="codeSegmentsExpansionLinks"><br /></div><div class="codeSegmentsExpansionLinks">public int getVacDays() { </div><div class="codeSegmentsExpansionLinks">return vacDays; } </div><div class="codeSegmentsExpansionLinks"><br /></div><div class="codeSegmentsExpansionLinks">public float getSalary() { return Salary; } </div><div class="codeSegmentsExpansionLinks">public void accept(Visitor v) { v.visit(this); }</div><div class="codeSegmentsExpansionLinks"><br /></div><div class="codeSegmentsExpansionLinks">} </div></span></div><div class="codeSegmentsExpansionLinks"><span class="Apple-style-span" style="line-height: 14px; ">Note that we have included the </span><span class="Apple-style-span" style="line-height: 14px; "><span class="docEmphasis" style="font-style: italic; ">accept</span></span><span class="Apple-style-span" style="line-height: 14px; "><a name="in this"></a></span><span class="Apple-style-span" style="line-height: 14px; "> method in this class. Now let's suppose that we want to prepare a report of the number of vacation days that all employees have taken so far this year. We could just write some code in the client to sum the results of calls to each Employee's </span><span class="Apple-style-span" style="line-height: 14px; "><span class="docEmphasis" style="font-style: italic; ">getVacDays</span></span><span class="Apple-style-span" style="line-height: 14px; "><a name="we could"></a></span><span class="Apple-style-span" style="line-height: 14px; ">function, or we could put this function into a Visitor.</span></div></div><p class="docText" style="margin-top: 0px; margin-right: 0px; margin-bottom: 12px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12px; line-height: 1.2em; font-family: verdana, sans-serif; color: black; "><a name="our base"></a>Since Java is a strongly typed language, our base Visitor class needs to have a suitable abstract <span class="docEmphasis" style="font-style: italic; ">visit</span><a name="kind of"></a> method for each kind of class in the program. In the following first example of our basic abstract visitor class, we have only Employees.</p><div class="docText" style="font-family: verdana, sans-serif; color: black; font-size: 12px; "><pre style="color: rgb(0, 0, 102); font-family: 'Courier New', Courier, monospace; font-size: 12px; ">public abstract class Visitor { </pre><pre style="color: rgb(0, 0, 102); font-family: 'Courier New', Courier, monospace; font-size: 12px; ">public abstract void visit(Employee emp); </pre><pre style="color: rgb(0, 0, 102); font-family: 'Courier New', Courier, monospace; font-size: 12px; ">public abstract void visit(Boss emp); </pre><pre style="color: rgb(0, 0, 102); font-family: 'Courier New', Courier, monospace; font-size: 12px; ">} </pre></div><br /><p class="docText" style="margin-top: 0px; margin-right: 0px; margin-bottom: 12px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12px; line-height: 1.2em; font-family: verdana, sans-serif; color: black; "><a name="no indication"></a>Notice that there is no indication what the Visitor does with each class in either the client classes or the abstract Visitor class. We can in fact write a whole lot of Visitors that do different things to the classes in our program. The first Visitor that we write sums the vacation data for all employees.</p><div class="docText" style="font-family: verdana, sans-serif; color: black; font-size: 12px; "><pre style="color: rgb(0, 0, 102); font-family: 'Courier New', Courier, monospace; font-size: 12px; ">public class VacationVisitor extends Visitor { </pre><pre style="color: rgb(0, 0, 102); font-family: 'Courier New', Courier, monospace; font-size: 12px; ">protected int total_days; </pre><pre style="color: rgb(0, 0, 102); font-family: 'Courier New', Courier, monospace; font-size: 12px; ">public VacationVisitor() { total_days = 0; } //-------------- </pre><pre style="color: rgb(0, 0, 102); font-family: 'Courier New', Courier, monospace; font-size: 12px; ">public void visit(Employee emp) { total_days += emp.getVacDays(); } //-------------- </pre><pre style="color: rgb(0, 0, 102); font-family: 'Courier New', Courier, monospace; font-size: 12px; ">public void visit(Boss boss) { total_days += boss.getVacDays(); } //-------------- </pre><pre style="color: rgb(0, 0, 102); font-family: 'Courier New', Courier, monospace; font-size: 12px; ">public int getTotalDays() { return total_days; } }</pre><div><br /></div></div></span></div><div><br /></div><div><a href="http://www.java2s.com/Tutorial/Java/0460__Design-Pattern/Visitoratypeofmultipledispatching.htm">http://www.java2s.com/Tutorial/Java/0460__Design-Pattern/Visitoratypeofmultipledispatching.htm</a></div><div><br /></div><div><br /></div></span>Shivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-40050574352107550872010-08-29T01:34:00.000-07:002010-08-29T06:13:17.135-07:00Adaptor vs Bridge pattern<span class="Apple-style-span" style="font-family: Georgia, 'Lucida Bright', 'Times New Roman', serif; color: rgb(51, 51, 51); line-height: 24px; "><h3 style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-weight: normal; font-style: inherit; font-size: 1.5em; font-family: Georgia, 'Lucida Bright', 'Times New Roman', serif; vertical-align: baseline; color: rgb(64, 64, 64); line-height: 1.2em; "><a href="http://sourcemaking.com/design_patterns/adapter/java/2">http://sourcemaking.com/design_patterns/adapter/java/2</a></h3><h3 style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-weight: normal; font-style: inherit; font-size: 1.5em; font-family: Georgia, 'Lucida Bright', 'Times New Roman', serif; vertical-align: baseline; color: rgb(64, 64, 64); line-height: 1.2em; ">Rules of thumb</h3><a id="permalink-11" href="http://sourcemaking.com/design_patterns/adapter#permalink-11" title="Permalink to this place" class="permalink" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: -45px; padding-top: 0px; padding-right: 3px; padding-bottom: 0px; padding-left: 3px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-weight: inherit; font-style: normal; font-size: 10px; font-family: Luicida, monospace; vertical-align: baseline; color: rgb(221, 221, 221); text-decoration: none; display: block; float: left; outline-width: 0px; outline-style: initial; outline-color: initial; ">11</a><ul class="addanchor" style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-weight: inherit; font-style: inherit; font-size: 16px; font-family: inherit; vertical-align: baseline; list-style-type: none; list-style-position: outside; "><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 1.5em; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-weight: inherit; font-style: inherit; font-size: 16px; font-family: inherit; vertical-align: baseline; background-image: url(http://sourcemaking.com/sites/all/themes/sm3/images/ild/dot.gif); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: 0px 0.5em; background-repeat: no-repeat no-repeat; ">Adapter makes things work after they’re designed; Bridge makes them work before they are.</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 1.5em; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-weight: inherit; font-style: inherit; font-size: 16px; font-family: inherit; vertical-align: baseline; background-image: url(http://sourcemaking.com/sites/all/themes/sm3/images/ild/dot.gif); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: 0px 0.5em; background-repeat: no-repeat no-repeat; ">Bridge is designed up-front to let the abstraction and the implementation vary independently. Adapter is retrofitted to make unrelated classes work together.</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 1.5em; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-weight: inherit; font-style: inherit; font-size: 16px; font-family: inherit; vertical-align: baseline; background-image: url(http://sourcemaking.com/sites/all/themes/sm3/images/ild/dot.gif); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: 0px 0.5em; background-repeat: no-repeat no-repeat; ">Adapter provides a different interface to its subject. Proxy provides the same interface. Decorator provides an enhanced interface.</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 1.5em; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-weight: inherit; font-style: inherit; font-size: 16px; font-family: inherit; vertical-align: baseline; background-image: url(http://sourcemaking.com/sites/all/themes/sm3/images/ild/dot.gif); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: 0px 0.5em; background-repeat: no-repeat no-repeat; ">Adapter is meant to change the interface of an existing object. Decorator enhances another object without changing its interface. Decorator is thus more transparent to the application than an adapter is. As a consequence, Decorator supports recursive composition, which isn’t possible with pure Adapters.</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 1.5em; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-weight: inherit; font-style: inherit; font-size: 16px; font-family: inherit; vertical-align: baseline; background-image: url(http://sourcemaking.com/sites/all/themes/sm3/images/ild/dot.gif); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: 0px 0.5em; background-repeat: no-repeat no-repeat; ">Facade defines a new interface, whereas Adapter reuses an old interface. Remember that Adapter makes two existing interfaces work together as opposed to defining an entirely new one.</li></ul><div><br /></div></span>Shivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0tag:blogger.com,1999:blog-5416346355071142326.post-82437954432137615922010-08-26T01:02:00.000-07:002010-08-26T04:23:32.699-07:00Ordered Message processing<div><a href="http://forums.sun.com/thread.jspa?threadID=5337515">http://forums.sun.com/thread.jspa?threadID=5337515</a></div><div><br /></div><div>Get messages in to queue. </div><div><br /></div><div>Check the version of message. If we receive (Out of sequence) higher version message ahead of original message, Then put same in Delay queue.</div><div><br /></div><div>If we receive initial message then figure out all higher versions from delay queue and then process it.</div><div><br /></div><div>1. Resequencer :</div><div><br /></div><div>The Resequencer can receive a stream of messages that may not arrive in order. The Resequencer contains in internal buffer to store out-of-sequence messages until a complete sequence is obtained. The in-sequence messages are then published to the output channel. It is important that the output channel is order-preserving so messages are guaranteed to arrive in order at the next component. Like most other routers, a Resequencer usually does not modify the message contents.</div><div><br /></div><div>From internet:</div><div>----------------------</div><div><br /></div><div>The only way to ensure that messages are processed in the same order as they are created is to ensure you only have one Message Producer and one Message Consumer.</div><div><br /></div><div><br /></div><div>Basically the messages will only maintain the order they are put on and taken off the queue, after that its a bun fight as to which Message Consumer runs. If you worried about performance then the only solution is to have multiple message streams, it's probably easier if I give an example.</div><div><br /></div><div><br /></div><div>I once developed an Order processor that required each order for the same customer to be processed sequencially so I create 10 queues (you can have any number) with 10 Message Consumers, one bound to each queue. Unfortunately you can still only have one Message Producer which does a hash on the Customer Id to ensure that all the messages for same Customers went onto the same queue.</div><div><br /></div>Shivnarayan R. Varmahttp://www.blogger.com/profile/02444625714407103871noreply@blogger.com0