<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3307744931779499285</id><updated>2012-02-02T20:17:55.427-08:00</updated><title type='text'>Java Programmer</title><subtitle type='html'>Prasanth Jalasutram's Blog</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default?start-index=101&amp;max-results=100'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>334</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-6992561155448688916</id><published>2012-01-05T21:30:00.001-08:00</published><updated>2012-01-05T21:36:21.527-08:00</updated><title type='text'></title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-6992561155448688916?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/6992561155448688916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=6992561155448688916' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/6992561155448688916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/6992561155448688916'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2012/01/blog-post.html' title=''/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-1890559258486250210</id><published>2012-01-05T21:30:00.000-08:00</published><updated>2012-01-05T21:37:37.071-08:00</updated><title type='text'>Implementing RESTful web services using Spring In Java</title><content type='html'>&lt;pre&gt;&lt;br /&gt;Couple of weeks back my collegue &lt;strong&gt;Phil M&lt;/strong&gt; implemented spring rest implementation in our project and i thought of sharing with everyone.&lt;br /&gt; &lt;br /&gt;We can use Spring APIs and annotations to build RESTful web services seamlessly.&lt;br /&gt; &lt;br /&gt;Other alternatives to implement RESTful web service is to use JSR 311(JAX-RS) and its implementation Jersey else we may also use Restlet framework.&lt;br /&gt; &lt;br /&gt;The Jaxb2Marshaller offers a classesToBeBound property, which allows you to set an array of classes to be supported by the marshaller. &lt;br /&gt; &lt;br /&gt;With the representational state transfer (REST) style architecture consists of client and server and requests and responses are built around the transfer of representations of resources. Resources are identified by global IDs that typically use a uniform resource identifier (URI). Client applications use HTTP &lt;br /&gt;methods (such as GET, POST, PUT, or DELETE) to manipulate the resource or collection of resources. &lt;br /&gt; &lt;br /&gt;For example, GET http://host/context/dept/12345 gets the particular department details with the ID 12345. The response representation could be XML or it could be a JSP/HTML page. &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Annotations such as @RequestMapping and @PathVariable, are used to support resource identification and URI mappings.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Please Note That I used Spring 3.0.4 Release.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Please find one example below&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Server Side&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;demo.domain.address.AddressSearch.java&lt;br /&gt; &lt;br /&gt;@XmlRootElement(name = &amp;quot;addresses&amp;quot;)&lt;br /&gt;public class AddressSearch  implements Serializable {&lt;br /&gt;                &lt;br /&gt;                private List&amp;lt;Address&amp;gt; addresses;&lt;br /&gt;                private String errorMessage;&lt;br /&gt;                private boolean validAddress;&lt;br /&gt; &lt;br /&gt;...implement get set methods&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;demo.domain.address.Address.java&lt;br /&gt; &lt;br /&gt;@XmlRootElement(name = &amp;quot;address&amp;quot;)&lt;br /&gt;public class Address implements Serializable {&lt;br /&gt;                &lt;br /&gt;                private String address1;&lt;br /&gt;                private String address2;&lt;br /&gt;                private String city;&lt;br /&gt;                private String county;&lt;br /&gt;                private String postalCode;&lt;br /&gt;ersion=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;&amp;lt;wls:weblogic-web-app xmlns:wls=&amp;quot;http://xmlns.oracle.com/weblogic/weblogic-web-app&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xsi:schemaLocation=&amp;quot;http://java.sun.com/xml/ns/javaee                                            http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd                                            http://xmlns.oracle.com/weblogic/weblogic-web-app                                            http://xmlns.oracle.com/weblogic/weblogic-web-app/1.2/weblogic-web-app.xsd&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;wls:context-root&amp;gt;addressTEST&amp;lt;/wls:context-root&amp;gt;&lt;br /&gt; &lt;br /&gt;&amp;lt;wls:session-descriptorostalCode, @PathVariable String address1) throws Exception &lt;br /&gt;                {&lt;br /&gt;                                AddressSearch addressSearch = addressService.getAddress(address1, postalCode);&lt;br /&gt;                                return new ModelAndView(XML_VIEW_NAME, &amp;quot;addresses&amp;quot;, addressSearch);&lt;br /&gt;                }&lt;br /&gt; &lt;br /&gt; .........&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;AddressServiceImpl.java&lt;br /&gt; &lt;br /&gt;@Service&lt;br /&gt;public class AddressServiceImpl implements IQASService {&lt;br /&gt; &lt;br /&gt;public AddressSearch getAddress(String houseNameOrNumber, String postalCode) {&lt;br /&gt;                                @SuppressWarnings(&amp;quot;rawtypes&amp;quot;)&lt;br /&gt;                                List addresses = new ArrayList();&lt;br /&gt;                                AddressSearch as = new AddressSearch();&lt;br /&gt;                                &lt;br /&gt;                                try {&lt;br /&gt;                                                addresses = ... your logic left to you how u get the data back maybe bring it from database or user another webservice etc...&lt;br /&gt;                                } catch (Exception e) {&lt;br /&gt;                                }&lt;br /&gt;                                &lt;br /&gt;                                return as; // please note we have some internal logic to populate the list into a business object.&lt;br /&gt;                }&lt;br /&gt;.....&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;web.xml&lt;br /&gt; &lt;br /&gt;&amp;lt;listener&amp;gt;&lt;br /&gt;    &amp;lt;listener-class&amp;gt;org.springframework.web.context.ContextLoaderListener&amp;lt;/listener-class&amp;gt;&lt;br /&gt; ramework.org/senera/beans&amp;quot;&lt;br /&gt;       xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:jaxrs=&amp;quot;http://cxf.apache.org/jaxrs&amp;quot;&lt;br /&gt;       xmlns:aop=&amp;quot;http://www.springframework.org/schema/aop&amp;quot;&lt;br /&gt;       xmlns:context=&amp;quot;http://www.springframework.org/schema/context&amp;quot;&lt;br /&gt;       xmlns:mvc=&amp;quot;http://www.springframework.org/schema/mvc&amp;quot;&lt;br /&gt;       xsi:schemaLocation=&amp;quot;&lt;br /&gt;       http://www.springframework.org/schema/beans &lt;br /&gt;       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd&lt;br /&gt;       http://www.springframework.org/schema/mvc &lt;br /&gt;       http://www.springframework.org/schema/mup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;&lt;br /&gt;  &amp;lt;/servlet&amp;gt;    &lt;br /&gt;  &amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;                &amp;lt;servlet-name&amp;gt;qas&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;                &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;  &amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;weblogic.xml&lt;br /&gt; &lt;br /&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;&amp;lt;wls:weblogic-web-app xmlns:wls=&amp;quot;http://xmlns.oracle.com/weblogic/weblogic-web-app&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xsi:schemaLocation=&amp;quot;http://java.sun.com/xml/ns/javaee                                            http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd                                            http://xmlns.oracle.com/weblogic/weblogic-web-app                                            http://xmlns.oracle.com/weblogic/weblogic-web-app/1.2/weblogic-web-app.xsd&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;wls:context-root&amp;gt;addressTEST&amp;lt;/wls:context-root&amp;gt;&lt;br /&gt; &lt;br /&gt;&amp;lt;wls:session-descriptor&amp;gt;&lt;br /&gt;                &amp;lt;wls:persistent-store-type&amp;gt;replicated_if_clustered&amp;lt;/wls:persistent-store-type&amp;gt;&lt;br /&gt;&amp;lt;/wls:session-descriptor&amp;gt;&lt;br /&gt; &lt;br /&gt;&amp;lt;/wls:weblogic-web-app&amp;gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;demo-service.xml&lt;br /&gt; &lt;br /&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;&amp;lt;beans xmlns=&amp;quot;http://www.springframework.org/schema/beans&amp;quot;&lt;br /&gt;                   xmlns:context=&amp;quot;http://www.springframework.org/schema/context&amp;quot;&lt;br /&gt;                   xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;                xsi:schemaLocation=&amp;quot;&lt;br /&gt;                http://www.springframework.org/schema/beans &lt;br /&gt;                http://www.springframework.org/schema/beans/spring-beans.xsd&lt;br /&gt;                http://www.springframework.org/schema/context &lt;br /&gt;                http://www.springframework.org/schema/context/spring-context-3.0.xsd&amp;quot;&amp;gt;&lt;br /&gt; &lt;br /&gt;                &amp;lt;bean id=&amp;quot;addressService&amp;quot; class=&amp;quot;demo.service.impl.AddressServiceImpl&amp;quot; /&amp;gt;&lt;br /&gt;                &lt;br /&gt;                &amp;lt;context:component-scan base-package=&amp;quot;demo.service&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/beans&amp;gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;demo-servlet.xml&lt;br /&gt; &lt;br /&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;&amp;lt;beans xmlns=&amp;quot;http://www.springframework.org/schema/beans&amp;quot;&lt;br /&gt;       xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:jaxrs=&amp;quot;http://cxf.apache.org/jaxrs&amp;quot;&lt;br /&gt;       xmlns:aop=&amp;quot;http://www.springframework.org/schema/aop&amp;quot;&lt;br /&gt;       xmlns:context=&amp;quot;http://www.springframework.org/schema/context&amp;quot;&lt;br /&gt;       xmlns:mvc=&amp;quot;http://www.springframework.org/schema/mvc&amp;quot;&lt;br /&gt;       xsi:schemaLocation=&amp;quot;&lt;br /&gt;       http://www.springframework.org/schema/beans &lt;br /&gt;       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd&lt;br /&gt;       http://www.springframework.org/schema/mvc &lt;br /&gt;       http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd&lt;br /&gt;       http://www.springframework.org/schema/context &lt;br /&gt;       http://www.springframework.org/schema/context/spring-context-3.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;      &lt;br /&gt;                &amp;lt;!-- Register the DefaultAnnotationHandlerMapping and AnnotationMethodHandlerAdapter --&amp;gt;&lt;br /&gt;                &amp;lt;mvc:annotation-driven /&amp;gt;         &lt;br /&gt; &lt;br /&gt;                &amp;lt;!-- Component scan for controller classes --&amp;gt;                        &lt;br /&gt;                &amp;lt;context:component-scan base-package=&amp;quot;demo.controller&amp;quot; /&amp;gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;   &amp;lt;!-- Defines the marshaller/unmarshaller that uses JAXB 2 to do the object XML mapping (OXM) --&amp;gt;&lt;br /&gt;                &amp;lt;bean id=&amp;quot;jaxbMarshaller&amp;quot; class=&amp;quot;org.springframework.oxm.jaxb.Jaxb2Marshaller&amp;quot;&amp;gt;&lt;br /&gt;                                &amp;lt;property name=&amp;quot;classesToBeBound&amp;quot;&amp;gt;&lt;br /&gt;                                                &amp;lt;list&amp;gt;&lt;br /&gt;                                                &amp;lt;value&amp;gt;demo.domain.address.AddressSearch&amp;lt;/value&amp;gt;&lt;br /&gt;                                                &amp;lt;/list&amp;gt;&lt;br /&gt;                                &amp;lt;/property&amp;gt;&lt;br /&gt;                &amp;lt;/bean&amp;gt; &lt;br /&gt;                                &lt;br /&gt;&amp;lt;!-- Defines an XML representation view that utilizes the Jaxb2Mashaller &lt;br /&gt;                                //XML_VIEW_NAME in controller equals address, which is the view name defined in demo-servlet.xml&lt;br /&gt; --&amp;gt;&lt;br /&gt;                &amp;lt;bean id=&amp;quot;addresses&amp;quot; class=&amp;quot;org.springframework.web.servlet.view.xml.MarshallingView&amp;quot;&amp;gt;&lt;br /&gt;                                &amp;lt;constructor-arg ref=&amp;quot;jaxbMarshaller&amp;quot; /&amp;gt;&lt;br /&gt;                &amp;lt;/bean&amp;gt;  &lt;br /&gt;                &lt;br /&gt;                &amp;lt;bean id=&amp;quot;viewResolver&amp;quot; class=&amp;quot;org.springframework.web.servlet.view.BeanNameViewResolver&amp;quot; /&amp;gt;&lt;br /&gt; &lt;br /&gt;   &lt;br /&gt;   &amp;lt;!-- &lt;br /&gt;                                 REST services can produce different representations according to the request.&lt;br /&gt;                                Spring 3 introduces a new view resolver called ContentNegotiatingViewResolver. &lt;br /&gt;                                It can switch view resolvers according to request content type (the Accept property in the request header) or URI suffix.&lt;br /&gt;   --&amp;gt;       &lt;br /&gt;                &amp;lt;bean class=&amp;quot;org.springframework.web.servlet.view.ContentNegotiatingViewResolver&amp;quot;&amp;gt;&lt;br /&gt;                                &amp;lt;property name=&amp;quot;mediaTypes&amp;quot;&amp;gt;&lt;br /&gt;                                    &amp;lt;map&amp;gt;&lt;br /&gt;                                        &amp;lt;entry key=&amp;quot;xml&amp;quot; value=&amp;quot;application/xml&amp;quot;/&amp;gt;&lt;br /&gt;                                        &amp;lt;entry key=&amp;quot;html&amp;quot; value=&amp;quot;text/html&amp;quot;/&amp;gt;&lt;br /&gt;                                    &amp;lt;/map&amp;gt;&lt;br /&gt;                                &amp;lt;/property&amp;gt;&lt;br /&gt;                                &amp;lt;property name=&amp;quot;viewResolvers&amp;quot;&amp;gt;&lt;br /&gt;                                    &amp;lt;list&amp;gt;&lt;br /&gt;                                      &amp;lt;!--  Defines a view resolver using the bean name that the user specifies&lt;br /&gt;                                                &lt;br /&gt;                                                    The definition shows support for handling two request content types: application/xml and text/html.&lt;br /&gt;                                                    The code also defines two view resolvers: one BeanNameViewResolver to handle application/xml &lt;br /&gt;                                                    and one UrlBasedViewResolver to handle text/html.&lt;br /&gt;                                                                                &lt;br /&gt;                                                   When we enter http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/&amp;lt;appcontext&amp;gt;/addressTEST/getAddress/{postalCode}/{address1} in the browser it requests text/html &lt;br /&gt;                                                   for the employees. Then UrlBasedViewResolver will take effect and Spring will pick /WEB-INF/jsp/addresses.jsp &lt;br /&gt;                                                   as its view. &lt;br /&gt;                                                   When you add the request header Accept:application/xml and invoke the request, the BeanNameViewResolver will take effect.&lt;br /&gt;                                                                                &lt;br /&gt;                                                   Per the code in AddressSearchController.java getAddressPcHouseNoName() method, it will use a view named addresses to represent, &lt;br /&gt;                                                   which is the JAXB 2 marshaller view that was defined.&lt;br /&gt;                                                                                                                                                                &lt;br /&gt;                                                --&amp;gt;&lt;br /&gt;                                        &amp;lt;bean class=&amp;quot;org.springframework.web.servlet.view.BeanNameViewResolver&amp;quot;/&amp;gt;&lt;br /&gt;                                        &amp;lt;bean id=&amp;quot;viewResolver&amp;quot; class=&amp;quot;org.springframework.web.servlet.view.UrlBasedViewResolver&amp;quot;&amp;gt;&lt;br /&gt;                                                                                &amp;lt;property name=&amp;quot;viewClass&amp;quot; value=&amp;quot;org.springframework.web.servlet.view.JstlView&amp;quot;/&amp;gt;&lt;br /&gt;                                                                                &amp;lt;property name=&amp;quot;prefix&amp;quot; value=&amp;quot;/WEB-INF/jsp/&amp;quot;/&amp;gt;&lt;br /&gt;                                                                                &amp;lt;property name=&amp;quot;suffix&amp;quot; value=&amp;quot;.jsp&amp;quot;/&amp;gt;&lt;br /&gt;                                                                &amp;lt;/bean&amp;gt;&lt;br /&gt;                                    &amp;lt;/list&amp;gt;&lt;br /&gt;                                &amp;lt;/property&amp;gt;&lt;br /&gt;                &amp;lt;/bean&amp;gt;&lt;br /&gt; &lt;br /&gt;&amp;lt;/beans&amp;gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Please note that all the code described above can be packaged into a seperate war file and make it available in the client side&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;JUNIT Client Side  :-&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Now below Junit Class will help us to do some Unit Testing of the Controller.&lt;br /&gt; &lt;br /&gt;TestAddressSearchController.java&lt;br /&gt; &lt;br /&gt;public class TestAddressSearchController extends TestBaseController {&lt;br /&gt;                &lt;br /&gt;                @Autowired&lt;br /&gt;                private RestTemplate restTemplate;&lt;br /&gt;                &lt;br /&gt;                private static final String BASE_URL = &amp;quot;http://localhost:7001/addressTEST&amp;quot;;&lt;br /&gt;                &lt;br /&gt;                @Override&lt;br /&gt;                public void setUp() throws Exception {&lt;br /&gt;                                super.setUp();&lt;br /&gt;                }&lt;br /&gt; &lt;br /&gt;                @Test&lt;br /&gt;                public void testGetAddressPcHouseNoName() {&lt;br /&gt;                                String url = BASE_URL + &amp;quot;/getAddress/{postalCode}/{address1}&amp;quot;;&lt;br /&gt;                                &lt;br /&gt;                                postalCode = &amp;quot;NE28 9TA&amp;quot;;&lt;br /&gt;                                address1 = &amp;quot;165&amp;quot;;&lt;br /&gt;                                 A//www.w3.org/2001/XMLSchema-instance&amp;quot; xsi:schemaLocation=&amp;quot;http://java.sun.com/xml/ns/javaee                                            http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd                                            http://xmlns.oracle.com/weblogic/weblogic-web-app                                            http://xmlns.oracle.com/weblogic/weblogic-web-app/1.2/weblogic-web-app.xsd&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;wls:context-root&amp;gt;addressTEST&amp;lt;/wls:context-root&amp;gt;&lt;br /&gt; &lt;br /&gt;&amp;lt;wls:session-descriptor8String, Class, String...)&lt;br /&gt;HEAD     headForHeaders(String, String...)&lt;br /&gt;OPTIONS             optionsForAllow(String, String...)&lt;br /&gt;POST     postForLocation(String, Object, String...)&lt;br /&gt;PUT        put(String, Object, String...)&lt;br /&gt; &lt;br /&gt;So to recap getForObject() will perform a GET, convert the HTTP response into an object type of your choice, and returns that object.&lt;br /&gt;*/&lt;br /&gt;                                AddressSearch as = restTemplate.getForObject(url,AddressSearch.class,mapParams);&lt;br /&gt;                                &lt;br /&gt;                                assertTrue(as.getAddresses().size() == 1);&lt;br /&gt;                 }             &lt;br /&gt;...            &lt;br /&gt;}&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;@RunWith(SpringJUnit4ClassRunner.class)&lt;br /&gt;@ContextConfiguration(locations={&lt;br /&gt;                                &amp;quot;classpath:spring/demo-service.xml&amp;quot;,                    &lt;br /&gt;                                &amp;quot;classpath:spring/demo-servlet.xml&amp;quot;,&lt;br /&gt;                                &amp;quot;classpath:spring/demo-test-rest.xml&amp;quot;})&lt;br /&gt; &lt;br /&gt;public class TestBaseController {&lt;br /&gt;                &lt;br /&gt;    protected MockHttpServletRequest request;&lt;br /&gt;    protected MockHttpServletResponse response;&lt;br /&gt;    protected MockHttpSession session;&lt;br /&gt;    &lt;br /&gt;    protected final static String GET = &amp;quot;GET&amp;quot;;&lt;br /&gt;    protected final static String POST = &amp;quot;POST&amp;quot;;&lt;br /&gt;    &lt;br /&gt;    @Before&lt;br /&gt;    public void setUp() throws Exception {&lt;br /&gt;        this.request = new MockHttpServletRequest();&lt;br /&gt;        this.response = new MockHttpServletResponse();&lt;br /&gt;        this.session = new MockHttpSession();&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    @After&lt;br /&gt;    public void tearDown() throws Exception {&lt;br /&gt; &lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;demo-test-rest.xml&lt;br /&gt; &lt;br /&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;&amp;lt;beans xmlns=&amp;quot;http://www.springframework.org/schema/beans&amp;quot;&lt;br /&gt;       xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:jaxrs=&amp;quot;http://cxf.apache.org/jaxrs&amp;quot;&lt;br /&gt;       xmlns:aop=&amp;quot;http://www.springframework.org/schema/aop&amp;quot;&lt;br /&gt;       xmlns:context=&amp;quot;http://www.springframework.org/schema/context&amp;quot;&lt;br /&gt;       xmlns:mvc=&amp;quot;http://www.springframework.org/schema/mvc&amp;quot;&lt;br /&gt;       xsi:schemaLocation=&amp;quot;&lt;br /&gt;       http://www.springframework.org/schema/beans &lt;br /&gt;       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd&lt;br /&gt;       http://www.springframework.org/schema/mvc &lt;br /&gt;       http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd&lt;br /&gt;       http://www.springframework.org/schema/context &lt;br /&gt;       http://www.springframework.org/schema/context/spring-context-3.0.xsd&amp;quot;&amp;gt;&lt;br /&gt; &lt;br /&gt;                &amp;lt;!-- Rest Template --&amp;gt;&lt;br /&gt; &lt;br /&gt;  &amp;lt;!--&lt;br /&gt;                &lt;br /&gt;   The RestTemplate is the central Spring class for client-side HTTP access.&lt;br /&gt;   RestTemplate is thread-safe once constructed, and that you can use callbacks to customize its operations.&lt;br /&gt;   &lt;br /&gt;  --&amp;gt;&lt;br /&gt;   &lt;br /&gt;   &amp;lt;bean id=&amp;quot;restTemplate&amp;quot; class=&amp;quot;org.springframework.web.client.RestTemplate&amp;quot;&amp;gt;  &lt;br /&gt;                                &amp;lt;property name=&amp;quot;messageConverters&amp;quot; ref=&amp;quot;messageConverter&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;/bean&amp;gt; &lt;br /&gt; &lt;br /&gt;    &amp;lt;!--&lt;br /&gt;      HttpMessageConverters Objects passed to and returned from the methods getForObject(), postForLocation(), and put() and are converted to HTTP requests and from HTTP responses by HttpMessageConverters. &lt;br /&gt;    --&amp;gt;&lt;br /&gt; &lt;br /&gt;    &amp;lt;bean id=&amp;quot;messageConverter&amp;quot; class=&amp;quot;org.springframework.http.converter.xml.MarshallingHttpMessageConverter&amp;quot;&amp;gt;&lt;br /&gt;                &amp;lt;property name=&amp;quot;marshaller&amp;quot; ref=&amp;quot;jaxbMarshaller&amp;quot; /&amp;gt;&lt;br /&gt;        &amp;lt;property name=&amp;quot;unmarshaller&amp;quot; ref=&amp;quot;jaxbMarshaller&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;/bean&amp;gt;&lt;br /&gt; &lt;br /&gt;  &lt;br /&gt;&amp;lt;/beans&amp;gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Hope this example helps.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;strong&gt;References&lt;/strong&gt; &lt;br /&gt;http://blog.springsource.org/2009/03/27/rest-in-spring-3-resttemplate/&lt;br /&gt;http://www.ibm.com/developerworks/web/library/wa-spring3webserv/&lt;br /&gt;http://static.springsource.org/spring-ws/site/reference/html/oxm.html&lt;br /&gt;http://static.springsource.org/spring/docs/3.0.0.M3/spring-framework-reference/html/ch18s02.html&lt;br /&gt;http://en.wikipedia.org/wiki/Representational_State_Transfer&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-1890559258486250210?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/1890559258486250210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=1890559258486250210' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/1890559258486250210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/1890559258486250210'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2012/01/implementing-restful-web-services-using.html' title='Implementing RESTful web services using Spring In Java'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-7239769823745354692</id><published>2011-08-08T11:41:00.000-07:00</published><updated>2011-08-08T12:47:07.055-07:00</updated><title type='text'>Working With JUnit And Mock Objects</title><content type='html'>&lt;pre&gt; &lt;br /&gt;Introduction: &lt;br /&gt; &lt;br /&gt;EasyMock works by implementing the proxy pattern. When you create a mock object, it creates a proxy object that takes the place of the real object. The proxy object gets it's definition from the interface you pass when creating the mock. We will define what methods are called and their returns from within our test method itself.&lt;br /&gt; &lt;br /&gt;When creating a mock object, there are two types, a mock and a strict mock. In either case, our test will tell the mock object what method calls to expect and what to return when they occur. A basic mock will not care about the order of the execution of the methods. A strict mock, on the other hand, is order specific. Your test will fail if the methods are executed out of order on a strict mock. &lt;br /&gt; &lt;br /&gt;In this example, we will be using a strict mock.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;     private LoginServiceImpl service;&lt;br /&gt;     private UserDAO mockDao;&lt;br /&gt; &lt;br /&gt;	  @Override&lt;br /&gt;	     public void setUp() {&lt;br /&gt;	          service = new LoginServiceImpl();&lt;br /&gt;	          mockDao = createStrictMock(UserDAO.class);&lt;br /&gt;	          service.setUserDAO(mockDao);&lt;br /&gt;	     }&lt;br /&gt; &lt;br /&gt;	   User results = new User();&lt;br /&gt;           String userName = &amp;quot;testUserName&amp;quot;;&lt;br /&gt;           String password = &amp;quot;testPassword&amp;quot;;&lt;br /&gt;           String passwordHash =  &amp;quot;someunecryptedpass&amp;quot;;&lt;br /&gt;           expect(mockDao.loadByUsernameAndPassword(eq(userName), eq(passwordHash))).andReturn(results);&lt;br /&gt; &lt;br /&gt;           replay(mockDao);&lt;br /&gt;           assertTrue(service.login(userName, password));&lt;br /&gt;           verify(mockDao);&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;expect(&lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;method&lt;/font&gt; &lt;font color="#2040a0"&gt;name&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&amp;gt;)&lt;br /&gt;This is a call to the static method EasyMock.expect. It tells your mock object to expect the method loadByUsernameAndPassword to be called.&lt;br /&gt; &lt;br /&gt;eq(userName), eq(passwordHash)&lt;br /&gt; &lt;br /&gt;When EasyMock compares the values passed to the method call, it does and == comparison. The eq comparator in this case will compare the contents of the string using it's .equals method. &lt;br /&gt; &lt;br /&gt;.andReturn(results);&lt;br /&gt;This tells our mock object what to return after this method is called.&lt;br /&gt; &lt;br /&gt;We can as well use expectAndReturn() single method call instead of calling expect() and andReturn() method seperatly.&lt;br /&gt; &lt;br /&gt;The final three lines are the ones that do the testing work. replay(mockDao); tells EasyMock &amp;quot;We're done declaring our expectations. It's now time to run what we told you&amp;quot;. &lt;br /&gt; &lt;br /&gt;Finally, verify(mockDao); tells EasyMock to validate that all of the expected method calls were executed and in the correct order.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Example 1:&lt;br /&gt; &lt;br /&gt;Let's say we have a PageCachingFilter which will add few response headers to remove caching.&lt;br /&gt; &lt;br /&gt; public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException&lt;br /&gt;  {&lt;br /&gt;    HttpServletResponse sResponse = (HttpServletResponse)response;&lt;br /&gt; &lt;br /&gt;    sResponse.addHeader(&amp;quot;Cache-Control&amp;quot;,&amp;quot;no-cache&amp;quot;);&lt;br /&gt;    sResponse.addHeader(&amp;quot;Pragma&amp;quot;,&amp;quot;no-cache&amp;quot;);&lt;br /&gt; &lt;br /&gt;    chain.doFilter(request, response);&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;Our TestCase will look something like below&lt;br /&gt; &lt;br /&gt; public void testCacheHeaders() &lt;br /&gt;  {&lt;br /&gt;    // Create mock controllers&lt;br /&gt;    MockControl requestControl = MockControl.createControl(HttpServletRequest.class);&lt;br /&gt;    MockControl responseControl = MockControl.createControl(HttpServletResponse.class);&lt;br /&gt;    MockControl filterChainControl = MockControl.createControl(FilterChain.class);&lt;br /&gt; &lt;br /&gt;    // Create the mock objects&lt;br /&gt;    HttpServletRequest request = (HttpServletRequest)requestControl.getMock();&lt;br /&gt;    HttpServletResponse response = (HttpServletResponse)responseControl.getMock();&lt;br /&gt;    FilterChain filterChain = (FilterChain)filterChainControl.getMock();&lt;br /&gt;    &lt;br /&gt;    // Record the expectation&lt;br /&gt;    response.addHeader(&amp;quot;Cache-Control&amp;quot;,&amp;quot;no-cache&amp;quot;);&lt;br /&gt;    response.addHeader(&amp;quot;Pragma&amp;quot;,&amp;quot;no-cache&amp;quot;);&lt;br /&gt;    &lt;br /&gt;    try&lt;br /&gt;    {&lt;br /&gt;      filterChain.doFilter(request, response);&lt;br /&gt;    }&lt;br /&gt;    catch(Exception e)&lt;br /&gt;    {&lt;br /&gt;      fail(e.getMessage());&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    // Stop recording&lt;br /&gt;    requestControl.replay();&lt;br /&gt;    responseControl.replay();&lt;br /&gt;    filterChainControl.replay();&lt;br /&gt; &lt;br /&gt;    // Execute the test&lt;br /&gt;    Filter filter = new PageCachingFilter();&lt;br /&gt;    try&lt;br /&gt;    {&lt;br /&gt;      filter.init(null);&lt;br /&gt;      filter.doFilter(request, response, filterChain);&lt;br /&gt;      filter.destroy();&lt;br /&gt;    }&lt;br /&gt;    catch(Exception e)&lt;br /&gt;    {&lt;br /&gt;      fail(e.getMessage());&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    // Verify the expectations against the test&lt;br /&gt;    requestControl.verify();&lt;br /&gt;    responseControl.verify();&lt;br /&gt;    filterChainControl.verify();&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;IMPORTANT NOTE 1: Please note that spring helps a bit further and eases mock object creation of HttpServletRequest,Response and FilterChain objects.&lt;br /&gt; &lt;br /&gt;Hence ideally in a single step we can create the mock object unlike the 2 steps described above.&lt;br /&gt; &lt;br /&gt;import org.easymock.MockControl;&lt;br /&gt;import org.springframework.mock.web.MockFilterChain;&lt;br /&gt;import org.springframework.mock.web.MockFilterConfig;&lt;br /&gt;import org.springframework.mock.web.MockHttpServletRequest;&lt;br /&gt;import org.springframework.mock.web.MockHttpServletResponse;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;   public void setUp()&lt;br /&gt;  {&lt;br /&gt;    filter = new UserFilter();&lt;br /&gt;    request = new MockHttpServletRequest();&lt;br /&gt;    response = new MockHttpServletResponse();&lt;br /&gt;    session = new MockHttpSession();&lt;br /&gt;    chain = new MockFilterChain();&lt;br /&gt;    &lt;br /&gt;    Principal principal = new Principal() {&lt;br /&gt;      public String getName()&lt;br /&gt;      {&lt;br /&gt;        return &amp;quot;TheName&amp;quot;;&lt;br /&gt;      }};&lt;br /&gt;    request.setUserPrincipal(principal);&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;IMPORTANT NOTE 2: We can also set the return value of a mock object using setReturnValue() method.&lt;br /&gt; &lt;br /&gt;Example:&lt;br /&gt; &lt;br /&gt;    User user = new User();&lt;br /&gt;    user.setName(&amp;quot;TheName&amp;quot;);&lt;br /&gt; &lt;br /&gt;MockControl userServiceControl = MockControl.createControl(IUserService.class);&lt;br /&gt;userServiceControl.setReturnValue(user);&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;IMPORTANT NOTE 3:&lt;br /&gt; &lt;br /&gt;Below code will show us how to create a Mock ServletContext which can accept the file names which we normally mention in web.xml as a parameter to get loaded.&lt;br /&gt; &lt;br /&gt;   servletContext = new MockServletContext();&lt;br /&gt;   String configFiles = &amp;quot;/WEB-INF/config/framework/config.xml &amp;quot;;&lt;br /&gt; &lt;br /&gt;   servletContext.addInitParameter(&amp;quot;CONFIG_FILE&amp;quot;, configFiles);&lt;br /&gt; &lt;br /&gt;Below code will show us how to create a StaticWebApplicationContext and attach it to the created ServletContext.&lt;br /&gt; &lt;br /&gt;Servlet Context is known can be created from the above code.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;    StaticWebApplicationContext applicationContext = new StaticWebApplicationContext();&lt;br /&gt;    applicationContext.setServletContext(servletContext);&lt;br /&gt;    applicationContext.refresh();&lt;br /&gt;    applicationContext.start();&lt;br /&gt;    &lt;br /&gt;    servletContext.setAttribute(XmlWebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, applicationContext);&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;IMPORTANT NOTE 4:   &lt;br /&gt; &lt;br /&gt;If we want to test spring 3.0 front-end controllers below is sample code&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;import org.junit.Test;&lt;br /&gt;import org.springframework.web.servlet.ModelAndView;&lt;br /&gt; &lt;br /&gt;import static org.junit.Assert.assertNotNull;&lt;br /&gt; &lt;br /&gt;public class TestHomeController extends BaseTestController {&lt;br /&gt;    private HomeController controller;&lt;br /&gt;    private final static String URI = &amp;quot;/home.html&amp;quot;;&lt;br /&gt; &lt;br /&gt;    @Test&lt;br /&gt;    public void testHomeController() throws Exception {&lt;br /&gt;        request.setRequestURI(URI);&lt;br /&gt;        this.controller = new HomeController();&lt;br /&gt;        ModelAndView view = controller.home(request,response);&lt;br /&gt;        assertNotNull(view);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;    &lt;br /&gt; &lt;br /&gt;@RunWith(SpringJUnit4ClassRunner.class)&lt;br /&gt;@ContextConfiguration(locations={    &lt;br /&gt;    &amp;quot;classpath:spring/demo-servlet.xml&amp;quot;})&lt;br /&gt; &lt;br /&gt;@TransactionConfiguration(transactionManager = &amp;quot;transactionManager&amp;quot;)&lt;br /&gt; &lt;br /&gt;public class BaseTestController {&lt;br /&gt;    protected MockHttpServletRequest request;&lt;br /&gt;    protected MockHttpServletResponse response;&lt;br /&gt;    protected MockHttpSession session;&lt;br /&gt; &lt;br /&gt;    @Before&lt;br /&gt;    public void setUp() throws Exception {&lt;br /&gt;        System.out.println(&amp;quot;Doing set-up&amp;quot;);&lt;br /&gt;        this.request = new MockHttpServletRequest();&lt;br /&gt;        this.response = new MockHttpServletResponse();&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    @After&lt;br /&gt;    public void tearDown() throws Exception {&lt;br /&gt;        System.out.println(&amp;quot;Doing tearDown&amp;quot;);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;demo-servlet.xml&lt;br /&gt; &lt;br /&gt;&lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;?xml&lt;/font&gt; &lt;font color="#2040a0"&gt;version=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;1.0&amp;quot;&lt;/font&gt; &lt;font color="#2040a0"&gt;encoding=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;UTF-8&amp;quot;&lt;/font&gt;&lt;font color="#2040a0"&gt;?&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt; &lt;br /&gt;&lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;beans&lt;/font&gt; &lt;font color="#2040a0"&gt;xmlns=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;http://www.springframework.org/schema/beans&amp;quot;&lt;/font&gt;&lt;font color="#2040a0"&gt; &lt;br /&gt;	xmlns:xsi=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;/font&gt;&lt;font color="#2040a0"&gt; &lt;br /&gt;	xmlns:context=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;http://www.springframework.org/schema/context&amp;quot;&lt;/font&gt;&lt;font color="#2040a0"&gt; &lt;br /&gt;	xmlns:mvc=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;http://www.springframework.org/schema/mvc&amp;quot;&lt;/font&gt;&lt;font color="#2040a0"&gt; &lt;br /&gt;	xsi:schemaLocation=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd&lt;br /&gt;		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd&lt;br /&gt;		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strongC/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;property&lt;/font&gt; &lt;font color="#2040a0"&gt;name=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;maxUploadSize&amp;quot;&lt;/font&gt; &lt;font color="#2040a0"&gt;value=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;10000000&amp;quot;&lt;/font&gt;&lt;font color="#2040a0"&gt;/&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt; &lt;br /&gt;  	&lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;/bean&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt; &lt;br /&gt;  &lt;br /&gt;	....&lt;br /&gt;	&lt;br /&gt;  &lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;/beans&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;References&lt;br /&gt; &lt;br /&gt;httstrong&gt;&lt;/font&gt; &lt;br /&gt;    	&lt;font color="#444444"&gt;&amp;lt;!-- Maximum file size in bytes. --&amp;gt;&lt;/font&gt; &lt;br /&gt;    	&lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;property&lt;/font&gt; &lt;font color="#2040a0"&gt;name=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;maxUploadSize&amp;quot;&lt;/font&gt; &lt;font color="#2040a0"&gt;value=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;10000000&amp;quot;&lt;/font&gt;&lt;font color="#2040a0"&gt;/&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt; &lt;br /&gt;  	&lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;/bean&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt; &lt;br /&gt;  &lt;br /&gt;	....&lt;br /&gt;	&lt;br /&gt;  &lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;/beans&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;References&lt;br /&gt; &lt;br /&gt;http://www.michaelminella.com/testing/unit-testing-with-junit-and-easymock.html&lt;br /&gt;http://www.easymock.org/Downloads.html&lt;br /&gt;http://easymock.org/api/easymock/2.4/index.html?org/easymock/MockControl.html&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-7239769823745354692?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/7239769823745354692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=7239769823745354692' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/7239769823745354692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/7239769823745354692'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2011/08/working-with-junit-and-mock-objects.html' title='Working With JUnit And Mock Objects'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-9046309126810049930</id><published>2011-08-03T11:17:00.000-07:00</published><updated>2011-08-03T11:18:02.420-07:00</updated><title type='text'>IMPLEMENTING AJAX FUNCTIONALITY USING JQUERY + JSON FRAMEWORK</title><content type='html'>&lt;pre&gt; &lt;br /&gt;In our old project we are using json framework to achieve ajax functionality.&lt;br /&gt; &lt;br /&gt;PLEASE DOWNLOAD THE REQUIRED JSON JAR FILE . WE ARE USING &amp;quot;json-rpc-1.0.jar&amp;quot; JAR FILE.&lt;br /&gt; &lt;br /&gt;I want to share the code which can be useful for the readers.&lt;br /&gt; &lt;br /&gt;Let us say we want to re-populate the select option dropdown when user changes a value in the existing dropdown.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;In the html form contains below code:&lt;br /&gt; &lt;br /&gt;    &amp;lt;select id=&amp;quot;demoSelect&amp;quot; name=&amp;quot;demoSelect&amp;quot;&amp;gt;&lt;br /&gt;          &amp;lt;option value=&amp;quot;1&amp;quot;&amp;gt;One&amp;lt;/option&amp;gt;&lt;br /&gt;          &amp;lt;option value=&amp;quot;2&amp;quot;&amp;gt;Two&amp;lt;/option&amp;gt;&lt;br /&gt;          &amp;lt;/select&amp;gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;JavaScript Code implementing json looks like below&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; $(&amp;quot;select[name^='demoSelect']&amp;quot;).bind('change', function(event) &lt;br /&gt; { &lt;br /&gt;   //var e = document.getElementById(&amp;quot;demoSelect&amp;quot;);  //Get the actual element &lt;br /&gt;   var id = event.target.id;                   //Get the id of the LOV that was changed&lt;br /&gt;   var e = document.getElementById(id);  //Get the actual element&lt;br /&gt;      var i = e.selectedIndex;&lt;br /&gt;      var t = e.options[i].text; //Get the text&lt;br /&gt;      alert(&amp;quot;came here....&amp;quot; + t);&lt;br /&gt;      &lt;br /&gt;      var frmdata = {taskStatusTypeName : t} ;&lt;br /&gt;      var myurl = 'demoServlet'; &lt;br /&gt;      alert(myurl);&lt;br /&gt;      var options = {&lt;br /&gt;                     type: 'GET',&lt;br /&gt;                      url: myurl,&lt;br /&gt;                      data: frmdata,&lt;br /&gt;                      cache: false,&lt;br /&gt;                      dataType: 'json',&lt;br /&gt;                      error: function(xhr, textStatus,errorThrown){&lt;br /&gt;                              alert('An error occurred! ' + errorThrown) ;&lt;br /&gt;                      },&lt;br /&gt;                      success: function(data,textStatus){&lt;br /&gt;                       alert(&amp;quot;came here..........success&amp;quot;);&lt;br /&gt;                          var elName = '#demoSelect';&lt;br /&gt;                          var reasonSelect = $(elName).children().remove().end() ;&lt;br /&gt;                          for (var i=0;i&amp;lt;data.length;i++){&lt;br /&gt;                              if (i==0){ &lt;br /&gt;                                  reasonSelect.append('&amp;lt;option value=&amp;quot;' + data[i].key + '&amp;quot; selected=&amp;quot;true&amp;quot;&amp;gt;' + data[i].value + '&amp;lt;/option&amp;gt;') ;&lt;br /&gt; /*                                      var noteName = '#newNote_' + index ;&lt;br /&gt;                                  var noteVal = data[i].value ;&lt;br /&gt;                                  $(noteName).val(noteVal) ;&lt;br /&gt; */                                      &lt;br /&gt;                              }&lt;br /&gt;                              else{&lt;br /&gt;                                  reasonSelect.append('&amp;lt;option value=&amp;quot;' + data[i].key + '&amp;quot;&amp;gt;' + data[i].value + '&amp;lt;/option&amp;gt;') ;&lt;br /&gt;                              }&lt;br /&gt;                          }&lt;br /&gt;                          $(elName).focus();     //Set focus to the new note input&lt;br /&gt;                      }&lt;br /&gt;                  } ;                &lt;br /&gt;      $.ajax(options) ;  &lt;br /&gt;      &lt;br /&gt;  }); &lt;br /&gt; &lt;br /&gt;As correctly observed it tries to call the underlying backend servlet to fetch the data.&lt;br /&gt; &lt;br /&gt;Our servlet code goes like this and donot forget to add the entries in web.xml !&lt;br /&gt; &lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.util.Iterator;&lt;br /&gt;import java.util.List;&lt;br /&gt;import javax.servlet.ServletConfig;&lt;br /&gt;import javax.servlet.ServletException;&lt;br /&gt;import javax.servlet.http.HttpServlet;&lt;br /&gt;import javax.servlet.http.HttpServletRequest;&lt;br /&gt;import javax.servlet.http.HttpServletResponse;&lt;br /&gt;import org.apache.log4j.Logger;&lt;br /&gt;import org.json.JSONArray;&lt;br /&gt;import org.json.JSONObject;&lt;br /&gt; &lt;br /&gt;public class DemoJsonServiceServlet extends HttpServlet{&lt;br /&gt; &lt;br /&gt;    private static final String CONTENT_TYPE = &amp;quot;application/json&amp;quot; ;&lt;br /&gt;    &lt;br /&gt;    public DemoJsonServiceServlet() {&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    private static Logger _logger = Logger.getLogger(DemoJsonServiceServlet.class);&lt;br /&gt;      &lt;br /&gt;    public void init(ServletConfig config) throws ServletException&lt;br /&gt;    {&lt;br /&gt;      super.init(config);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException&lt;br /&gt;    {&lt;br /&gt;        String taskStatusTypeName = request.getParameter(&amp;quot;taskStatusTypeName&amp;quot;);&lt;br /&gt;        response.setContentType(CONTENT_TYPE) ;&lt;br /&gt;        response.setHeader(&amp;quot;Cache-Control&amp;quot;,&amp;quot;no-cache&amp;quot;) ;&lt;br /&gt;        response.getWriter().write(getJson(request,taskStatusTypeName)) ;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    private String getJson(HttpServletRequest request,String taskStatusTypeName) throws ServletException {&lt;br /&gt;        &lt;br /&gt;        if (_logger.isDebugEnabled()){&lt;br /&gt;            _logger.debug(&amp;quot;Task status type &amp;quot; + taskStatusTypeName) ;&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt;        try {&lt;br /&gt;            JSONArray jsonKeyValues = new JSONArray() ;&lt;br /&gt;               for(int i=0;i&amp;lt;10;i++) {&lt;br /&gt;                JSONObject jsonObj = new JSONObject() ;&lt;br /&gt;                jsonObj.put(&amp;quot;key&amp;quot;,&amp;quot;key&amp;quot; +i) ;&lt;br /&gt;                jsonObj.put(&amp;quot;value&amp;quot;,&amp;quot;value&amp;quot; +i) ;&lt;br /&gt;                jsonKeyValues.put(jsonObj) ;&lt;br /&gt;               }&lt;br /&gt;            return jsonKeyValues.toString() ;&lt;br /&gt;        } catch (Exception e) {&lt;br /&gt;            _logger.error(&amp;quot;Error in Json service&amp;quot; + e.getMessage()) ;&lt;br /&gt;            throw new ServletException(e);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;Hope this explanation helps.&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-9046309126810049930?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/9046309126810049930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=9046309126810049930' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/9046309126810049930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/9046309126810049930'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2011/08/implementing-ajax-functionality-using.html' title='IMPLEMENTING AJAX FUNCTIONALITY USING JQUERY + JSON FRAMEWORK'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-7476146232914684010</id><published>2011-07-21T08:06:00.000-07:00</published><updated>2011-07-21T11:51:18.699-07:00</updated><title type='text'>Handling Forbidden Pages in SpringMVC3.0 using annotations</title><content type='html'>&lt;pre&gt; &lt;br /&gt;@Controller&lt;br /&gt;@RequestMapping(value = &amp;quot;/Login/**&amp;quot;)&lt;br /&gt;public class LoginController extends CommonController {&lt;br /&gt; public static final String loginError = &amp;quot;/Login/LoginError&amp;quot;;&lt;br /&gt; &lt;br /&gt; @RequestMapping(value=&amp;quot;/Login.html&amp;quot;)&lt;br /&gt; public String login() {&lt;br /&gt;  return Globals.login;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; @RequestMapping(value=&amp;quot;/LoginError.html&amp;quot;)&lt;br /&gt; public String loginError() {&lt;br /&gt;  return loginError;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;Tiles Definition For &amp;quot;/accessDenied&amp;quot;&lt;br /&gt; &lt;br /&gt;&amp;lt;definition name=&amp;quot;/accessDenied&amp;quot; extends=&amp;quot;base&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;put-attribute name=&amp;quot;subtitle&amp;quot; value=&amp;quot;Login Error&amp;quot; /&amp;gt;         &lt;br /&gt; &amp;lt;put-attribute name=&amp;quot;menu&amp;quot;     value=&amp;quot;/WEB-INF/tiles/templates/loginMenu.jsp&amp;quot; /&amp;gt;&lt;br /&gt;        &amp;lt;put-attribute name=&amp;quot;body&amp;quot;     value=&amp;quot;/WEB-INF/jsp/accessDenied/showAccessDenied.jsp&amp;quot; /&amp;gt;   &lt;br /&gt;&amp;lt;/definition&amp;gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;showAccessDenied.jsp&lt;br /&gt; &lt;br /&gt;&amp;lt;p&amp;gt;&lt;br /&gt;Access to the specified resource has been denied.&lt;br /&gt; &lt;br /&gt;&amp;lt;br /&amp;gt;&lt;br /&gt;  Click &amp;lt;a href=&amp;quot;&amp;lt;c:url value=''/&amp;gt;&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;u&amp;gt;here&amp;lt;/u&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/a&amp;gt; to try again.&lt;br /&gt;   &lt;br /&gt;&amp;lt;/p&amp;gt;&lt;br /&gt; &lt;br /&gt;&amp;lt;!--&lt;br /&gt;For reasons why we set response status=200 refer below link &lt;br /&gt;http://www.coderanch.com/t/365499/Servlets/java/web-xml-error-page-not &lt;br /&gt; --&amp;gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Hope this explanation helps.&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-7476146232914684010?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/7476146232914684010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=7476146232914684010' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/7476146232914684010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/7476146232914684010'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2011/07/handling-forbidden-pages-in-springmvc30_21.html' title='Handling Forbidden Pages in SpringMVC3.0 using annotations'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-8503223880774537293</id><published>2011-07-06T11:26:00.000-07:00</published><updated>2011-07-06T11:30:06.155-07:00</updated><title type='text'>Spring Security3.5 Authorisation Cache Problem</title><content type='html'>&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;In Our project We are using spring security 3.5 for authorisation purpose only.&lt;br /&gt;&lt;br /&gt;We use j2ee container for authentication and donot rely on spring for authentication and logout purposes.&lt;br /&gt;&lt;br /&gt;Today we faced a cache problem with regards to authentication details.&lt;br /&gt;&lt;br /&gt;For the first time if user A logs in his authentication details i.e his associated roles(granted authorities) are correctlly populated.&lt;br /&gt;&lt;br /&gt;But when we try to logout user A and make user B to login due to some cache problem user A authentication details i.e his associated roles(granted authorities) are getting displayed when user B login in  :-(  &lt;br /&gt;&lt;br /&gt;It means for spring though user B is logged in it still assumes user A is logged in which means the logout functionality went for a toss and we are not properly implemented the logout functionality.&lt;br /&gt;&lt;br /&gt;As said earlier we are not replying on spring for built-in logout functionality.&lt;br /&gt;&lt;br /&gt;We have resolved the problem by mimcing the spring builtin logout functionality and changing code when required especially &amp;quot;filterProcessesUrl&amp;quot; variable in LogoutFilter class. Initially it will have value something like &amp;quot;j_securitycheck_logout&amp;quot; but we changed to our project specific logout URL.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Just pasting code for the benefit of other developers.&lt;br /&gt;&lt;br /&gt;spring security.xml&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!--&lt;br /&gt;  - Sample namespace-based configuration&lt;br /&gt;  -&lt;br /&gt;  --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;b:beans xmlns=&amp;quot;http://www.springframework.org/schema/security&amp;quot;&lt;br /&gt;    xmlns:b=&amp;quot;http://www.springframework.org/schema/beans&amp;quot;&lt;br /&gt;    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;    xsi:schemaLocation=&amp;quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd&lt;br /&gt;                        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;global-method-security pre-post-annotations=&amp;quot;enabled&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;/global-method-security&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;http auto-config=&amp;quot;true&amp;quot; use-expressions=&amp;quot;true&amp;quot; access-denied-page=&amp;quot;/accessDenied/showAccessDenied.html&amp;quot;&amp;gt;&lt;br /&gt;   &amp;lt;/http&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- &lt;br /&gt;The final servlet filter in the default Spring Security filter chain,&lt;br /&gt;FilterSecurityInterceptor, is the filter responsible for coming up with a&lt;br /&gt;decision on whether or not a particular request will be accepted or denied. At this&lt;br /&gt;point the FilterSecurityInterceptor filter is invoked, the principal has already&lt;br /&gt;been authenticated, so the system knows that they are valid users.&lt;br /&gt; --&amp;gt;&lt;br /&gt; &lt;br /&gt;    &amp;lt;b:bean id=&amp;quot;filterChainProxy&amp;quot; class=&amp;quot;org.springframework.security.web.FilterChainProxy&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;filter-chain-map path-type=&amp;quot;ant&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;filter-chain pattern=&amp;quot;/**&amp;quot; filters=&amp;quot;exceptionTranslationFilter,securityContextPersistenceFilter,j2eePreAuthFilter,fsi,logoutFilter&amp;quot;/&amp;gt;  &lt;br /&gt;        &amp;lt;/filter-chain-map&amp;gt;&lt;br /&gt;    &amp;lt;/b:bean&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;b:bean id=&amp;quot;securityContextPersistenceFilter&amp;quot; class=&amp;quot;org.springframework.security.web.context.SecurityContextPersistenceFilter&amp;quot;&amp;gt;&lt;br /&gt;     &amp;lt;b:property name=&amp;quot;forceEagerSessionCreation&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;/b:bean&amp;gt;&lt;br /&gt;    &lt;br /&gt;     &amp;lt;b:bean id=&amp;quot;logoutFilter&amp;quot; class=&amp;quot;demo.LogoutFilterWrapper&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;/b:bean&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;authentication-manager alias=&amp;quot;authenticationManager&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;authentication-provider ref='preAuthenticatedAuthenticationProvider'/&amp;gt;&lt;br /&gt;    &amp;lt;/authentication-manager&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;b:bean id=&amp;quot;preAuthenticatedAuthenticationProvider&amp;quot; class=&amp;quot;org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;b:property name=&amp;quot;preAuthenticatedUserDetailsService&amp;quot; ref=&amp;quot;preAuthenticatedUserDetailsService&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;/b:bean&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;b:bean id=&amp;quot;preAuthenticatedUserDetailsService&amp;quot;&lt;br /&gt;            class=&amp;quot;org.springframework.security.web.authentication.preauth.PreAuthenticatedGrantedAuthoritiesUserDetailsService&amp;quot;/&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;     &amp;lt;b:bean id=&amp;quot;j2eePreAuthFilter&amp;quot; class=&amp;quot;org.springframework.security.web.authentication.preauth.j2ee.J2eePreAuthenticatedProcessingFilter&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;b:property name=&amp;quot;authenticationManager&amp;quot; ref=&amp;quot;authenticationManager&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;b:property name=&amp;quot;authenticationDetailsSource&amp;quot; ref=&amp;quot;authenticationDetailsSource&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;b:property name=&amp;quot;continueFilterChainOnUnsuccessfulAuthentication&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;  &amp;lt;/b:bean&amp;gt;&lt;br /&gt;  &lt;br /&gt;  &amp;lt;b:bean id=&amp;quot;authenticationDetailsSource&amp;quot; class=&amp;quot;org.springframework.security.web.authentication.preauth.j2ee.J2eeBasedPreAuthenticatedWebAuthenticationDetailsSource&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;b:property name=&amp;quot;mappableRolesRetriever&amp;quot; ref=&amp;quot;j2eeMappableRolesRetriever&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;b:property name=&amp;quot;userRoles2GrantedAuthoritiesMapper&amp;quot; ref=&amp;quot;j2eeUserRoles2GrantedAuthoritiesMapper&amp;quot;/&amp;gt;&lt;br /&gt;  &amp;lt;/b:bean&amp;gt;&lt;br /&gt;  &lt;br /&gt;  &amp;lt;b:bean id=&amp;quot;j2eeMappableRolesRetriever&amp;quot; class=&amp;quot;org.springframework.security.web.authentication.preauth.j2ee.WebXmlMappableAttributesRetriever&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;!-- &amp;lt;property name=&amp;quot;webXmlInputStream&amp;quot;&amp;gt;&amp;lt;bean factory-bean=&amp;quot;webXmlResource&amp;quot; factory-method=&amp;quot;getInputStream&amp;quot;/&amp;gt;  &lt;br /&gt;    &amp;lt;/property&amp;gt; --&amp;gt;&lt;br /&gt;  &amp;lt;/b:bean&amp;gt;&lt;br /&gt;  &lt;br /&gt;   &amp;lt;b:bean id=&amp;quot;webXmlResource&amp;quot; class=&amp;quot;org.springframework.web.context.support.ServletContextResource&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;b:constructor-arg ref=&amp;quot;servletContext&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;b:constructor-arg value=&amp;quot;/WEB-INF/web.xml&amp;quot;/&amp;gt;&lt;br /&gt;  &amp;lt;/b:bean&amp;gt;&lt;br /&gt;  &lt;br /&gt;  &amp;lt;b:bean id=&amp;quot;servletContext&amp;quot; class=&amp;quot;org.springframework.web.context.support.ServletContextFactoryBean&amp;quot;/&amp;gt;&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;   &amp;lt;b:bean id=&amp;quot;j2eeUserRoles2GrantedAuthoritiesMapper&amp;quot; class=&amp;quot;org.springframework.security.core.authority.mapping.SimpleAttributes2GrantedAuthoritiesMapper&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;b:property name=&amp;quot;attributePrefix&amp;quot; value=&amp;quot;dummy&amp;quot;/&amp;gt;&lt;br /&gt;  &amp;lt;/b:bean&amp;gt;&lt;br /&gt;  &lt;br /&gt;  &amp;lt;!-- AffirmativeBased== If any voter grants access, access is immediately granted,regardless of previous denials. --&amp;gt;&lt;br /&gt;  &lt;br /&gt;  &amp;lt;!-- decisionVoters property =&amp;gt; This property is auto-configured until we declare our own AccessDecisionManager. The default&lt;br /&gt;  AccessDecisionManager requires us to declare the list of voters who are consulted&lt;br /&gt;  to arrive at the authentication decisions. --&amp;gt;&lt;br /&gt;  &lt;br /&gt;     &amp;lt;b:bean id=&amp;quot;httpRequestAccessDecisionManager&amp;quot; class=&amp;quot;org.springframework.security.access.vote.AffirmativeBased&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;b:property name=&amp;quot;allowIfAllAbstainDecisions&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;        &lt;br /&gt;        &amp;lt;b:property name=&amp;quot;decisionVoters&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;b:list&amp;gt;&lt;br /&gt;                &amp;lt;b:ref bean=&amp;quot;roleVoter&amp;quot;/&amp;gt;&lt;br /&gt;                &amp;lt;b:ref bean=&amp;quot;webExpressionVoter&amp;quot;/&amp;gt;&lt;br /&gt;            &amp;lt;/b:list&amp;gt;&lt;br /&gt;        &amp;lt;/b:property&amp;gt;&lt;br /&gt;    &amp;lt;/b:bean&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;!-- roleVoter ==&amp;gt;&lt;br /&gt;   Checks that the user has the&lt;br /&gt;GrantedAuthority matching&lt;br /&gt;the declared role. Expects the&lt;br /&gt;access attribute to define&lt;br /&gt;a comma-delimited list of&lt;br /&gt;GrantedAuthority names. The&lt;br /&gt;ROLE_ prefix is expected, but&lt;br /&gt;optionally configurable.&lt;br /&gt;&lt;br /&gt;webExpressionVoter=&amp;gt; SpEL handling is supplied by a different Voter&lt;br /&gt;implementation, o.s.s.web.access.expression.WebExpressionVoter,&lt;br /&gt;which understands how to evaluate the SpEL expressions.&lt;br /&gt;&lt;br /&gt;The &amp;lt;filter-security-metadata-source&amp;gt; element is responsible for&lt;br /&gt;configuring the SecurityMetadataSource implementation used by the&lt;br /&gt;FilterSecurityInterceptor, including the URL declarations and roles&lt;br /&gt;required to access them.&lt;br /&gt; --&amp;gt;&lt;br /&gt;   &amp;lt;b:bean id=&amp;quot;roleVoter&amp;quot; class=&amp;quot;org.springframework.security.access.vote.RoleVoter&amp;quot;/&amp;gt;&lt;br /&gt;   &amp;lt;b:bean id=&amp;quot;webExpressionVoter&amp;quot; class=&amp;quot;org.springframework.security.web.access.expression.WebExpressionVoter&amp;quot;/&amp;gt;&lt;br /&gt;  &lt;br /&gt;   &amp;lt;b:bean id=&amp;quot;fsi&amp;quot; class=&amp;quot;org.springframework.security.web.access.intercept.FilterSecurityInterceptor&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;b:property name=&amp;quot;authenticationManager&amp;quot; ref=&amp;quot;authenticationManager&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;b:property name=&amp;quot;accessDecisionManager&amp;quot; ref=&amp;quot;httpRequestAccessDecisionManager&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;b:property name=&amp;quot;securityMetadataSource&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;filter-invocation-definition-source use-expressions=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;             &amp;lt;!-- &amp;lt;intercept-url pattern=&amp;quot;/login.jsp*&amp;quot; access=&amp;quot;IS_AUTHENTICATED_ANONYMOUSLY&amp;quot;/&amp;gt;  &lt;br /&gt;               &amp;lt;intercept-url pattern=&amp;quot;/css/**&amp;quot; filters=&amp;quot;none&amp;quot;/&amp;gt;&lt;br /&gt;      &amp;lt;intercept-url pattern=&amp;quot;/login.jsp*&amp;quot; filters=&amp;quot;none&amp;quot;/&amp;gt;&lt;br /&gt;      &amp;lt;intercept-url pattern=&amp;quot;/**&amp;quot; access=&amp;quot;hasRole('sls')&amp;quot;/&amp;gt;&lt;br /&gt;               --&amp;gt;&lt;br /&gt;                &lt;br /&gt;            &amp;lt;/filter-invocation-definition-source&amp;gt;&lt;br /&gt;        &amp;lt;/b:property&amp;gt;&lt;br /&gt;    &amp;lt;/b:bean&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;   &amp;lt;!-- ExceptionTranslationFilter, one of&lt;br /&gt;the last servlet filters in the standard Spring Security filter chain, is responsible for&lt;br /&gt;examining exceptions thrown during the authentication and authorization processes&lt;br /&gt;(in FilterSecurityInterceptor, the culmination of the filter chain), and reacting&lt;br /&gt;appropriately to them. --&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;b:bean id=&amp;quot;exceptionTranslationFilter&amp;quot; class=&amp;quot;org.springframework.security.web.access.ExceptionTranslationFilter&amp;quot;&amp;gt;&lt;br /&gt;   &amp;lt;b:property name=&amp;quot;authenticationEntryPoint&amp;quot; ref=&amp;quot;authenticationEntryPoint&amp;quot;/&amp;gt;&lt;br /&gt;   &amp;lt;b:property name=&amp;quot;accessDeniedHandler&amp;quot; ref=&amp;quot;accessDeniedHandler&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;/b:bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;b:bean id=&amp;quot;authenticationEntryPoint&amp;quot; class=&amp;quot;org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;b:property name=&amp;quot;loginFormUrl&amp;quot; value=&amp;quot;/login.jsp&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;/b:bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;b:bean id=&amp;quot;accessDeniedHandler&amp;quot;&lt;br /&gt;     class=&amp;quot;org.springframework.security.web.access.AccessDeniedHandlerImpl&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;b:property name=&amp;quot;errorPage&amp;quot; value=&amp;quot;/accessDenied/showAccessDenied.html&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;/b:bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;b:bean id=&amp;quot;securityContextHolderAwareRequestFilter&amp;quot; class=&amp;quot;org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter&amp;quot;/&amp;gt;  &lt;br /&gt;    &lt;br /&gt; &amp;lt;/b:beans&amp;gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;LogoutFilterWrapper.java&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import javax.annotation.PostConstruct;&lt;br /&gt;import javax.servlet.Filter;&lt;br /&gt;import javax.servlet.FilterChain;&lt;br /&gt;import javax.servlet.FilterConfig;&lt;br /&gt;import javax.servlet.ServletException;&lt;br /&gt;import javax.servlet.ServletRequest;&lt;br /&gt;import javax.servlet.ServletResponse;&lt;br /&gt;import javax.servlet.http.HttpServletRequest;&lt;br /&gt;import javax.servlet.http.HttpServletResponse;&lt;br /&gt;&lt;br /&gt;import org.apache.log4j.Logger;&lt;br /&gt;import org.springframework.security.core.Authentication;&lt;br /&gt;import org.springframework.security.core.context.SecurityContextHolder;&lt;br /&gt;import org.springframework.security.web.DefaultRedirectStrategy;&lt;br /&gt;import org.springframework.security.web.RedirectStrategy;&lt;br /&gt;import org.springframework.security.web.authentication.logout.LogoutHandler;&lt;br /&gt;import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;&lt;br /&gt;import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class LogoutFilterWrapper implements Filter {&lt;br /&gt; &lt;br /&gt; public static final Logger LOGGER = Logger.getLogger(LogoutFilterWrapper.class);&lt;br /&gt;&lt;br /&gt; private String logoutSuccessfulUrl=&amp;quot;/Login/Login&amp;quot;;&lt;br /&gt;&lt;br /&gt; private String logoutSuccessfulInactivityUrl=&amp;quot;/Login/Login&amp;quot;;&lt;br /&gt;&lt;br /&gt; private LogoutFilter filter;&lt;br /&gt;&lt;br /&gt; protected void initialize() {&lt;br /&gt;  LOGGER.debug(&amp;quot;LogoutFilterWrapper:Entered into initialize method&amp;quot;);&lt;br /&gt;  final SecurityContextLogoutHandler context = new SecurityContextLogoutHandler();&lt;br /&gt;  context.setInvalidateHttpSession( true );&lt;br /&gt;  this.filter =new LogoutFilter( new CustomLogoutSuccessHandler(), new LogoutHandler[] { context } );&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void setLogoutSuccessfulUrl(String inUrl ) {&lt;br /&gt;  this.logoutSuccessfulUrl = inUrl;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void setLogoutSuccessfulUrlInactivity(String inUrl ) { &lt;br /&gt;  this.logoutSuccessfulInactivityUrl = inUrl; &lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public final void init(FilterConfig inFilterConfig ) throws ServletException {&lt;br /&gt;  LOGGER.debug(&amp;quot;LogoutFilterWrapper:Entered into init method&amp;quot;);&lt;br /&gt;  initialize();&lt;br /&gt;  this.filter.init(inFilterConfig);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public void destroy() {&lt;br /&gt;  this.filter.destroy();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public void doFilter(ServletRequest arg0, ServletResponse arg1,&lt;br /&gt;   FilterChain arg2) throws IOException, ServletException {&lt;br /&gt;  LOGGER.debug(&amp;quot;LogoutFilterWrapper:Entered into doFilter method&amp;quot;);&lt;br /&gt;  &lt;br /&gt;  if(this.filter==null) {&lt;br /&gt;   initialize();&lt;br /&gt;  }&lt;br /&gt;  this.filter.doFilter( arg0, arg1, arg2 );&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;   /**&lt;br /&gt;       * Success Handler&lt;br /&gt;       */&lt;br /&gt; private class CustomLogoutSuccessHandler implements LogoutSuccessHandler {&lt;br /&gt;&lt;br /&gt;  private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void onLogoutSuccess(HttpServletRequest request,&lt;br /&gt;    HttpServletResponse response, Authentication authentication)&lt;br /&gt;  throws IOException, ServletException {&lt;br /&gt;&lt;br /&gt;   String targetUrl = &amp;quot;&amp;quot;;&lt;br /&gt;   &lt;br /&gt;   SecurityContextHolder.getContext().setAuthentication(null);&lt;br /&gt;   &lt;br /&gt;   request.getSession().removeAttribute(Globals.USER);&lt;br /&gt;   request.getSession().invalidate();&lt;br /&gt;    &lt;br /&gt;   redirectStrategy.sendRedirect( request, response, targetUrl );&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;LogoutFilter.java&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.util.Arrays;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import javax.servlet.FilterChain;&lt;br /&gt;import javax.servlet.ServletException;&lt;br /&gt;import javax.servlet.ServletRequest;&lt;br /&gt;import javax.servlet.ServletResponse;&lt;br /&gt;import javax.servlet.http.HttpServletRequest;&lt;br /&gt;import javax.servlet.http.HttpServletResponse;&lt;br /&gt;&lt;br /&gt;import org.apache.log4j.Logger;&lt;br /&gt;import org.springframework.security.core.Authentication;&lt;br /&gt;import org.springframework.security.core.context.SecurityContextHolder;&lt;br /&gt;import org.springframework.security.web.authentication.logout.LogoutHandler;&lt;br /&gt;import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;&lt;br /&gt;import org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler;&lt;br /&gt;import org.springframework.security.web.util.UrlUtils;&lt;br /&gt;import org.springframework.util.Assert;&lt;br /&gt;import org.springframework.util.StringUtils;&lt;br /&gt;import org.springframework.web.filter.GenericFilterBean;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Logs a principal out.&lt;br /&gt; * &amp;lt;p&amp;gt;&lt;br /&gt; * Polls a series of {@link LogoutHandler}s. The handlers should be specified in the order they are required.&lt;br /&gt; * Generally you will want to call logout handlers &amp;lt;code&amp;gt;TokenBasedRememberMeServices&amp;lt;/code&amp;gt; and&lt;br /&gt; * &amp;lt;code&amp;gt;SecurityContextLogoutHandler&amp;lt;/code&amp;gt; (in that order).&lt;br /&gt; * &amp;lt;p&amp;gt;&lt;br /&gt; * After logout, a redirect will be performed to the URL determined by either the configured&lt;br /&gt; * &amp;lt;tt&amp;gt;LogoutSuccessHandler&amp;lt;/tt&amp;gt; or the &amp;lt;tt&amp;gt;logoutSuccessUrl&amp;lt;/tt&amp;gt;, depending on which constructor was used.&lt;br /&gt; *&lt;br /&gt; * @author Ben Alex&lt;br /&gt; */&lt;br /&gt;public class LogoutFilter extends GenericFilterBean {&lt;br /&gt;&lt;br /&gt; public static final Logger LOGGER = Logger.getLogger(LogoutFilter.class);&lt;br /&gt; &lt;br /&gt;    //~ Instance fields ================================================================================================&lt;br /&gt;&lt;br /&gt;    private String filterProcessesUrl = &amp;quot;/LogOut.html&amp;quot;;&lt;br /&gt;    private List&amp;lt;LogoutHandler&amp;gt; handlers;&lt;br /&gt;    private LogoutSuccessHandler logoutSuccessHandler;&lt;br /&gt;&lt;br /&gt;    //~ Constructors ===================================================================================================&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Constructor which takes a &amp;lt;tt&amp;gt;LogoutSuccessHandler&amp;lt;/tt&amp;gt; instance to determine the target destination&lt;br /&gt;     * after logging out. The list of &amp;lt;tt&amp;gt;LogoutHandler&amp;lt;/tt&amp;gt;s are intended to perform the actual logout functionality&lt;br /&gt;     * (such as clearing the security context, invalidating the session, etc.).&lt;br /&gt;     */&lt;br /&gt;    public LogoutFilter(LogoutSuccessHandler logoutSuccessHandler,LogoutHandler... handlers) {&lt;br /&gt;        Assert.notEmpty(handlers, &amp;quot;LogoutHandlers are required&amp;quot;);&lt;br /&gt;        this .handlers = Arrays.asList(handlers);&lt;br /&gt;        Assert.notNull(logoutSuccessHandler,&lt;br /&gt;                &amp;quot;logoutSuccessHandler cannot be null&amp;quot;);&lt;br /&gt;        this .logoutSuccessHandler = logoutSuccessHandler;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public LogoutFilter(String logoutSuccessUrl,LogoutHandler... handlers) {&lt;br /&gt;        Assert.notEmpty(handlers, &amp;quot;LogoutHandlers are required&amp;quot;);&lt;br /&gt;        this .handlers = Arrays.asList(handlers);&lt;br /&gt;        Assert.isTrue(!StringUtils.hasLength(logoutSuccessUrl)&lt;br /&gt;                || UrlUtils.isValidRedirectUrl(logoutSuccessUrl),&lt;br /&gt;                logoutSuccessUrl + &amp;quot; isn't a valid redirect URL&amp;quot;);&lt;br /&gt;        SimpleUrlLogoutSuccessHandler urlLogoutSuccessHandler = new SimpleUrlLogoutSuccessHandler();&lt;br /&gt;        if (StringUtils.hasText(logoutSuccessUrl)) {&lt;br /&gt;            urlLogoutSuccessHandler&lt;br /&gt;                    .setDefaultTargetUrl(logoutSuccessUrl);&lt;br /&gt;        }&lt;br /&gt;        logoutSuccessHandler = urlLogoutSuccessHandler;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    //~ Methods ========================================================================================================&lt;br /&gt;&lt;br /&gt;    public void doFilter(ServletRequest req, ServletResponse res,&lt;br /&gt;            FilterChain chain) throws IOException, ServletException {&lt;br /&gt;        HttpServletRequest request = (HttpServletRequest) req;&lt;br /&gt;        HttpServletResponse response = (HttpServletResponse) res;&lt;br /&gt;&lt;br /&gt;        LOGGER.debug(&amp;quot;LogoutFilter doFilter entered&amp;quot;);&lt;br /&gt;        &lt;br /&gt;        if (requiresLogout(request, response)) {&lt;br /&gt;         &lt;br /&gt;            Authentication auth = SecurityContextHolder.getContext()&lt;br /&gt;                    .getAuthentication();&lt;br /&gt;            &lt;br /&gt;            LOGGER.debug(&amp;quot;Logging out user '&amp;quot; + auth + &amp;quot;' and transferring to logout destination&amp;quot;);&lt;br /&gt;&lt;br /&gt;            for (LogoutHandler handler : handlers) {&lt;br /&gt;                handler.logout(request, response, auth);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            logoutSuccessHandler.onLogoutSuccess(request, response,auth);&lt;br /&gt;&lt;br /&gt;            return;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        chain.doFilter(request, response);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Allow subclasses to modify when a logout should take place.&lt;br /&gt;     *&lt;br /&gt;     * @param request the request&lt;br /&gt;     * @param response the response&lt;br /&gt;     *&lt;br /&gt;     * @return &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; if logout should occur, &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; otherwise&lt;br /&gt;     */&lt;br /&gt;    protected boolean requiresLogout(HttpServletRequest request,&lt;br /&gt;            HttpServletResponse response) {&lt;br /&gt;        String uri = request.getRequestURI();&lt;br /&gt;        return uri.endsWith(request.getContextPath() + filterProcessesUrl);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setFilterProcessesUrl(String filterProcessesUrl) {&lt;br /&gt;        Assert.isTrue(UrlUtils.isValidRedirectUrl(filterProcessesUrl),&lt;br /&gt;                filterProcessesUrl + &amp;quot; isn't a valid value for&amp;quot;&lt;br /&gt;                        + &amp;quot; 'filterProcessesUrl'&amp;quot;);&lt;br /&gt;        this .filterProcessesUrl = filterProcessesUrl;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    protected String getFilterProcessesUrl() {&lt;br /&gt;        return filterProcessesUrl;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For logout we use common spring action calls &lt;br /&gt;&lt;br /&gt;our jsp contain the call :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;a href=&amp;quot;&amp;lt;c:url value='/LogOut.html'/&amp;gt;&amp;quot;&amp;gt;Log Out&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;br /&gt;@RequestMapping(value=&amp;quot;/LogOut.html&amp;quot;) &lt;br /&gt; public ModelAndView logOut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {&lt;br /&gt;  &lt;br /&gt;  SecurityContextHolder.getContext().setAuthentication(null);&lt;br /&gt;  &lt;br /&gt;  request.getSession().removeAttribute(Globals.USER);&lt;br /&gt;  request.getSession().invalidate();    &lt;br /&gt;     return new ModelAndView(Globals.login);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-8503223880774537293?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/8503223880774537293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=8503223880774537293' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/8503223880774537293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/8503223880774537293'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2011/07/spring-security35-authorisation-cache.html' title='Spring Security3.5 Authorisation Cache Problem'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-1894666944212951181</id><published>2011-06-23T12:53:00.000-07:00</published><updated>2011-06-23T13:29:22.592-07:00</updated><title type='text'>Spring Security3.0.x Authorisation Only using J2eeBasedPreAuthenticatedWebAuthenticationDetailsSource</title><content type='html'>&lt;pre&gt;&lt;br /&gt;We have a requirement in which we use weblogic container for authentication and we are planning to use spring security for authorisation only.&lt;br /&gt;&lt;br /&gt;We are using weblogic11g app server and spring security 3.5 for achieving the same.&lt;br /&gt;&lt;br /&gt;Below code can help to map j2ee user roles to Spring GrantedAuthorities.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I even posted my question in below website to clear off my doubts.&lt;br /&gt;&lt;br /&gt;http://forum.springsource.org/showthread.php?110397-How-to-achieve-Spring-Security3.5-for-authorisation-only-and-not-for-authentication&lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;Main things required in your web.xml&lt;br /&gt;-------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&amp;lt;web-app xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns=&amp;quot;http://java.sun.com/xml/ns/javaee&amp;quot; xmlns:web=&amp;quot;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&amp;quot; xsi:schemaLocation=&amp;quot;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&amp;quot; id=&amp;quot;WebApp_ID&amp;quot; version=&amp;quot;2.5&amp;quot;&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;context-param&amp;gt;&lt;br /&gt;        &amp;lt;param-name&amp;gt;contextConfigLocation&amp;lt;/param-name&amp;gt;&lt;br /&gt;        &amp;lt;param-value&amp;gt;&lt;br /&gt;            /WEB-INF/applicationContext-security.xml&lt;br /&gt;            /WEB-INF/servlets.xml&lt;br /&gt;            /WEB-INF/views.xml&lt;br /&gt;            &lt;br /&gt;        &amp;lt;/param-value&amp;gt;&lt;br /&gt;    &amp;lt;/context-param&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;servlet&amp;gt;&lt;br /&gt;        &amp;lt;servlet-name&amp;gt;springSecurityPreAuth&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;        &amp;lt;servlet-class&amp;gt;org.springframework.web.servlet.DispatcherServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;        &amp;lt;init-param&amp;gt;  &lt;br /&gt;          &amp;lt;param-name&amp;gt;contextConfigLocation&amp;lt;/param-name&amp;gt;  &lt;br /&gt;          &amp;lt;param-value&amp;gt;&lt;br /&gt;            /WEB-INF/servlets.xml&lt;br /&gt;            /WEB-INF/views.xml&lt;br /&gt;          &amp;lt;/param-value&amp;gt;  &lt;br /&gt;        &amp;lt;/init-param&amp;gt;  &lt;br /&gt;        &amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;&lt;br /&gt;      &amp;lt;/servlet&amp;gt;&lt;br /&gt;      &amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;        &amp;lt;servlet-name&amp;gt;springSecurityPreAuth&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;        &amp;lt;url-pattern&amp;gt;*.html&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;  &amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;      &amp;lt;listener&amp;gt;&lt;br /&gt;          &amp;lt;listener-class&amp;gt;org.springframework.web.context.ContextLoaderListener&amp;lt;/listener-class&amp;gt;&lt;br /&gt;    &amp;lt;/listener&amp;gt;&lt;br /&gt;    &lt;br /&gt; &amp;lt;filter&amp;gt;&lt;br /&gt;        &amp;lt;filter-name&amp;gt;springSecurityFilterChain&amp;lt;/filter-name&amp;gt;&lt;br /&gt;        &amp;lt;filter-class&amp;gt;org.springframework.web.filter.DelegatingFilterProxy&amp;lt;/filter-class&amp;gt;&lt;br /&gt;    &amp;lt;/filter&amp;gt;&lt;br /&gt; &lt;br /&gt;  &amp;lt;filter-mapping&amp;gt;&lt;br /&gt;      &amp;lt;filter-name&amp;gt;springSecurityFilterChain&amp;lt;/filter-name&amp;gt;&lt;br /&gt;      &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;   &amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;   &lt;br /&gt;&amp;lt;security-constraint&amp;gt;&lt;br /&gt;  &amp;lt;web-resource-collection&amp;gt;&lt;br /&gt;    &amp;lt;web-resource-name&amp;gt;Secure TestWeb Access&amp;lt;/web-resource-name&amp;gt;&lt;br /&gt;    &amp;lt;url-pattern&amp;gt;*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;  &amp;lt;/web-resource-collection&amp;gt;&lt;br /&gt;  &amp;lt;auth-constraint&amp;gt;&lt;br /&gt;    &amp;lt;role-name&amp;gt;testWebApp&amp;lt;/role-name&amp;gt;&lt;br /&gt;  &amp;lt;/auth-constraint&amp;gt;&lt;br /&gt;  &amp;lt;user-data-constraint&amp;gt;&lt;br /&gt;    &amp;lt;transport-guarantee&amp;gt;NONE&amp;lt;/transport-guarantee&amp;gt;&lt;br /&gt;  &amp;lt;/user-data-constraint&amp;gt;&lt;br /&gt;&amp;lt;/security-constraint&amp;gt;&lt;br /&gt;&amp;lt;login-config&amp;gt;&lt;br /&gt;  &amp;lt;auth-method&amp;gt;BASIC&amp;lt;/auth-method&amp;gt;&lt;br /&gt;&amp;lt;/login-config&amp;gt;&lt;br /&gt;&amp;lt;security-role&amp;gt;&lt;br /&gt;  &amp;lt;role-name&amp;gt;testWebApp&amp;lt;/role-name&amp;gt;&lt;br /&gt;&amp;lt;/security-role&amp;gt;&lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;weblogic.xml&lt;br /&gt;-------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;&amp;lt;wls:weblogic-web-app xmlns:wls=&amp;quot;http://xmlns.oracle.com/weblogic/weblogic-web-app&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xsi:schemaLocation=&amp;quot;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.2/weblogic-web-app.xsd&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;wls:weblogic-version&amp;gt;10.3.4&amp;lt;/wls:weblogic-version&amp;gt;&lt;br /&gt;    &amp;lt;wls:context-root&amp;gt;commonloginweblogic&amp;lt;/wls:context-root&amp;gt;&lt;br /&gt;    &lt;br /&gt;   &amp;lt;wls:security-role-assignment&amp;gt;&lt;br /&gt;   &amp;lt;wls:role-name&amp;gt;testWebApp&amp;lt;/wls:role-name&amp;gt; &lt;br /&gt;   &amp;lt;wls:principal-name&amp;gt;testWebApp&amp;lt;/wls:principal-name&amp;gt;&lt;br /&gt; &amp;lt;/wls:security-role-assignment&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/wls:weblogic-web-app&amp;gt;&lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Your applicationContext-security.xml code goes like this&lt;br /&gt;-------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!--&lt;br /&gt;  - Sample namespace-based configuration&lt;br /&gt;  -&lt;br /&gt;  --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;b:beans xmlns=&amp;quot;http://www.springframework.org/schema/security&amp;quot;&lt;br /&gt;    xmlns:b=&amp;quot;http://www.springframework.org/schema/beans&amp;quot;&lt;br /&gt;    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;    xsi:schemaLocation=&amp;quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd&lt;br /&gt;                        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;global-method-security pre-post-annotations=&amp;quot;enabled&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;/global-method-security&amp;gt;&lt;br /&gt;    &lt;br /&gt;   &amp;lt;http auto-config=&amp;quot;true&amp;quot; use-expressions=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;   &amp;lt;/http&amp;gt;&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;    &amp;lt;b:bean id=&amp;quot;filterChainProxy&amp;quot; class=&amp;quot;org.springframework.security.web.FilterChainProxy&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;filter-chain-map path-type=&amp;quot;ant&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;filter-chain pattern=&amp;quot;/**&amp;quot; filters=&amp;quot;j2eePreAuthFilter&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;/filter-chain-map&amp;gt;&lt;br /&gt;    &amp;lt;/b:bean&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;authentication-manager alias=&amp;quot;authenticationManager&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;authentication-provider ref='preAuthenticatedAuthenticationProvider'/&amp;gt;&lt;br /&gt;    &amp;lt;/authentication-manager&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;b:bean id=&amp;quot;preAuthenticatedAuthenticationProvider&amp;quot; class=&amp;quot;org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;b:property name=&amp;quot;preAuthenticatedUserDetailsService&amp;quot; ref=&amp;quot;preAuthenticatedUserDetailsService&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;/b:bean&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;b:bean id=&amp;quot;preAuthenticatedUserDetailsService&amp;quot;&lt;br /&gt;            class=&amp;quot;org.springframework.security.web.authentication.preauth.PreAuthenticatedGrantedAuthoritiesUserDetailsService&amp;quot;/&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;     &amp;lt;b:bean id=&amp;quot;j2eePreAuthFilter&amp;quot; class=&amp;quot;security.SsoUserJ2eePreAuthenticatedProcessingFilter&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;b:property name=&amp;quot;authenticationManager&amp;quot; ref=&amp;quot;authenticationManager&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;b:property name=&amp;quot;authenticationDetailsSource&amp;quot; ref=&amp;quot;authenticationDetailsSource&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;b:property name=&amp;quot;continueFilterChainOnUnsuccessfulAuthentication&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;  &amp;lt;/b:bean&amp;gt;&lt;br /&gt;  &lt;br /&gt;  &amp;lt;b:bean id=&amp;quot;authenticationDetailsSource&amp;quot; class=&amp;quot;org.springframework.security.web.authentication.preauth.j2ee.J2eeBasedPreAuthenticatedWebAuthenticationDetailsSource&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;b:property name=&amp;quot;mappableRolesRetriever&amp;quot; ref=&amp;quot;j2eeMappableRolesRetriever&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;b:property name=&amp;quot;userRoles2GrantedAuthoritiesMapper&amp;quot; ref=&amp;quot;j2eeUserRoles2GrantedAuthoritiesMapper&amp;quot;/&amp;gt;&lt;br /&gt;  &amp;lt;/b:bean&amp;gt;&lt;br /&gt;  &lt;br /&gt;  &amp;lt;b:bean id=&amp;quot;j2eeMappableRolesRetriever&amp;quot; class=&amp;quot;org.springframework.security.web.authentication.preauth.j2ee.WebXmlMappableAttributesRetriever&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;/b:bean&amp;gt;&lt;br /&gt;  &lt;br /&gt;   &amp;lt;b:bean id=&amp;quot;j2eeUserRoles2GrantedAuthoritiesMapper&amp;quot; class=&amp;quot;org.springframework.security.core.authority.mapping.SimpleAttributes2GrantedAuthoritiesMapper&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;b:property name=&amp;quot;attributePrefix&amp;quot; value=&amp;quot;test&amp;quot;/&amp;gt;&lt;br /&gt;  &amp;lt;/b:bean&amp;gt;&lt;br /&gt;  &lt;br /&gt;    &lt;br /&gt; &amp;lt;/b:beans&amp;gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;------------------------------------------------------------------------------------------------------------------------------------------------- &lt;br /&gt; Our class extending J2eePreAuthenticatedProcessingFilter code goes like this&lt;br /&gt; -------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt; &lt;br /&gt; package security;&lt;br /&gt; import java.security.Principal;&lt;br /&gt; &lt;br /&gt; import javax.servlet.http.HttpServletRequest;&lt;br /&gt; import javax.servlet.http.HttpServletResponse;&lt;br /&gt; import javax.servlet.http.HttpSession;&lt;br /&gt; &lt;br /&gt; import org.apache.log4j.Logger;&lt;br /&gt; import org.springframework.security.core.Authentication;&lt;br /&gt; import org.springframework.security.core.GrantedAuthority;&lt;br /&gt; import org.springframework.security.core.context.SecurityContextHolder;&lt;br /&gt; import org.springframework.security.web.authentication.preauth.j2ee.J2eePreAuthenticatedProcessingFilter;&lt;br /&gt; &lt;br /&gt; import domain.User;&lt;br /&gt; &lt;br /&gt; import view.SessionState;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; /**&lt;br /&gt;  * This filter implementation hooks into the Spring Security authentication&lt;br /&gt;  * mechanism and ensures that the additional SSO secrity details are loaded and&lt;br /&gt;  * made available in the session. &lt;br /&gt;  */&lt;br /&gt; public class SsoUserJ2eePreAuthenticatedProcessingFilter extends J2eePreAuthenticatedProcessingFilter {&lt;br /&gt; &lt;br /&gt;   /**&lt;br /&gt;    * Log.&lt;br /&gt;    */&lt;br /&gt;   private static final Logger LOG = Logger.getLogger(SsoUserJ2eePreAuthenticatedProcessingFilter.class);&lt;br /&gt; &lt;br /&gt;   protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, Authentication authResult) {&lt;br /&gt;     LOG.debug(&amp;quot;successfulAuthentication()&amp;quot;);&lt;br /&gt; &lt;br /&gt;     // There may be unauthenticated threads all requesting for the same session&lt;br /&gt;     // at the same time so synchronisation must be achieved.&lt;br /&gt;     //&lt;br /&gt;     // To minimise contention, this implementation synchronises on the session &lt;br /&gt;     // object itself.&lt;br /&gt;     //&lt;br /&gt;     // Since this is only a session startup issue, there is no further&lt;br /&gt;     // contention, bottle-neck or performance impact.&lt;br /&gt;     &lt;br /&gt;  HttpServletRequest req = (HttpServletRequest) request; //principal is set ed()) {LOG.debug(&amp;quot;user=&amp;quot; + user);}&lt;br /&gt;         &lt;br /&gt;         if(user != null) {&lt;br /&gt;           LOG.debug(&amp;quot;Got user data&amp;quot;);&lt;br /&gt;           &lt;br /&gt;           //final Authentication authenticatcation()&amp;quot; + authentication);&lt;br /&gt; &lt;br /&gt;     HttpSession session = request.getSession();&lt;br /&gt;     synchronized(session) {&lt;br /&gt;       SessionState sessionState = (SessionState)session.getAttribute(SessionState.NAME);&lt;br /&gt;       &lt;br /&gt;       if(sessionState == null) {&lt;br /&gt;         LOG.debug(&amp;quot;Create new application session state for the newly authenticated user&amp;quot;);&lt;br /&gt;         &lt;br /&gt;         // Create new session state for this user&lt;br /&gt;         sessionState = new SessionState();&lt;br /&gt;         &lt;br /&gt;         request.getSession().setAttribute(SessionState.NAME, sessionState);&lt;br /&gt;         &lt;br /&gt;         // Load the additional user data for this user&lt;br /&gt;         Principal principal = request.getUserPrincipal();&lt;br /&gt;         String username = principal.getName();&lt;br /&gt;         if(LOG.isDebugEnabled()) {LOG.debug(&amp;quot;username=&amp;quot; + username);}&lt;br /&gt;         &lt;br /&gt;         User user=new User();&lt;br /&gt;         user.setUsername(username);&lt;br /&gt;         if(LOG.isDebugEnabled()) {LOG.debug(&amp;quot;user=&amp;quot; + user);}&lt;br /&gt;         &lt;br /&gt;         if(user != null) {&lt;br /&gt;           LOG.debug(&amp;quot;Got user data&amp;quot;);&lt;br /&gt;           &lt;br /&gt;           //final Authentication authentication2 = SecurityContextHolder.getContext().getAuthentication();&lt;br /&gt;           if (authentication != null) {&lt;br /&gt;           for (GrantedAuthority authority : authentication.getAuthorities()) {&lt;br /&gt;            LOG.debug(&amp;quot;roles retrieved From Spring=&amp;quot; + authority.getAuthority());&lt;br /&gt;             }&lt;br /&gt;           }&lt;br /&gt;           //&lt;br /&gt;           sessionState.setUser(user);&lt;br /&gt;         }&lt;br /&gt;         else {&lt;br /&gt;           // TODO throw exception?&lt;br /&gt;           LOG.warn(&amp;quot;User authenticated but no user data available for '&amp;quot; + username + &amp;quot;'&amp;quot;);&lt;br /&gt;         }&lt;br /&gt;       }&lt;br /&gt;     }&lt;br /&gt;     &lt;br /&gt;     super.successfulAuthentication(request, response, authResult);&lt;br /&gt;   }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;In our jsp's finally we can authorise the user based on role&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;sec:authorize access=&amp;quot;hasRole('testWebApp')&amp;quot;&amp;gt;&lt;br /&gt;    You are a Junior Developer&lt;br /&gt;&amp;lt;/sec:authorize&amp;gt;&lt;br /&gt;-------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;We can also access the role information in our java code.&lt;br /&gt;&lt;br /&gt;        SecurityContextHolderAwareRequestWrapper requestWrapper=new SecurityContextHolderAwareRequestWrapper(request,&amp;quot;test&amp;quot;);&lt;br /&gt;        boolean testRole=requestWrapper.isUserInRole(&amp;quot;Webapp&amp;quot;);&lt;br /&gt;        LOGGER.debug(&amp;quot;HomeController.handleRequest testRole().&amp;quot; + testRole);&lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;If you want to restrict the user acccess to various links in the web application then we need to add the fsi filter as well&lt;br /&gt;&lt;br /&gt;&amp;lt;b:bean id=&amp;quot;filterChainProxy&amp;quot; class=&amp;quot;org.springframework.security.web.FilterChainProxy&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;filter-chain-map path-type=&amp;quot;ant&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;filter-chain pattern=&amp;quot;/**&amp;quot; filters=&amp;quot;j2eePreAuthFilter,fsi&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;/filter-chain-map&amp;gt;&lt;br /&gt;    &amp;lt;/b:bean&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;b:bean id=&amp;quot;httpRequestAccessDecisionManager&amp;quot; class=&amp;quot;org.springframework.security.access.vote.AffirmativeBased&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;b:property name=&amp;quot;allowIfAllAbstainDecisions&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;b:property name=&amp;quot;decisionVoters&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;b:list&amp;gt;&lt;br /&gt;                &amp;lt;b:ref bean=&amp;quot;roleVoter&amp;quot;/&amp;gt;&lt;br /&gt;                &amp;lt;b:ref bean=&amp;quot;webExpressionVoter&amp;quot;/&amp;gt;&lt;br /&gt;            &amp;lt;/b:list&amp;gt;&lt;br /&gt;        &amp;lt;/b:property&amp;gt;&lt;br /&gt;    &amp;lt;/b:bean&amp;gt;&lt;br /&gt;    &lt;br /&gt;   &amp;lt;b:bean id=&amp;quot;roleVoter&amp;quot; class=&amp;quot;org.springframework.security.access.vote.RoleVoter&amp;quot;/&amp;gt;&lt;br /&gt;   &amp;lt;b:bean id=&amp;quot;webExpressionVoter&amp;quot; class=&amp;quot;org.springframework.security.web.access.expression.WebExpressionVoter&amp;quot;/&amp;gt;&lt;br /&gt;  &lt;br /&gt;   &amp;lt;b:bean id=&amp;quot;fsi&amp;quot; class=&amp;quot;org.springframework.security.web.access.intercept.FilterSecurityInterceptor&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;b:property name=&amp;quot;authenticationManager&amp;quot; ref=&amp;quot;authenticationManager&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;b:property name=&amp;quot;accessDecisionManager&amp;quot; ref=&amp;quot;httpRequestAccessDecisionManager&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;b:property name=&amp;quot;securityMetadataSource&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;filter-invocation-definition-source use-expressions=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;                &amp;lt;intercept-url pattern=&amp;quot;/secure/extreme/**&amp;quot; access=&amp;quot;hasRole('testRoleExtreme')&amp;quot;/&amp;gt;&lt;br /&gt;                &amp;lt;intercept-url pattern=&amp;quot;/secure/**&amp;quot; access=&amp;quot;hasRole('testRoleSecure')&amp;quot;/&amp;gt;&lt;br /&gt;                &amp;lt;intercept-url pattern=&amp;quot;/**&amp;quot; access=&amp;quot;hasRole('testRole')&amp;quot;/&amp;gt;&lt;br /&gt;            &amp;lt;/filter-invocation-definition-source&amp;gt;&lt;br /&gt;        &amp;lt;/b:property&amp;gt;&lt;br /&gt;    &amp;lt;/b:bean&amp;gt;&lt;br /&gt;-------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;Now if you want to implement a proper error page whenever any security related interceptors like FilterSecurityInterceptor throws exceptions then we need to add below tags in our security.xml&lt;br /&gt;&lt;br /&gt;If you don't add then you may face below stack trace&lt;br /&gt;&lt;br /&gt;Error 500--Internal Server Error &lt;br /&gt;org.springframework.security.access.AccessDeniedException: Access is denied&lt;br /&gt; at org.springframework.security.access.vote.AffirmativeBased.decide(AffirmativeBased.java:71)&lt;br /&gt; at org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:203)&lt;br /&gt;&lt;br /&gt;Below code should work and will resolve the issue&lt;br /&gt;&lt;br /&gt; &amp;lt;b:bean id=&amp;quot;filterChainProxy&amp;quot; class=&amp;quot;org.springframework.security.web.FilterChainProxy&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;filter-chain-map path-type=&amp;quot;ant&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;filter-chain pattern=&amp;quot;/**&amp;quot; filters=&amp;quot;exceptionTranslationFilter,j2eePreAuthFilter,fsi&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;/filter-chain-map&amp;gt;&lt;br /&gt;    &amp;lt;/b:bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;b:bean id=&amp;quot;exceptionTranslationFilter&amp;quot; class=&amp;quot;org.springframework.security.web.access.ExceptionTranslationFilter&amp;quot;&amp;gt;&lt;br /&gt;   &amp;lt;b:property name=&amp;quot;authenticationEntryPoint&amp;quot; ref=&amp;quot;authenticationEntryPoint&amp;quot;/&amp;gt;&lt;br /&gt;   &amp;lt;b:property name=&amp;quot;accessDeniedHandler&amp;quot; ref=&amp;quot;accessDeniedHandler&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;/b:bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;b:bean id=&amp;quot;authenticationEntryPoint&amp;quot; class=&amp;quot;org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;b:property name=&amp;quot;loginFormUrl&amp;quot; value=&amp;quot;/login.jsp&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;/b:bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;b:bean id=&amp;quot;accessDeniedHandler&amp;quot;&lt;br /&gt;     class=&amp;quot;org.springframework.security.web.access.AccessDeniedHandlerImpl&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;b:property name=&amp;quot;errorPage&amp;quot; value=&amp;quot;/accessDenied/showAccessDenied.html&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;/b:bean&amp;gt;&lt;br /&gt;&lt;br /&gt;Remember in our jsp page add below code compulsory if you are relying on I.E and also want to redirect to user-defined error page rather than the typical I.E forbidden page.&lt;br /&gt;&lt;br /&gt;&amp;lt;% response.setStatus(200); %&amp;gt;&lt;br /&gt;&lt;br /&gt;Refer to this article for more details&lt;br /&gt;http://www.coderanch.com/t/365499/Servlets/java/web-xml-error-page-not&lt;br /&gt;&lt;br /&gt;For more information please refer to below url&lt;br /&gt;&lt;br /&gt;http://static.springsource.org/spring-security/site/docs/3.0.x/reference/core-web-filters.html&lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Hope this article helps.&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-1894666944212951181?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/1894666944212951181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=1894666944212951181' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/1894666944212951181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/1894666944212951181'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2011/06/spring-security30x-authorisation-only.html' title='Spring Security3.0.x Authorisation Only using J2eeBasedPreAuthenticatedWebAuthenticationDetailsSource'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-6042091190327743460</id><published>2011-04-28T12:50:00.000-07:00</published><updated>2011-04-28T13:00:25.600-07:00</updated><title type='text'>Working With Custom Oracle Object Types In IBatis</title><content type='html'>Today we got a requirement for working With Custom Oracle Object Types In IBatis.&lt;br /&gt;&lt;br /&gt;One of our stored procedure takes a "table of object type" as one of the parameter.&lt;br /&gt;&lt;br /&gt;Our requirement is to call this stored proceudure from IBatis.&lt;br /&gt;&lt;br /&gt;I would like to thank the original author found in below link as i found solution only after following his instructions.&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" href="Today we got a requirement for working With Custom Oracle Object Types In IBatis. One of our stored procedure takes a "table of object type" as one of the parameter. Our requirement is to call this stored proceudure from IBatis. I would like to thank the original author found in below link as i found solution only after following his instructions. http://mail-archives.apache.org/mod_mbox/ibatis-user-java/200802.mbox/%3C8B243E70CE6BFB438E3CDE03E1E4F698925024@zil01exm62.ds.mot.com%3E"&gt;http://mail-archives.apache.org/mod_mbox/ibatis-user-java/200802.mbox/%3C8B243E70CE6BFB438E3CDE03E1E4F698925024@zil01exm62.ds.mot.com%3E&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;create&lt;/strong&gt; &lt;strong&gt;or&lt;/strong&gt; &lt;strong&gt;replace&lt;/strong&gt; TYPE JOB_MEASURES_OBJ_TYPE &lt;strong&gt;AS&lt;/strong&gt; OBJECT&lt;br /&gt;( &lt;br /&gt;MEASURE_ID NUMBER,&lt;br /&gt;SERVICE_CODE VARCHAR2&lt;strong&gt;(&lt;/strong&gt;30 BYTE),&lt;br /&gt;QUANTITY NUMBER,&lt;br /&gt;RECEIPT_DATE &lt;font color="#2040a0"&gt;&lt;strong&gt;DATE&lt;/strong&gt;&lt;/font&gt;,&lt;br /&gt;COUNTER NUMBER,&lt;br /&gt;JOB_ID NUMBER,&lt;br /&gt;ERROR_MSG VARCHAR2&lt;strong&gt;(&lt;/strong&gt;4000 BYTE),&lt;br /&gt;CREATION_DATE &lt;font color="#2040a0"&gt;&lt;strong&gt;DATE&lt;/strong&gt;&lt;/font&gt;,&lt;br /&gt;CREATED_BY VARCHAR2&lt;strong&gt;(&lt;/strong&gt;30 BYTE),&lt;br /&gt;LAST_UPDATE_DATE &lt;font color="#2040a0"&gt;&lt;strong&gt;DATE&lt;/strong&gt;&lt;/font&gt;,&lt;br /&gt;LAST_UPDATED_BY VARCHAR2&lt;strong&gt;(&lt;/strong&gt;30 BYTE)&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;create&lt;/strong&gt; &lt;strong&gt;or&lt;/strong&gt; &lt;strong&gt;replace&lt;/strong&gt; TYPE JOB_MEASURES_TAB_TYPE &lt;strong&gt;AS&lt;/strong&gt; &lt;strong&gt;TABLE&lt;/strong&gt; OF JOB_MEASURES_OBJ_TYPE;&lt;br /&gt;&lt;br /&gt; PROCEDURE pr_insert_job_measures_row&lt;br /&gt;(&lt;br /&gt;  pi_tbl_rec  &lt;strong&gt;IN&lt;/strong&gt; JOB_MEASURES_TAB_TYPE,&lt;br /&gt;  po_message_type   &lt;strong&gt;OUT&lt;/strong&gt; NUMBER,&lt;br /&gt;  po_message  &lt;strong&gt;OUT&lt;/strong&gt; VARCHAR2&lt;br /&gt;) &lt;strong&gt;IS&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;v_rec_index   PLS_INTEGER;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;BEGIN&lt;/strong&gt;&lt;br /&gt;    &lt;br /&gt;       v_rec_index       := pi_tbl_rec.FIRST;&lt;br /&gt;       &lt;br /&gt;       F&lt;strong&gt;OR&lt;/strong&gt; v_rec_index &lt;strong&gt;IN&lt;/strong&gt; pi_tbl_rec.FIRST .. pi_tbl_rec.LAST LOOP&lt;br /&gt;&lt;br /&gt;     &lt;strong&gt;INSERT&lt;/strong&gt; &lt;strong&gt;INTO&lt;/strong&gt; dummy&lt;br /&gt;        JOB_ID,&lt;br /&gt;       ) &lt;br /&gt;       values &lt;br /&gt;       (&lt;br /&gt;        pi_tbl_rec&lt;strong&gt;(&lt;/strong&gt;v_rec_index).JOB_ID,&lt;br /&gt;       );&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;END&lt;/strong&gt; LOOP;&lt;br /&gt;   &lt;strong&gt;END&lt;/strong&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;IBatis Xml file entries goes like this&lt;br /&gt;&lt;br /&gt; &lt;strong&gt;&amp;lt;&lt;/strong&gt;typeAlias type=&amp;quot;JobMeasuresTypeHandler&amp;quot; alias=&amp;quot;JobMeasuresTypeHandler&amp;quot;   /&amp;gt;&lt;br /&gt;    &lt;br /&gt;  &lt;strong&gt;&amp;lt;&lt;/strong&gt;parameterMap id=&amp;quot;insertJobMeasuresProcParameters&amp;quot; class=&amp;quot;java.util.Map&amp;quot;&amp;gt;&lt;br /&gt;    &lt;strong&gt;&amp;lt;&lt;/strong&gt;parameter property=&amp;quot;jobMeasuresTableRec&amp;quot;      typeHandler=&amp;quot;JobMeasuresTypeHandler&amp;quot; mode=&amp;quot;&lt;strong&gt;IN&lt;/strong&gt;&amp;quot; /&amp;gt;&lt;br /&gt;    &lt;strong&gt;&amp;lt;&lt;/strong&gt;parameter property=&amp;quot;messageType&amp;quot;              jdbcType=&amp;quot;&lt;font color="#2040a0"&gt;&lt;strong&gt;NUMERIC&lt;/strong&gt;&lt;/font&gt;&amp;quot; javaType=&amp;quot;int&amp;quot;              mode=&amp;quot;&lt;strong&gt;OUT&lt;/strong&gt;&amp;quot;/&amp;gt;&lt;br /&gt;    &lt;strong&gt;&amp;lt;&lt;/strong&gt;parameter property=&amp;quot;message&amp;quot;                  jdbcType=&amp;quot;&lt;font color="#2040a0"&gt;&lt;strong&gt;VARCHAR&lt;/strong&gt;&lt;/font&gt;&amp;quot; javaType=&amp;quot;java.lang.String&amp;quot; mode=&amp;quot;&lt;strong&gt;OUT&lt;/strong&gt;&amp;quot;/&amp;gt;&lt;br /&gt;  &amp;lt;/parameterMap&amp;gt;&lt;br /&gt;  &lt;br /&gt;  &lt;strong&gt;&amp;lt;&lt;/strong&gt;procedure id=&amp;quot;insertJobMeasuresProc&amp;quot; parameterMap=&amp;quot;JobMeasures.insertJobMeasuresProcParameters&amp;quot;&amp;gt;&lt;br /&gt;    {call pr_insert_job_measures_row(?,?,?)}&lt;br /&gt;  &amp;lt;/procedure&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Our Java Code goes like this&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;JobMeasureOracleDomainObject&lt;/font&gt;.&lt;font color="#2040a0"&gt;java&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;JobMeasureOracleDomainObject&lt;/font&gt; &lt;strong&gt;implements&lt;/strong&gt; &lt;font color="#2040a0"&gt;ORAData&lt;/font&gt;,&lt;font color="#2040a0"&gt;ORADataFactory&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt; &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;Long&lt;/font&gt; &lt;font color="#2040a0"&gt;measureId&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt; &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;serviceCode&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt; &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;Long&lt;/font&gt; &lt;font color="#2040a0"&gt;quantity&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt; &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;Date&lt;/font&gt; &lt;font color="#2040a0"&gt;receiptDate&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt; &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;Long&lt;/font&gt; &lt;font color="#2040a0"&gt;counter&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt; &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;Long&lt;/font&gt; &lt;font color="#2040a0"&gt;jobId&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt; &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;errorMsg&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt; &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;Date&lt;/font&gt; &lt;font color="#2040a0"&gt;creationDate&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt; &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;creationBy&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt; &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;Date&lt;/font&gt; &lt;font color="#2040a0"&gt;lastUpdatedDate&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt; &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;lastUpdatedBy&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt; &lt;br /&gt;    &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;final&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;_SQL_NAME&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;JOB_MEASURES_OBJ_TYPE&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;final&lt;/strong&gt; &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;_SQL_TYPECODE&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;OracleTypes&lt;/font&gt;.&lt;font color="#2040a0"&gt;STRUCT&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;protected&lt;/strong&gt; &lt;font color="#2040a0"&gt;MutableStruct&lt;/font&gt; &lt;font color="#2040a0"&gt;_struct&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;int&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;_sqlType&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;OracleTypes&lt;/font&gt;.&lt;font color="#2040a0"&gt;NUMBER&lt;/font&gt;, &lt;font color="#2040a0"&gt;OracleTypes&lt;/font&gt;.&lt;font color="#2040a0"&gt;CHAR&lt;/font&gt;,&lt;font color="#2040a0"&gt;OracleTypes&lt;/font&gt;.&lt;font color="#2040a0"&gt;NUMBER&lt;/font&gt;,&lt;font color="#2040a0"&gt;OracleTypes&lt;/font&gt;.&lt;font color="#2040a0"&gt;DATE&lt;/font&gt;,&lt;font color="#2040a0"&gt;OracleTypes&lt;/font&gt;.&lt;font color="#2040a0"&gt;NUMBER&lt;/font&gt;&lt;br /&gt;     ,&lt;font color="#2040a0"&gt;OracleTypes&lt;/font&gt;.&lt;font color="#2040a0"&gt;NUMBER&lt;/font&gt;,&lt;font color="#2040a0"&gt;OracleTypes&lt;/font&gt;.&lt;font color="#2040a0"&gt;CHAR&lt;/font&gt;,&lt;font color="#2040a0"&gt;OracleTypes&lt;/font&gt;.&lt;font color="#2040a0"&gt;DATE&lt;/font&gt;,&lt;font color="#2040a0"&gt;OracleTypes&lt;/font&gt;.&lt;font color="#2040a0"&gt;CHAR&lt;/font&gt;,&lt;font color="#2040a0"&gt;OracleTypes&lt;/font&gt;.&lt;font color="#2040a0"&gt;DATE&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;strong&gt;static&lt;/strong&gt; &lt;font color="#2040a0"&gt;ORADataFactory&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;_factory&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;ORADataFactory&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="#FF0000"&gt;11&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;final&lt;/strong&gt; &lt;font color="#2040a0"&gt;JobMeasureOracleDomainObject&lt;/font&gt; &lt;font color="#2040a0"&gt;_JobMeasureFactory&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;JobMeasureOracleDomainObject&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#444444"&gt;// logger (if you wish)&lt;/font&gt;&lt;br /&gt;    &lt;font color="#444444"&gt;//private final Log log = LogFactory.getLog(JobMeasureOracleDomainObject.class);&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;final&lt;/strong&gt; &lt;strong&gt;long&lt;/strong&gt; &lt;font color="#2040a0"&gt;serialVersionUID&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;-&lt;/font&gt;&lt;font color="#FF0000"&gt;7710368639791237838L&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt; &lt;br /&gt;    &lt;font color="#444444"&gt;/* constructor */&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;protected&lt;/strong&gt; &lt;font color="#2040a0"&gt;JobMeasureOracleDomainObject&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;boolean&lt;/strong&gt; &lt;font color="#2040a0"&gt;init&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;init&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;_struct&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;MutableStruct&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;Object&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="#FF0000"&gt;11&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt;, &lt;font color="#2040a0"&gt;_sqlType&lt;/font&gt;,&lt;font color="#2040a0"&gt;_factory&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;strong&gt;public&lt;/strong&gt; &lt;font color="#2040a0"&gt;JobMeasureOracleDomainObject&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;     &lt;strong&gt;this&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;true&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;font color="#444444"&gt;/* ORAData interface */&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;public&lt;/strong&gt; &lt;font color="#2040a0"&gt;Datum&lt;/font&gt; &lt;font color="#2040a0"&gt;toDatum&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Connection&lt;/font&gt; &lt;font color="#2040a0"&gt;conn&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;throws&lt;/strong&gt; &lt;font color="#2040a0"&gt;SQLException&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;Calling method toDatum...&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;Datum&lt;/font&gt; &lt;font color="#2040a0"&gt;d&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;_struct&lt;/font&gt;.&lt;font color="#2040a0"&gt;toDatum&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;conn&lt;/font&gt;, &lt;font color="#2040a0"&gt;_SQL_NAME&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;d&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;font color="#444444"&gt;/* ORADataFactory interface */&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;public&lt;/strong&gt; &lt;font color="#2040a0"&gt;ORAData&lt;/font&gt; &lt;font color="#2040a0"&gt;create&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Datum&lt;/font&gt; &lt;font color="#2040a0"&gt;d&lt;/font&gt;, &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;sqlType&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;throws&lt;/strong&gt; &lt;font color="#2040a0"&gt;SQLException&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;create&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;null&lt;/strong&gt;, &lt;font color="#2040a0"&gt;d&lt;/font&gt;, &lt;font color="#2040a0"&gt;sqlType&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;strong&gt;protected&lt;/strong&gt; &lt;font color="#2040a0"&gt;ORAData&lt;/font&gt; &lt;font color="#2040a0"&gt;create&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;JobMeasureOracleDomainObject&lt;/font&gt; &lt;font color="#2040a0"&gt;o&lt;/font&gt;, &lt;font color="#2040a0"&gt;Datum&lt;/font&gt; &lt;font color="#2040a0"&gt;d&lt;/font&gt;, &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;sqlType&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;throws&lt;/strong&gt; &lt;font color="#2040a0"&gt;SQLException&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;     &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;Calling method create...&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;     &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;d&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;return&lt;/strong&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;     &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;     &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;o&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;o&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;JobMeasureOracleDomainObject&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;false&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;     &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;     &lt;font color="#2040a0"&gt;o&lt;/font&gt;.&lt;font color="#2040a0"&gt;_struct&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;MutableStruct&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;STRUCT&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;d&lt;/font&gt;, &lt;font color="#2040a0"&gt;_sqlType&lt;/font&gt;, &lt;font color="#2040a0"&gt;_factory&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;     &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;o&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;font color="#2040a0"&gt;ORADataFactory&lt;/font&gt; &lt;font color="#2040a0"&gt;getORADataFactory&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;_JobMeasureFactory&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;br /&gt; &lt;strong&gt;public&lt;/strong&gt; &lt;font color="#2040a0"&gt;Long&lt;/font&gt; &lt;font color="#2040a0"&gt;getMeasureId&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;throws&lt;/strong&gt; &lt;font color="#2040a0"&gt;SQLException&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;return&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Long&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;_struct&lt;/font&gt;.&lt;font color="#2040a0"&gt;getAttribute&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt; &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;setMeasureId&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Long&lt;/font&gt; &lt;font color="#2040a0"&gt;measureId&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;throws&lt;/strong&gt; &lt;font color="#2040a0"&gt;SQLException&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;this&lt;/strong&gt;.&lt;font color="#2040a0"&gt;measureId&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;measureId&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;_struct&lt;/font&gt;.&lt;font color="#2040a0"&gt;setAttribute&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#FF0000"&gt;0&lt;/font&gt;, &lt;strong&gt;this&lt;/strong&gt;.&lt;font color="#2040a0"&gt;measureId&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;     ........&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;JobMeasuresTypeHandler&lt;/font&gt;.&lt;font color="#2040a0"&gt;java&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;JobMeasuresTypeHandler&lt;/font&gt; &lt;strong&gt;implements&lt;/strong&gt; &lt;font color="#2040a0"&gt;TypeHandlerCallback&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;final&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;JOB_MEASURES_TAB&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;JOB_MEASURES_TAB_TYPE&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;final&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;JOB_MEASURES_REC&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;JOB_MEASURES_OBJ_TYPE&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;static&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;JdbcTypeRegistry&lt;/font&gt;.&lt;font color="#2040a0"&gt;setType&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;JOB_MEASURES_REC&lt;/font&gt;, &lt;font color="#2040a0"&gt;OracleTypes&lt;/font&gt;.&lt;font color="#2040a0"&gt;STRUCT&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;JdbcTypeRegistry&lt;/font&gt;.&lt;font color="#2040a0"&gt;setType&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;JOB_MEASURES_TAB&lt;/font&gt;, &lt;font color="#2040a0"&gt;OracleTypes&lt;/font&gt;.&lt;font color="#2040a0"&gt;ARRAY&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt; &lt;br /&gt;    @&lt;font color="#2040a0"&gt;SuppressWarnings&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;unchecked&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;setParameter&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;ParameterSetter&lt;/font&gt; &lt;font color="#2040a0"&gt;setter&lt;/font&gt;, &lt;font color="#2040a0"&gt;Object&lt;/font&gt; &lt;font color="#2040a0"&gt;parameter&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;throws&lt;/strong&gt; &lt;font color="#2040a0"&gt;SQLException&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;calling setParameter...&amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;parameter&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;calling setParameter...&amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;parameter&lt;/font&gt;.&lt;font color="#2040a0"&gt;getClass&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;strong&gt;try&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;List&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;JobMeasureOracleDomainObject&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;jobMeasuresList&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;List&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;JobMeasureOracleDomainObject&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;parameter&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#444444"&gt;// System.out.println(&amp;quot;Converting list to array...&amp;quot;);&lt;/font&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;JobMeasureOracleDomainObject&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;recArray&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;JobMeasureOracleDomainObject&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;jobMeasuresList&lt;/font&gt;.&lt;font color="#2040a0"&gt;size&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;            &lt;strong&gt;for&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;i&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;font color="#2040a0"&gt;i&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt; &lt;font color="#2040a0"&gt;recArray&lt;/font&gt;.&lt;font color="#2040a0"&gt;length&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;font color="#2040a0"&gt;i&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#2040a0"&gt;recArray&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;i&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;jobMeasuresList&lt;/font&gt;.&lt;font color="#2040a0"&gt;get&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;i&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;            &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;Converted list to array.&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;Connection&lt;/font&gt; &lt;font color="#2040a0"&gt;conn&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;setter&lt;/font&gt;.&lt;font color="#2040a0"&gt;getPreparedStatement&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;.&lt;font color="#2040a0"&gt;getConnection&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;            &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;conn&lt;/font&gt; &lt;strong&gt;instanceof&lt;/strong&gt; &lt;font color="#2040a0"&gt;DelegatingConnection&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#2040a0"&gt;DelegatingConnection&lt;/font&gt; &lt;font color="#2040a0"&gt;dcon&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;DelegatingConnection&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;conn&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#2040a0"&gt;conn&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;dcon&lt;/font&gt;.&lt;font color="#2040a0"&gt;getInnermostDelegate&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;            &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;conn&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;OracleConnection&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;conn&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#444444"&gt;//ARRAY array=createJobMeasuresDataARRAY(conn);&lt;/font&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;ArrayDescriptor&lt;/font&gt; &lt;font color="#2040a0"&gt;arrayDescriptor&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#2040a0"&gt;ArrayDescriptor&lt;/font&gt;.&lt;font color="#2040a0"&gt;createDescriptor&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;JOB_MEASURES_TAB&lt;/font&gt;, &lt;font color="#2040a0"&gt;conn&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;ARRAY&lt;/font&gt; &lt;font color="#2040a0"&gt;array&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;ARRAY&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;arrayDescriptor&lt;/font&gt;, &lt;font color="#2040a0"&gt;conn&lt;/font&gt;, &lt;font color="#2040a0"&gt;recArray&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;setter&lt;/font&gt;.&lt;font color="#2040a0"&gt;setArray&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;array&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;catch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;SQLException&lt;/font&gt; &lt;font color="#2040a0"&gt;sqle&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;SQLException: &amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;sqle&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;            &lt;strong&gt;throw&lt;/strong&gt; &lt;font color="#2040a0"&gt;sqle&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;strong&gt;public&lt;/strong&gt; &lt;font color="#2040a0"&gt;Object&lt;/font&gt; &lt;font color="#2040a0"&gt;getResult&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;ResultGetter&lt;/font&gt; &lt;font color="#2040a0"&gt;getter&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;throws&lt;/strong&gt; &lt;font color="#2040a0"&gt;SQLException&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;     &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;calling getResult...&amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;getter&lt;/font&gt;.&lt;font color="#2040a0"&gt;getObject&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;     &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;getter&lt;/font&gt;.&lt;font color="#2040a0"&gt;getObject&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt; &lt;br /&gt;    &lt;font color="#444444"&gt;&lt;i&gt;/**&lt;br /&gt;     * Nothing here can help us anyway...&lt;br /&gt;     */&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;public&lt;/strong&gt; &lt;font color="#2040a0"&gt;Object&lt;/font&gt; &lt;font color="#2040a0"&gt;valueOf&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;arg0&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;     &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;calling valueOf...&amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;arg0&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;     &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;arg0&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;            &lt;strong&gt;return&lt;/strong&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;ArrayList&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;JobMeasureOracleDomainObject&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;arg0&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;ObjectTypeArraysJobMeasuresTest&lt;/font&gt;.&lt;font color="#2040a0"&gt;java&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;ObjectTypeArraysJobMeasuresTest&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt; &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;main&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;args&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;throws&lt;/strong&gt; &lt;font color="#2040a0"&gt;SQLException&lt;/font&gt;, &lt;font color="#2040a0"&gt;IOException&lt;/font&gt;, &lt;font color="#2040a0"&gt;ClassNotFoundException&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;     &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;ObjectTypeArraysJobMeasuresTest&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;.&lt;font color="#2040a0"&gt;insertJobMeasuresProcParameters&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt; &lt;br /&gt; &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;insertJobMeasuresProcParameters&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;throws&lt;/strong&gt; &lt;font color="#2040a0"&gt;IOException&lt;/font&gt;, &lt;font color="#2040a0"&gt;SQLException&lt;/font&gt;, &lt;font color="#2040a0"&gt;ClassNotFoundException&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#444444"&gt;//Connection   conn     = null;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;Reader&lt;/font&gt; &lt;font color="#2040a0"&gt;reader&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;Resources&lt;/font&gt;.&lt;font color="#2040a0"&gt;getResourceAsReader&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;SqlMapConfig.xml&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;SqlMapClient&lt;/font&gt; &lt;font color="#2040a0"&gt;sqlMap&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;SqlMapClientBuilder&lt;/font&gt;.&lt;font color="#2040a0"&gt;buildSqlMapClient&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;reader&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;font color="#2040a0"&gt;List&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;JobMeasureOracleDomainObject&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;jobMeasuresList&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;ArrayList&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;JobMeasureOracleDomainObject&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;JobMeasureOracleDomainObject&lt;/font&gt; &lt;font color="#2040a0"&gt;jobMeasureOracleDomainObject&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;JobMeasureOracleDomainObject&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;jobMeasureOracleDomainObject&lt;/font&gt;.&lt;font color="#2040a0"&gt;setJobId&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#FF0000"&gt;999L&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;jobMeasureOracleDomainObject&lt;/font&gt;.&lt;font color="#2040a0"&gt;setMeasureId&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#FF0000"&gt;999L&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;jobMeasuresList&lt;/font&gt;.&lt;font color="#2040a0"&gt;add&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;jobMeasureOracleDomainObject&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;Map&lt;/font&gt; &lt;font color="#2040a0"&gt;parameterMap&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;HashMap&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;parameterMap&lt;/font&gt;.&lt;font color="#2040a0"&gt;put&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;jobMeasuresTableRec&amp;quot;&lt;/font&gt;, &lt;font color="#2040a0"&gt;jobMeasuresList&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;sqlMap&lt;/font&gt;.&lt;font color="#2040a0"&gt;update&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;JobMeasures.insertJobMeasuresProc&amp;quot;&lt;/font&gt;, &lt;font color="#2040a0"&gt;parameterMap&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;Integer&lt;/font&gt; &lt;font color="#2040a0"&gt;resultCode&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Integer&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;parameterMap&lt;/font&gt;.&lt;font color="#2040a0"&gt;get&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;messageType&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;resultMessage&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;parameterMap&lt;/font&gt;.&lt;font color="#2040a0"&gt;get&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;message&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;resultCode&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;:&amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;resultMessage&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-6042091190327743460?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/6042091190327743460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=6042091190327743460' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/6042091190327743460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/6042091190327743460'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2011/04/working-with-custom-oracle-object-types.html' title='Working With Custom Oracle Object Types In IBatis'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-3735243978380341404</id><published>2011-04-18T11:50:00.000-07:00</published><updated>2011-04-18T12:28:40.769-07:00</updated><title type='text'>Alternative to SimpleFormController And Using Annotations In Spring3.0</title><content type='html'>Previously in our project we were using Deprecated SimpleFormController class for handling all our web server side requests.&lt;br /&gt; &lt;br /&gt;Thanks to spring latest releases there is no need to implement any Controller classes and to use un-necessary XML tags floating in the project.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="#FF0000"&gt;1&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt; &lt;br /&gt;&lt;font color="#2040a0"&gt;JSP&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt; &lt;br /&gt; &lt;br /&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;form&lt;/font&gt; &lt;font color="#2040a0"&gt;id&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;uploadForm&amp;quot;&lt;/font&gt; &lt;font color="#2040a0"&gt;enctype&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;multipart/form-data&amp;quot;&lt;/font&gt; &lt;font color="#2040a0"&gt;action&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;&amp;lt;c:url value='/importdata/upload.html' /&amp;gt;&amp;quot;&lt;/font&gt; &lt;font color="#2040a0"&gt;method&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;POST&amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;input&lt;/font&gt; &lt;font color="#2040a0"&gt;type&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;file&amp;quot;&lt;/font&gt; &lt;font color="#2040a0"&gt;id&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;file&amp;quot;&lt;/font&gt; &lt;font color="#2040a0"&gt;name&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;file&amp;quot;&lt;/font&gt; &lt;font color="#2040a0"&gt;size&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;100&amp;quot;&lt;/font&gt; &lt;font color="#2040a0"&gt;maxlength&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;500&amp;quot;&lt;/font&gt; /&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;input&lt;/font&gt; &lt;font color="#2040a0"&gt;type&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;submit&amp;quot;&lt;/font&gt; &lt;font color="#2040a0"&gt;id&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;uploadButton&amp;quot;&lt;/font&gt; &lt;font color="#2040a0"&gt;value&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;Upload File&amp;quot;&lt;/font&gt; &lt;font color="#2040a0"&gt;onclick&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;document.getElementById('uploadButton').disabled='true';try{document.getElementById('uploadForm').submit();}catch(Exception e){document.getElementById('uploadButton').disabled='true'}&amp;quot;&lt;/font&gt; /&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;....&lt;br /&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;/&lt;font color="#2040a0"&gt;form&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt; &lt;br /&gt;&lt;font color="#2040a0"&gt;Our&lt;/font&gt; &lt;font color="#2040a0"&gt;jsp&lt;/font&gt; &lt;font color="#2040a0"&gt;will&lt;/font&gt; &lt;font color="#2040a0"&gt;infact&lt;/font&gt; &lt;font color="#2040a0"&gt;remains&lt;/font&gt; &lt;font color="#2040a0"&gt;the&lt;/font&gt; &lt;font color="#2040a0"&gt;same&lt;/font&gt; &lt;font color="#2040a0"&gt;and&lt;/font&gt; &lt;strong&gt;for&lt;/strong&gt; &lt;font color="#2040a0"&gt;submission&lt;/font&gt; &lt;font color="#2040a0"&gt;it&lt;/font&gt; &lt;font color="#2040a0"&gt;refers&lt;/font&gt; &lt;font color="#2040a0"&gt;to&lt;/font&gt; &lt;font color="#2040a0"&gt;the&lt;/font&gt; &lt;font color="#2040a0"&gt;URL&lt;/font&gt; &lt;font color="#2040a0"&gt;it&lt;/font&gt; &lt;font color="#2040a0"&gt;wants&lt;/font&gt; &lt;font color="#2040a0"&gt;to&lt;/font&gt; &lt;font color="#2040a0"&gt;navigate&lt;/font&gt;.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;font color="#FF0000"&gt;2&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;Remove&lt;/font&gt; &lt;font color="#2040a0"&gt;the&lt;/font&gt; &lt;font color="#2040a0"&gt;previous&lt;/font&gt; &lt;font color="#2040a0"&gt;declared&lt;/font&gt; &lt;font color="#2040a0"&gt;xml&lt;/font&gt; &lt;font color="#2040a0"&gt;configurations&lt;/font&gt; &lt;font color="#2040a0"&gt;in&lt;/font&gt; &lt;font color="#2040a0"&gt;the&lt;/font&gt; &lt;font color="#2040a0"&gt;corresponding&lt;/font&gt; &lt;font color="#2040a0"&gt;xml&lt;/font&gt; &lt;font color="#2040a0"&gt;file&lt;/font&gt;.&lt;br /&gt; &lt;br /&gt;&lt;font color="#FF0000"&gt;3&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;Now&lt;/font&gt; &lt;font color="#2040a0"&gt;Our&lt;/font&gt; &lt;font color="#2040a0"&gt;Controller&lt;/font&gt; &lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;will&lt;/font&gt; &lt;font color="#2040a0"&gt;use&lt;/font&gt; &lt;font color="#2040a0"&gt;the&lt;/font&gt; &lt;font color="#2040a0"&gt;annotations&lt;/font&gt;.&lt;br /&gt; &lt;br /&gt;@&lt;font color="#2040a0"&gt;Controller&lt;/font&gt;&lt;br /&gt;@&lt;font color="#2040a0"&gt;RequestMapping&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;value&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;/importdata/**&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;DoImportController&lt;/font&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt; &lt;br /&gt;            &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;ILookUpService&lt;/font&gt; &lt;font color="#2040a0"&gt;lookupService&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;successView&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;/importdata/viewImportSpreadsheetSummary&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;formView&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;/importdata/viewImportSpreadsheet&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt; &lt;br /&gt;  @&lt;font color="#2040a0"&gt;Autowired&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;public&lt;/strong&gt; &lt;font color="#2040a0"&gt;DoImportController&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;ILookUpService&lt;/font&gt; &lt;font color="#2040a0"&gt;lookupService&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;       &lt;strong&gt;this&lt;/strong&gt;.&lt;font color="#2040a0"&gt;lookupService&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;lookupService&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;            @&lt;font color="#2040a0"&gt;RequestMapping&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;value&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;/upload.html&amp;quot;&lt;/font&gt;, &lt;font color="#2040a0"&gt;method&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;RequestMethod&lt;/font&gt;.&lt;font color="#2040a0"&gt;POST&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;            &lt;strong&gt;public&lt;/strong&gt; &lt;font color="#2040a0"&gt;ModelAndView&lt;/font&gt; &lt;font color="#2040a0"&gt;onSubmit&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;HttpServletRequest&lt;/font&gt; &lt;font color="#2040a0"&gt;request&lt;/font&gt;,&lt;font color="#2040a0"&gt;HttpServletResponse&lt;/font&gt; &lt;font color="#2040a0"&gt;response&lt;/font&gt;,@&lt;font color="#2040a0"&gt;RequestParam&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;utility&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;utility&lt;/font&gt;,@&lt;font color="#2040a0"&gt;RequestParam&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;file&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;MultipartFile&lt;/font&gt; &lt;font color="#2040a0"&gt;file&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;            &lt;strong&gt;throws&lt;/strong&gt; &lt;font color="#2040a0"&gt;ServletException&lt;/font&gt;, &lt;font color="#2040a0"&gt;IOException&lt;/font&gt;, &lt;font color="#2040a0"&gt;Exception&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;                        .......&lt;br /&gt;                        &lt;strong&gt;return&lt;/strong&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;ModelAndView&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;successView&lt;/font&gt;, &lt;font color="#008000"&gt;&amp;quot;importResult&amp;quot;&lt;/font&gt;, &lt;font color="#2040a0"&gt;data&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;            &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;...&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-3735243978380341404?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/3735243978380341404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=3735243978380341404' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/3735243978380341404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/3735243978380341404'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2011/04/alternative-to-simpleformcontroller-and.html' title='Alternative to SimpleFormController And Using Annotations In Spring3.0'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-3726532669314678136</id><published>2010-10-02T04:27:00.000-07:00</published><updated>2010-10-02T04:33:25.692-07:00</updated><title type='text'>Using our own log4j.xml file with each WAR files - Log4j RepositorySelector</title><content type='html'>Today i came across this below article which helps us to have separate log4j files for each web application.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://community.jboss.org/wiki/Log4jRepositorySelector" target="_blank"&gt;http://community.jboss.org/wiki/Log4jRepositorySelector&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I tried to test in tomcat and it is working fine and ideally it should work for weblogic and other application server as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-3726532669314678136?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/3726532669314678136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=3726532669314678136' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/3726532669314678136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/3726532669314678136'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2010/10/using-our-own-log4jxml-file-with-each.html' title='Using our own log4j.xml file with each WAR files - Log4j RepositorySelector'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-7348989663276539577</id><published>2010-08-24T01:45:00.000-07:00</published><updated>2011-07-21T07:51:37.606-07:00</updated><title type='text'>Final Part - Implementing Multi Threaded Batching Framework In Java</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-7348989663276539577?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/7348989663276539577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=7348989663276539577' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/7348989663276539577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/7348989663276539577'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2010/08/final-part-implementing-multi-threaded.html' title='Final Part - Implementing Multi Threaded Batching Framework In Java'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-8768921391801716937</id><published>2010-08-24T01:44:00.000-07:00</published><updated>2010-08-24T01:45:05.683-07:00</updated><title type='text'>Part 2 - Implementing Multi Threaded Batching Framework In Java</title><content type='html'>&lt;pre&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;Batch&lt;/font&gt;.&lt;font color="#2040a0"&gt;java&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;Batch&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;final&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;ENFORCE_SINGLE_INSTANCE_PROPERTY_KEY&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;enforceSingleInstance&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;final&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;ASSUME_JOB_TIMEOUT_MINUTES_KEY&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;assumeJobTimeoutMinutes&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;final&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;GET_CONTROL_ENTRY_SQL&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;SELECT ID, PROCESS_NAME, START_TMS, END_TMS, SYSTIMESTAMP as CURRENT_TIME, TOTAL_ROWS, FAILURE_COUNT FROM BATCHING_FRAMEWORK_CONTROL WHERE PROCESS_NAME = ? FOR UPDATE&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;final&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;ADD_CONTROL_ENTRY_SQL&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;INSERT INTO BATCHING_FRAMEWORK_CONTROL (ID, PROCESS_NAME, START_TMS, END_TMS, TOTAL_ROWS) VALUES (BFC_ID_SEQ.NEXTVAL, ?, systimestamp, null, 0)&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;final&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;END_RUN_CONTROL_ENTRY_SQL&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;UPDATE BATCHING_FRAMEWORK_CONTROL SET END_TMS=systimestamp&amp;quot;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;, TOTAL_ROWS=?, FAILURE_COUNT=? WHERE PROCESS_NAME=?&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;final&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;START_RUN_CONTROL_ENTRY_SQL&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;UPDATE BATCHING_FRAMEWORK_CONTROL SET START_TMS=systimestamp, END_TMS=null&amp;quot;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;, TOTAL_ROWS=0, FAILURE_COUNT=0 WHERE PROCESS_NAME=?&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#444444"&gt;&lt;i&gt;/**&lt;br /&gt;   * 6 hours timeout assumption&lt;br /&gt;   */&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;final&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;ASSUME_JOB_TIMEOUT_MINUTES_DEFAULT_VALUE&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;360&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;Constructor&lt;/font&gt; &lt;font color="#2040a0"&gt;setConstructor&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;Constructor&lt;/font&gt; &lt;font color="#2040a0"&gt;processorConstructor&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;processorClassName&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;threads&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;metricDelay&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;List&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;BatchProcessor&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;processors&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;long&lt;/strong&gt; &lt;font color="#2040a0"&gt;startTime&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;long&lt;/strong&gt; &lt;font color="#2040a0"&gt;total&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;long&lt;/strong&gt; &lt;font color="#2040a0"&gt;count&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;long&lt;/strong&gt; &lt;font color="#2040a0"&gt;failureCount&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;boolean&lt;/strong&gt; &lt;font color="#2040a0"&gt;BatchSuccessful&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;true&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;numProcessors&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;-&lt;/font&gt;&lt;font color="#FF0000"&gt;1&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;boolean&lt;/strong&gt; &lt;font color="#2040a0"&gt;enforceSingleInstance&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;assumeJobTimeoutMilliseconds&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#444444"&gt;&lt;i&gt;/**&lt;br /&gt;   * The JDBC connection from the datasource&lt;br /&gt;   */&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;Connection&lt;/font&gt; &lt;font color="#2040a0"&gt;connection&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;font color="#2040a0"&gt;Batch&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Class&lt;/font&gt; &lt;font color="#2040a0"&gt;setClass&lt;/font&gt;, &lt;font color="#2040a0"&gt;Class&lt;/font&gt; &lt;font color="#2040a0"&gt;processorClass&lt;/font&gt;, &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;threads&lt;/font&gt;, &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;metricDelay&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;initialiseConfig&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;processorClass&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;try&lt;/strong&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;this&lt;/strong&gt;.&lt;font color="#2040a0"&gt;threads&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;threads&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;this&lt;/strong&gt;.&lt;font color="#2040a0"&gt;metricDelay&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;metricDelay&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;processors&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;Collections&lt;/font&gt;.&lt;font color="#2040a0"&gt;synchronizedList&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;ArrayList&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;BatchProcessor&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;this&lt;/strong&gt;.&lt;font color="#2040a0"&gt;threads&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;setConstructor&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;setClass&lt;/font&gt;.&lt;font color="#2040a0"&gt;getConstructor&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;Class&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;Batch&lt;/font&gt;.&lt;strong&gt;class&lt;/strong&gt;, &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;processorConstructor&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;processorClass&lt;/font&gt;.&lt;font color="#2040a0"&gt;getConstructor&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;Class&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;Batch&lt;/font&gt;.&lt;strong&gt;class&lt;/strong&gt;, &lt;font color="#2040a0"&gt;BatchSet&lt;/font&gt;.&lt;strong&gt;class&lt;/strong&gt;, &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;processorClassName&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;processorClass&lt;/font&gt;.&lt;font color="#2040a0"&gt;getName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;catch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Exception&lt;/font&gt; &lt;font color="#2040a0"&gt;exception&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;throw&lt;/strong&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;RuntimeException&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;errorMsg&lt;/font&gt;, &lt;font color="#2040a0"&gt;exception&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#444444"&gt;&lt;i&gt;/**&lt;br /&gt;   * Perform property configuration&lt;br /&gt;   */&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;initialiseConfig&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Class&lt;/font&gt; &lt;font color="#2040a0"&gt;processorClass&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;ResourceHandler&lt;/font&gt; &lt;font color="#2040a0"&gt;resourceHandler&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;ResourceHandler&lt;/font&gt;.&lt;font color="#2040a0"&gt;getInstance&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#444444"&gt;&lt;i&gt;/**&lt;br /&gt;     * Get property to see if we should enforce a single instance of this Batch&lt;br /&gt;     * to run at a time&lt;br /&gt;     */&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;enforceSingleInstance&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;Boolean&lt;/font&gt;.&lt;font color="#2040a0"&gt;valueOf&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;resourceHandler&lt;/font&gt;.&lt;font color="#2040a0"&gt;getValue&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Batch&lt;/font&gt;.&lt;strong&gt;class&lt;/strong&gt;, &lt;font color="#2040a0"&gt;ENFORCE_SINGLE_INSTANCE_PROPERTY_KEY&lt;/font&gt;, &lt;font color="#008000"&gt;&amp;quot;true&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;subclassEnforceSingleInstance&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;resourceHandler&lt;/font&gt;.&lt;font color="#2040a0"&gt;getValue&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;processorClass&lt;/font&gt;, &lt;font color="#2040a0"&gt;ENFORCE_SINGLE_INSTANCE_PROPERTY_KEY&lt;/font&gt;, &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;subclassEnforceSingleInstance&lt;/font&gt; &lt;font color="4444FF"&gt;!&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#444444"&gt;// we've a class specific version of this property, so use this instead&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;enforceSingleInstance&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;Boolean&lt;/font&gt;.&lt;font color="#2040a0"&gt;valueOf&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;subclassEnforceSingleInstance&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#444444"&gt;&lt;i&gt;/**&lt;br /&gt;     * Get property for maximum duration a job should run for before we treat it&lt;br /&gt;     * as&lt;br /&gt;     */&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;assumeJobTimeoutMilliseconds&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;Integer&lt;/font&gt;.&lt;font color="#2040a0"&gt;valueOf&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;resourceHandler&lt;/font&gt;.&lt;font color="#2040a0"&gt;getValue&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Batch&lt;/font&gt;.&lt;strong&gt;class&lt;/strong&gt;, &lt;font color="#2040a0"&gt;ASSUME_JOB_TIMEOUT_MINUTES_KEY&lt;/font&gt;,&lt;br /&gt;        &lt;font color="#2040a0"&gt;ASSUME_JOB_TIMEOUT_MINUTES_DEFAULT_VALUE&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;*&lt;/font&gt; &lt;font color="#FF0000"&gt;60000&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;subclassAssumeJobTimeoutMinutes&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;resourceHandler&lt;/font&gt;.&lt;font color="#2040a0"&gt;getValue&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;processorClass&lt;/font&gt;, &lt;font color="#2040a0"&gt;ASSUME_JOB_TIMEOUT_MINUTES_KEY&lt;/font&gt;, &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;subclassAssumeJobTimeoutMinutes&lt;/font&gt; &lt;font color="4444FF"&gt;!&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#444444"&gt;// we've a class specific version of this property, so use this instead&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;assumeJobTimeoutMilliseconds&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;Integer&lt;/font&gt;.&lt;font color="#2040a0"&gt;valueOf&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;subclassAssumeJobTimeoutMinutes&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;*&lt;/font&gt; &lt;font color="#FF0000"&gt;60000&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;synchronized&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;finished&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;final&lt;/strong&gt; &lt;font color="#2040a0"&gt;BatchProcessor&lt;/font&gt; &lt;font color="#2040a0"&gt;processor&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;processors&lt;/font&gt;.&lt;font color="#2040a0"&gt;contains&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;processor&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;processors&lt;/font&gt;.&lt;font color="#2040a0"&gt;remove&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;processor&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;processors&lt;/font&gt;.&lt;font color="#2040a0"&gt;isEmpty&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;notify&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;synchronized&lt;/strong&gt; &lt;strong&gt;boolean&lt;/strong&gt; &lt;font color="#2040a0"&gt;done&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;   &lt;br /&gt;    &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;processors&lt;/font&gt;.&lt;font color="#2040a0"&gt;isEmpty&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;return&lt;/strong&gt; &lt;strong&gt;true&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;try&lt;/strong&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;wait&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;metricDelay&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;catch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;InterruptedException&lt;/font&gt; &lt;font color="#2040a0"&gt;interruptedException&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;return&lt;/strong&gt; &lt;strong&gt;false&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;execute&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;ControlTO&lt;/font&gt; &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;markJobAsRunning&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;processorClassName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;controlTO&lt;/font&gt;.&lt;font color="#2040a0"&gt;isJobIsRunning&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#444444"&gt;//  // Do something meaningful like record this into error table etc&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;return&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;RuntimeException&lt;/font&gt; &lt;font color="#2040a0"&gt;firstException&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;try&lt;/strong&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;runProcesses&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;catch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;RuntimeException&lt;/font&gt; &lt;font color="#2040a0"&gt;re&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;firstException&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;re&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;finally&lt;/strong&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;try&lt;/strong&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;completeControlEntry&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;processorClassName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;catch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;RuntimeException&lt;/font&gt; &lt;font color="#2040a0"&gt;re&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;firstException&lt;/font&gt; &lt;font color="4444FF"&gt;!&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;          &lt;font color="#2040a0"&gt;firstException&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;re&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;firstException&lt;/font&gt; &lt;font color="4444FF"&gt;!&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;throw&lt;/strong&gt; &lt;font color="#2040a0"&gt;firstException&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#444444"&gt;&lt;i&gt;/**&lt;br /&gt;   * This performs the main functionality of this class, that is, get the set of&lt;br /&gt;   * data to work on an then dish out this work to each thread. This code will&lt;br /&gt;   * only run if this is the only instance of this process running&lt;br /&gt;   * &lt;br /&gt;   */&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;runProcesses&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;BatchSet&lt;/font&gt; &lt;font color="#2040a0"&gt;set&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;set&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;try&lt;/strong&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;try&lt;/strong&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;set&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;BatchSet&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;setConstructor&lt;/font&gt;.&lt;font color="#2040a0"&gt;newInstance&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;Object&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;this&lt;/strong&gt;, &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;set&lt;/font&gt;.&lt;font color="#2040a0"&gt;open&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;total&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;set&lt;/font&gt;.&lt;font color="#2040a0"&gt;total&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;strong&gt;for&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;i&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;font color="#2040a0"&gt;i&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt; &lt;font color="#2040a0"&gt;threads&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;font color="#2040a0"&gt;i&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;          &lt;strong&gt;final&lt;/strong&gt; &lt;font color="#2040a0"&gt;BatchProcessor&lt;/font&gt; &lt;font color="#2040a0"&gt;processor&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;BatchProcessor&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;processorConstructor&lt;/font&gt;.&lt;font color="#2040a0"&gt;newInstance&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;Object&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;this&lt;/strong&gt;, &lt;font color="#2040a0"&gt;set&lt;/font&gt;, &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;          &lt;font color="#2040a0"&gt;processors&lt;/font&gt;.&lt;font color="#2040a0"&gt;add&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;processor&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;catch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Exception&lt;/font&gt; &lt;font color="#2040a0"&gt;e&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;strong&gt;throw&lt;/strong&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;RuntimeException&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;Error constructing Batch&amp;quot;&lt;/font&gt;, &lt;font color="#2040a0"&gt;e&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;startTime&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;currentTimeMillis&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;List&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;BatchProcessor&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;toStart&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;ArrayList&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;BatchProcessor&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;processors&lt;/font&gt;.&lt;font color="#2040a0"&gt;size&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;toStart&lt;/font&gt;.&lt;font color="#2040a0"&gt;addAll&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;processors&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;numProcessors&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;processors&lt;/font&gt;.&lt;font color="#2040a0"&gt;size&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;      &lt;strong&gt;for&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;BatchProcessor&lt;/font&gt; &lt;font color="#2040a0"&gt;processor&lt;/font&gt; &lt;font color="4444FF"&gt;:&lt;/font&gt; &lt;font color="#2040a0"&gt;toStart&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;Thread&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;processor&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;.&lt;font color="#2040a0"&gt;start&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;      &lt;strong&gt;do&lt;/strong&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;done&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;          &lt;strong&gt;break&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;count&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;set&lt;/font&gt;.&lt;font color="#2040a0"&gt;count&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;while&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;true&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;      &lt;font color="#444444"&gt;// output final stats&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;catch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;RuntimeException&lt;/font&gt; &lt;font color="#2040a0"&gt;re&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#444444"&gt;// ensure we catch this and log it as we DO NOT want any missing messages&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;logger&lt;/font&gt;.&lt;font color="#2040a0"&gt;logMessage&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Logger&lt;/font&gt;.&lt;font color="#2040a0"&gt;LEVEL_ERROR&lt;/font&gt;, &lt;font color="#008000"&gt;&amp;quot;An exception occurred during the Batch run:&amp;quot;&lt;/font&gt;, &lt;font color="#2040a0"&gt;re&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;      &lt;font color="#444444"&gt;// this Batch hasn't worked correctly...&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;setBatchSuccessful&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;false&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;      &lt;font color="#444444"&gt;// throw to client - this may cause another version of the message&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;throw&lt;/strong&gt; &lt;font color="#2040a0"&gt;re&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;finally&lt;/strong&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;set&lt;/font&gt; &lt;font color="4444FF"&gt;!&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;set&lt;/font&gt;.&lt;font color="#2040a0"&gt;close&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#444444"&gt;&lt;i&gt;/**&lt;br /&gt;     * One or more rows being processed have failed so throw a RuntimeException&lt;br /&gt;     * to inform the user of this.&lt;br /&gt;     */&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;!&lt;/font&gt;&lt;font color="#2040a0"&gt;isBatchSuccessful&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;throw&lt;/strong&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;RuntimeException&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;An error occurred when processing 1 or more of the rows in the set&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#444444"&gt;&lt;i&gt;/**&lt;br /&gt;   * Has the Batch ran successfully?&lt;br /&gt;   * &lt;br /&gt;   * @return&lt;br /&gt;   */&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;boolean&lt;/strong&gt; &lt;font color="#2040a0"&gt;isBatchSuccessful&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;BatchSuccessful&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#444444"&gt;&lt;i&gt;/**&lt;br /&gt;   * Set whether the Batch ran successfully or not&lt;br /&gt;   * &lt;br /&gt;   * @param BatchSuccessful&lt;br /&gt;   */&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;synchronized&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;setBatchSuccessful&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;boolean&lt;/strong&gt; &lt;font color="#2040a0"&gt;BatchSuccessful&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;this&lt;/strong&gt;.&lt;font color="#2040a0"&gt;BatchSuccessful&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;BatchSuccessful&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;!&lt;/font&gt;&lt;font color="#2040a0"&gt;BatchSuccessful&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#444444"&gt;// increment the number of failures we've had&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;failureCount&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#444444"&gt;&lt;i&gt;/**&lt;br /&gt;   * Get the number of failures that have occurred.&lt;br /&gt;   * &lt;br /&gt;   * @return&lt;br /&gt;   */&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;long&lt;/strong&gt; &lt;font color="#2040a0"&gt;getFailureCount&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;failureCount&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;ControlTO&lt;/font&gt; &lt;font color="#2040a0"&gt;markJobAsRunning&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;processName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;Connection&lt;/font&gt; &lt;font color="#2040a0"&gt;conn&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;RuntimeException&lt;/font&gt; &lt;font color="#2040a0"&gt;firstException&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;ControlTO&lt;/font&gt; &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;!&lt;/font&gt;&lt;font color="#2040a0"&gt;enforceSingleInstance&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;return&lt;/strong&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;ControlTO&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;try&lt;/strong&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;conn&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;getConnection&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;getControlEntry&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;conn&lt;/font&gt;, &lt;font color="#2040a0"&gt;processName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;      &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;controlTO&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#444444"&gt;// this is the 1st time we've encountered this, so add new entry in the&lt;/font&gt;&lt;br /&gt;        &lt;font color="#444444"&gt;// control table&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;Long&lt;/font&gt; &lt;font color="#2040a0"&gt;maxBatchingId&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#2040a0"&gt;getMaxBatchingControlID&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;conn&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;newControlEntry&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;conn&lt;/font&gt;,&lt;font color="#2040a0"&gt;maxBatchingId&lt;/font&gt;,&lt;font color="#2040a0"&gt;processName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;else&lt;/strong&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#444444"&gt;// calculate whether we think this job has been assumed to have timed&lt;/font&gt;&lt;br /&gt;        &lt;font color="#444444"&gt;// out&lt;/font&gt;&lt;br /&gt;        &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;controlTO&lt;/font&gt;.&lt;font color="#2040a0"&gt;getElapsedRuntime&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;assumeJobTimeoutMilliseconds&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;          &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;duration&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;DurationFormatUtils&lt;/font&gt;.&lt;font color="#2040a0"&gt;formatDurationWords&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;controlTO&lt;/font&gt;.&lt;font color="#2040a0"&gt;getElapsedRuntime&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;, &lt;strong&gt;true&lt;/strong&gt;, &lt;strong&gt;true&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;          &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;overrideDuration&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;DurationFormatUtils&lt;/font&gt;.&lt;font color="#2040a0"&gt;formatDurationWords&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;assumeJobTimeoutMilliseconds&lt;/font&gt;, &lt;strong&gt;true&lt;/strong&gt;, &lt;strong&gt;true&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;          &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;warningMesssage&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;markJobAsRunning(&amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt;.&lt;font color="#2040a0"&gt;getProcessName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;              &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;) - job has timed out. Running anyway. Job has been running for &amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;duration&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot; and timeout period is &amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;overrideDuration&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;          &lt;font color="#2040a0"&gt;logger&lt;/font&gt;.&lt;font color="#2040a0"&gt;logMessage&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Logger&lt;/font&gt;.&lt;font color="#2040a0"&gt;LEVEL_WARN&lt;/font&gt;, &lt;font color="#2040a0"&gt;warningMesssage&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;          &lt;font color="#2040a0"&gt;RuntimeException&lt;/font&gt; &lt;font color="#2040a0"&gt;dummyException&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;RuntimeException&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;BatchingFramework Warning: &amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt;.&lt;font color="#2040a0"&gt;getProcessName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot; &amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;warningMesssage&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;strong&gt;else&lt;/strong&gt;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;          &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;controlTO&lt;/font&gt;.&lt;font color="#2040a0"&gt;getEndTimestamp&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;          &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;            &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;logger&lt;/font&gt;.&lt;font color="#2040a0"&gt;isDebugEnabled&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;            &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;              &lt;font color="#2040a0"&gt;logger&lt;/font&gt;.&lt;font color="#2040a0"&gt;logMessage&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Logger&lt;/font&gt;.&lt;font color="#2040a0"&gt;LEVEL_DEBUG&lt;/font&gt;, &lt;font color="#008000"&gt;&amp;quot;markJobAsRunning() returned &amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;strong&gt;true&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;            &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;conn&lt;/font&gt;.&lt;font color="#2040a0"&gt;rollback&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt;.&lt;font color="#2040a0"&gt;setJobIsRunning&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;true&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;          &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;updateControlEntry&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;conn&lt;/font&gt;, &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt;, &lt;strong&gt;false&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;conn&lt;/font&gt;.&lt;font color="#2040a0"&gt;commit&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;catch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Exception&lt;/font&gt; &lt;font color="#2040a0"&gt;e&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;firstException&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;RuntimeException&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;e&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;finally&lt;/strong&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;try&lt;/strong&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;closeConnection&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#444444"&gt;&lt;i&gt;/**&lt;br /&gt;   * Mark the job as complete&lt;br /&gt;   */&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;completeControlEntry&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;processName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;!&lt;/font&gt;&lt;font color="#2040a0"&gt;enforceSingleInstance&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;return&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;Connection&lt;/font&gt; &lt;font color="#2040a0"&gt;conn&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;RuntimeException&lt;/font&gt; &lt;font color="#2040a0"&gt;firstException&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;try&lt;/strong&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;conn&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;getConnection&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;ControlTO&lt;/font&gt; &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;getControlEntry&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;conn&lt;/font&gt;, &lt;font color="#2040a0"&gt;processName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt;.&lt;font color="#2040a0"&gt;setTotalRows&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;total&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt;.&lt;font color="#2040a0"&gt;setFailureCount&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;failureCount&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;updateControlEntry&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;conn&lt;/font&gt;, &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt;, &lt;strong&gt;true&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;conn&lt;/font&gt;.&lt;font color="#2040a0"&gt;commit&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;catch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Exception&lt;/font&gt; &lt;font color="#2040a0"&gt;e&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;finally&lt;/strong&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;try&lt;/strong&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;closeConnection&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;catch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Exception&lt;/font&gt; &lt;font color="#2040a0"&gt;e&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#444444"&gt;&lt;i&gt;/**&lt;br /&gt;   * Get the control data for a process&lt;br /&gt;   * &lt;br /&gt;   * @param conn&lt;br /&gt;   * @param processName&lt;br /&gt;   * @return&lt;br /&gt;   */&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;ControlTO&lt;/font&gt; &lt;font color="#2040a0"&gt;getControlEntry&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Connection&lt;/font&gt; &lt;font color="#2040a0"&gt;conn&lt;/font&gt;, &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;processName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;Exception&lt;/font&gt; &lt;font color="#2040a0"&gt;firstException&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;ControlTO&lt;/font&gt; &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;PreparedStatement&lt;/font&gt; &lt;font color="#2040a0"&gt;ps&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;ResultSet&lt;/font&gt; &lt;font color="#2040a0"&gt;rs&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;ps&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;conn&lt;/font&gt;.&lt;font color="#2040a0"&gt;prepareStatement&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;GET_CONTROL_ENTRY_SQL&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;ps&lt;/font&gt;.&lt;font color="#2040a0"&gt;setString&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#FF0000"&gt;1&lt;/font&gt;, &lt;font color="#2040a0"&gt;processName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#444444"&gt;//  TODO continue writing code and execute the prepared statement and store all the values in ControlTO&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;Long&lt;/font&gt; &lt;font color="#2040a0"&gt;getMaxBatchingControlID&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Connection&lt;/font&gt; &lt;font color="#2040a0"&gt;conn&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;Exception&lt;/font&gt; &lt;font color="#2040a0"&gt;firstException&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;Long&lt;/font&gt; &lt;font color="#2040a0"&gt;maxId&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;PreparedStatement&lt;/font&gt; &lt;font color="#2040a0"&gt;ps&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;ResultSet&lt;/font&gt; &lt;font color="#2040a0"&gt;rs&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;ps&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;conn&lt;/font&gt;.&lt;font color="#2040a0"&gt;prepareStatement&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;GET_MAX_ID_SQL&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#444444"&gt;//  TODO continue writing code and execute the prepared statement&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;maxId&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#444444"&gt;&lt;i&gt;/**&lt;br /&gt;   * Add a new control entry for a process&lt;br /&gt;   */&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;ControlTO&lt;/font&gt; &lt;font color="#2040a0"&gt;newControlEntry&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Connection&lt;/font&gt; &lt;font color="#2040a0"&gt;conn&lt;/font&gt;, &lt;font color="#2040a0"&gt;Long&lt;/font&gt; &lt;font color="#2040a0"&gt;maxBatchingId&lt;/font&gt;,&lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;processName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;RuntimeException&lt;/font&gt; &lt;font color="#2040a0"&gt;firstException&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;PreparedStatement&lt;/font&gt; &lt;font color="#2040a0"&gt;ps&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;ps&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;conn&lt;/font&gt;.&lt;font color="#2040a0"&gt;prepareStatement&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;ADD_CONTROL_ENTRY_SQL&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#444444"&gt;//TODO continue writing code and execute the prepared statement&lt;/font&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;font color="#444444"&gt;// now read it back&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;ControlTO&lt;/font&gt; &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;getControlEntry&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;conn&lt;/font&gt;, &lt;font color="#2040a0"&gt;processName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#444444"&gt;&lt;i&gt;/**&lt;br /&gt;   * Update new control entry for a process&lt;br /&gt;   */&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;ControlTO&lt;/font&gt; &lt;font color="#2040a0"&gt;updateControlEntry&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Connection&lt;/font&gt; &lt;font color="#2040a0"&gt;conn&lt;/font&gt;, &lt;font color="#2040a0"&gt;ControlTO&lt;/font&gt; &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt;, &lt;strong&gt;boolean&lt;/strong&gt; &lt;font color="#2040a0"&gt;endJob&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;RuntimeException&lt;/font&gt; &lt;font color="#2040a0"&gt;firstException&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;PreparedStatement&lt;/font&gt; &lt;font color="#2040a0"&gt;ps&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;try&lt;/strong&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;endJob&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#444444"&gt;// we're ending job, so mark end_tms with timestamp and add a few&lt;/font&gt;&lt;br /&gt;        &lt;font color="#444444"&gt;// metrics&lt;/font&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;font color="#2040a0"&gt;Calendar&lt;/font&gt; &lt;font color="#2040a0"&gt;cal&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;Calendar&lt;/font&gt;.&lt;font color="#2040a0"&gt;getInstance&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;java&lt;/font&gt;.&lt;font color="#2040a0"&gt;sql&lt;/font&gt;.&lt;font color="#2040a0"&gt;Date&lt;/font&gt; &lt;font color="#2040a0"&gt;jsqlD&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;java&lt;/font&gt;.&lt;font color="#2040a0"&gt;sql&lt;/font&gt;.&lt;font color="#2040a0"&gt;Date&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;cal&lt;/font&gt;.&lt;font color="#2040a0"&gt;getTime&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;.&lt;font color="#2040a0"&gt;getTime&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;font color="#2040a0"&gt;ps&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;conn&lt;/font&gt;.&lt;font color="#2040a0"&gt;prepareStatement&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;END_RUN_CONTROL_ENTRY_SQL&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;ps&lt;/font&gt;.&lt;font color="#2040a0"&gt;setDate&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#FF0000"&gt;1&lt;/font&gt;,&lt;font color="#2040a0"&gt;jsqlD&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;ps&lt;/font&gt;.&lt;font color="#2040a0"&gt;setLong&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#FF0000"&gt;2&lt;/font&gt;, &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt;.&lt;font color="#2040a0"&gt;getTotalRows&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;ps&lt;/font&gt;.&lt;font color="#2040a0"&gt;setLong&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#FF0000"&gt;3&lt;/font&gt;, &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt;.&lt;font color="#2040a0"&gt;getFailureCount&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;ps&lt;/font&gt;.&lt;font color="#2040a0"&gt;setString&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#FF0000"&gt;4&lt;/font&gt;, &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt;.&lt;font color="#2040a0"&gt;getProcessName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;else&lt;/strong&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;font color="#2040a0"&gt;Calendar&lt;/font&gt; &lt;font color="#2040a0"&gt;cal&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;Calendar&lt;/font&gt;.&lt;font color="#2040a0"&gt;getInstance&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;java&lt;/font&gt;.&lt;font color="#2040a0"&gt;sql&lt;/font&gt;.&lt;font color="#2040a0"&gt;Date&lt;/font&gt; &lt;font color="#2040a0"&gt;jsqlD&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;java&lt;/font&gt;.&lt;font color="#2040a0"&gt;sql&lt;/font&gt;.&lt;font color="#2040a0"&gt;Date&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;cal&lt;/font&gt;.&lt;font color="#2040a0"&gt;getTime&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;.&lt;font color="#2040a0"&gt;getTime&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#444444"&gt;// we're starting a job, so set new start time and mark end time as null&lt;/font&gt;&lt;br /&gt;        &lt;font color="#444444"&gt;// to indicate it's running + reset metrics&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;ps&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;conn&lt;/font&gt;.&lt;font color="#2040a0"&gt;prepareStatement&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;START_RUN_CONTROL_ENTRY_SQL&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;ps&lt;/font&gt;.&lt;font color="#2040a0"&gt;setDate&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#FF0000"&gt;1&lt;/font&gt;,&lt;font color="#2040a0"&gt;jsqlD&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;ps&lt;/font&gt;.&lt;font color="#2040a0"&gt;setString&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#FF0000"&gt;2&lt;/font&gt;, &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt;.&lt;font color="#2040a0"&gt;getProcessName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;ps&lt;/font&gt;.&lt;font color="#2040a0"&gt;execute&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;catch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;SQLException&lt;/font&gt; &lt;font color="#2040a0"&gt;e&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;finally&lt;/strong&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;try&lt;/strong&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;ps&lt;/font&gt;.&lt;font color="#2040a0"&gt;close&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;catch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;SQLException&lt;/font&gt; &lt;font color="#2040a0"&gt;e&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;controlTO&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#444444"&gt;&lt;i&gt;/**&lt;br /&gt;   * Get a database connection from the datasource&lt;br /&gt;   */&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;Connection&lt;/font&gt; &lt;font color="#2040a0"&gt;getConnection&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#444444"&gt;// Write code to return java.sql.Connection &lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;connection&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#444444"&gt;&lt;i&gt;/**&lt;br /&gt;   * Return the connection to the datasource&lt;br /&gt;   */&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;closeConnection&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#444444"&gt;// Write code to close Connection&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;ControlTO&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;Long&lt;/font&gt; &lt;font color="#2040a0"&gt;id&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;processName&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;Date&lt;/font&gt; &lt;font color="#2040a0"&gt;startTimestamp&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;Date&lt;/font&gt; &lt;font color="#2040a0"&gt;endTimestamp&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;Date&lt;/font&gt; &lt;font color="#2040a0"&gt;currentTimestamp&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;Long&lt;/font&gt; &lt;font color="#2040a0"&gt;totalRows&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;Long&lt;/font&gt; &lt;font color="#2040a0"&gt;failureCount&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;boolean&lt;/strong&gt; &lt;font color="#2040a0"&gt;jobIsRunning&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;   &lt;font color="#444444"&gt;// TODO Add get set methods for all fields &lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;long&lt;/strong&gt; &lt;font color="#2040a0"&gt;getElapsedRuntime&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;getEndTimestamp&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;!&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#444444"&gt;// this is a job which has finished&lt;/font&gt;&lt;br /&gt;        &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;getEndTimestamp&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;.&lt;font color="#2040a0"&gt;getTime&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;-&lt;/font&gt; &lt;font color="#2040a0"&gt;getStartTimestamp&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;.&lt;font color="#2040a0"&gt;getTime&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;      &lt;font color="#444444"&gt;// this is a job which is still running&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;getCurrentTimestamp&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;.&lt;font color="#2040a0"&gt;getTime&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;-&lt;/font&gt; &lt;font color="#2040a0"&gt;getStartTimestamp&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;.&lt;font color="#2040a0"&gt;getTime&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;.. &lt;font color="#2040a0"&gt;TO&lt;/font&gt; &lt;font color="#2040a0"&gt;Be&lt;/font&gt; &lt;font color="#2040a0"&gt;Continued&lt;/font&gt; &lt;font color="#2040a0"&gt;In&lt;/font&gt; &lt;font color="#2040a0"&gt;next&lt;/font&gt; &lt;font color="#2040a0"&gt;article&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-8768921391801716937?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/8768921391801716937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=8768921391801716937' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/8768921391801716937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/8768921391801716937'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2010/08/part-2-implementing-multi-threaded.html' title='Part 2 - Implementing Multi Threaded Batching Framework In Java'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-7652442082935732566</id><published>2010-08-24T01:42:00.000-07:00</published><updated>2010-08-24T01:43:39.859-07:00</updated><title type='text'>Part 1 - Implementing Multi Threaded Batching Framework In Java</title><content type='html'>In our project we have currently a requirement to migrate(upgrade) data In Some Olden Version Of Release To Latest Version.&lt;br /&gt;&lt;br /&gt;In olden version our schema and design of database tables are quite different when compared to current release.&lt;br /&gt;&lt;br /&gt;So as various releases have progressed our java code has also been changed quite drastically.&lt;br /&gt;&lt;br /&gt;Now recently we had one requirement to write a Java API which when given a application number will convert the data for the application number from older version to latest version schema tables.&lt;br /&gt;&lt;br /&gt;As there are 1000's of applications which need to be converted hence we are told to write a multi-threaded batching framework which will run the conversion at once.&lt;br /&gt;&lt;br /&gt;Now let us look into how we implemented in our project.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Firstly thanks to Our Developer Roy Harrington who has implemented this framework.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Batching Framework contains 4 primary classes&lt;br /&gt;&lt;br /&gt;a) Batch.java&lt;br /&gt;b) BatchProcess abstract class&lt;br /&gt;c) BatchProcessor abstract class&lt;br /&gt;d) BatchSet abstract class &lt;br /&gt;&lt;br /&gt;Code and the description for each method is given as below.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;BatchSet&lt;/font&gt;.&lt;font color="#2040a0"&gt;java&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;abstract&lt;/strong&gt; &lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;BatchSet&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;Batch&lt;/font&gt; &lt;font color="#2040a0"&gt;batch&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;boolean&lt;/strong&gt; &lt;font color="#2040a0"&gt;finished&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;long&lt;/strong&gt; &lt;font color="#2040a0"&gt;count&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;font color="#2040a0"&gt;BatchSet&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Batch&lt;/font&gt; &lt;font color="#2040a0"&gt;batch&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;this&lt;/strong&gt;.&lt;font color="#2040a0"&gt;batch&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;batch&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;finished&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;false&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;abstract&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;open&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;abstract&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;close&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;abstract&lt;/strong&gt; &lt;strong&gt;long&lt;/strong&gt; &lt;font color="#2040a0"&gt;total&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;protected&lt;/strong&gt; &lt;strong&gt;abstract&lt;/strong&gt; &lt;font color="#2040a0"&gt;Object&lt;/font&gt; &lt;font color="#2040a0"&gt;nextRow&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#444444"&gt;&lt;i&gt;/**&lt;br /&gt;   * Returns the next object from the BatchSet&lt;br /&gt;   * &lt;br /&gt;   * @return&lt;br /&gt;   */&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;synchronized&lt;/strong&gt; &lt;font color="#2040a0"&gt;Object&lt;/font&gt; &lt;font color="#2040a0"&gt;next&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;try&lt;/strong&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;finished&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;return&lt;/strong&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;Object&lt;/font&gt; &lt;font color="#2040a0"&gt;row&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;nextRow&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;null&lt;/strong&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;row&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;finished&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;true&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;else&lt;/strong&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;count&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;row&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;catch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;RuntimeException&lt;/font&gt; &lt;font color="#2040a0"&gt;re&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#444444"&gt;// things are screwed if this has happened, so mark as finished&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;batch&lt;/font&gt;.&lt;font color="#2040a0"&gt;setBatchSuccessful&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;false&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;finished&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;true&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;      &lt;strong&gt;return&lt;/strong&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;font color="#444444"&gt;// indicate nothing more&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#444444"&gt;&lt;i&gt;/**&lt;br /&gt;   * Returns the total number of rows processed so far&lt;br /&gt;   * &lt;br /&gt;   * @return&lt;br /&gt;   */&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;synchronized&lt;/strong&gt; &lt;strong&gt;long&lt;/strong&gt; &lt;font color="#2040a0"&gt;count&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;count&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;BatchProcessor&lt;/font&gt;.&lt;font color="#2040a0"&gt;java&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;abstract&lt;/strong&gt; &lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;BatchProcessor&lt;/font&gt; &lt;strong&gt;implements&lt;/strong&gt; &lt;font color="#2040a0"&gt;Runnable&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;Batch&lt;/font&gt; &lt;font color="#2040a0"&gt;batch&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;BatchSet&lt;/font&gt; &lt;font color="#2040a0"&gt;set&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;font color="#2040a0"&gt;BatchProcessor&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Batch&lt;/font&gt; &lt;font color="#2040a0"&gt;batch&lt;/font&gt;, &lt;font color="#2040a0"&gt;BatchSet&lt;/font&gt; &lt;font color="#2040a0"&gt;set&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;this&lt;/strong&gt;.&lt;font color="#2040a0"&gt;batch&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;batch&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;this&lt;/strong&gt;.&lt;font color="#2040a0"&gt;set&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;set&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;run&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;Object&lt;/font&gt; &lt;font color="#2040a0"&gt;next&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;try&lt;/strong&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;try&lt;/strong&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;begin&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;catch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Exception&lt;/font&gt; &lt;font color="#2040a0"&gt;e&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#444444"&gt;// mark batch as having an error&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;batch&lt;/font&gt;.&lt;font color="#2040a0"&gt;setBatchSuccessful&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;false&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;recordError&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;e&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;strong&gt;return&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;      &lt;strong&gt;while&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;null&lt;/strong&gt; &lt;font color="4444FF"&gt;!&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;next&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;set&lt;/font&gt;.&lt;font color="#2040a0"&gt;next&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;strong&gt;try&lt;/strong&gt;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;          &lt;font color="#2040a0"&gt;execute&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;next&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;          &lt;strong&gt;continue&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;strong&gt;catch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Throwable&lt;/font&gt; &lt;font color="#2040a0"&gt;t&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;          &lt;font color="#444444"&gt;// mark batch as having an error&lt;/font&gt;&lt;br /&gt;          &lt;font color="#2040a0"&gt;batch&lt;/font&gt;.&lt;font color="#2040a0"&gt;setBatchSuccessful&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;false&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;          &lt;font color="#2040a0"&gt;recordError&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;t&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;      &lt;strong&gt;try&lt;/strong&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;end&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;catch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Exception&lt;/font&gt; &lt;font color="#2040a0"&gt;e&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#444444"&gt;// mark batch as having an error&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;batch&lt;/font&gt;.&lt;font color="#2040a0"&gt;setBatchSuccessful&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;false&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;strong&gt;return&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;finally&lt;/strong&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;batch&lt;/font&gt;.&lt;font color="#2040a0"&gt;finished&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;this&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;abstract&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;begin&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;throws&lt;/strong&gt; &lt;font color="#2040a0"&gt;Exception&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;abstract&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;execute&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Object&lt;/font&gt; &lt;font color="#2040a0"&gt;obj&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;throws&lt;/strong&gt; &lt;font color="#2040a0"&gt;Exception&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;abstract&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;end&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;throws&lt;/strong&gt; &lt;font color="#2040a0"&gt;Exception&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;BatchProcess&lt;/font&gt;.&lt;font color="#2040a0"&gt;java&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;abstract&lt;/strong&gt; &lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;BatchProcess&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;final&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;METRIC_DELAY_KEY&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;metricDelay&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;final&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;METRIC_DELAY_DEFAULT&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;5000&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;final&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;THREADS_KEY&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;threads&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;final&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;THREADS_DEFAULT&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;5&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#444444"&gt;&lt;i&gt;/**&lt;br /&gt;   * Must implement this to do the work&lt;br /&gt;   *&lt;br /&gt;   */&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;protected&lt;/strong&gt; &lt;strong&gt;abstract&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;goProcess&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#444444"&gt;&lt;i&gt;/**&lt;br /&gt;   * Get the metric delay for the class&lt;br /&gt;   *&lt;br /&gt;   */&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;protected&lt;/strong&gt; &lt;strong&gt;final&lt;/strong&gt; &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;getMetricDelay&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;try&lt;/strong&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;ResourceHandler&lt;/font&gt; &lt;font color="#2040a0"&gt;resourceHandler&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;ResourceHandler&lt;/font&gt;.&lt;font color="#2040a0"&gt;getInstance&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;      &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;Integer&lt;/font&gt;.&lt;font color="#2040a0"&gt;valueOf&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;resourceHandler&lt;/font&gt;.&lt;font color="#2040a0"&gt;getValue&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;getClass&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;, &lt;font color="#2040a0"&gt;METRIC_DELAY_KEY&lt;/font&gt;, &lt;font color="#2040a0"&gt;METRIC_DELAY_DEFAULT&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;.&lt;font color="#2040a0"&gt;trim&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;.&lt;font color="#2040a0"&gt;intValue&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;catch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;NumberFormatException&lt;/font&gt; &lt;font color="#2040a0"&gt;e&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#FF0000"&gt;5000&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#444444"&gt;&lt;i&gt;/**&lt;br /&gt;   * Get the maximum number of threads for this class&lt;br /&gt;   *&lt;br /&gt;   */&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;protected&lt;/strong&gt; &lt;strong&gt;final&lt;/strong&gt; &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;getMaxThreads&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;try&lt;/strong&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;ResourceHandler&lt;/font&gt; &lt;font color="#2040a0"&gt;resourceHandler&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;ResourceHandler&lt;/font&gt;.&lt;font color="#2040a0"&gt;getInstance&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;Integer&lt;/font&gt;.&lt;font color="#2040a0"&gt;valueOf&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;resourceHandler&lt;/font&gt;.&lt;font color="#2040a0"&gt;getValue&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;getClass&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;, &lt;font color="#2040a0"&gt;THREADS_KEY&lt;/font&gt;, &lt;font color="#2040a0"&gt;THREADS_DEFAULT&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;.&lt;font color="#2040a0"&gt;trim&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;.&lt;font color="#2040a0"&gt;intValue&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;catch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;NumberFormatException&lt;/font&gt; &lt;font color="#2040a0"&gt;e&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#FF0000"&gt;5&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#444444"&gt;&lt;i&gt;/**&lt;br /&gt;   * Check for the process running, write an entry to say we are running, call&lt;br /&gt;   * goProcess() on subclass, clear down process table&lt;br /&gt;   */&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;final&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;go&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;processName&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;getClass&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;.&lt;font color="#2040a0"&gt;getName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;try&lt;/strong&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#444444"&gt;// Execute actual Process&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;goProcess&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;catch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;RuntimeException&lt;/font&gt; &lt;font color="#2040a0"&gt;re&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;exit&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#FF0000"&gt;1&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.. TO Be Continued In next article&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-7652442082935732566?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/7652442082935732566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=7652442082935732566' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/7652442082935732566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/7652442082935732566'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2010/08/part-1-implementing-multi-threaded.html' title='Part 1 - Implementing Multi Threaded Batching Framework In Java'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-8838718754021955038</id><published>2010-08-20T05:15:00.001-07:00</published><updated>2010-08-20T05:15:19.264-07:00</updated><title type='text'>How to allow users to save a local copy of the current form</title><content type='html'>In our project we have a requirement that a user need not complete filling of the pretty large form at once but rather can save a local copy and can upload it later and continue working on that form.&lt;br /&gt;&lt;br /&gt;So when user hits 'Save Draft Form' in our page we do below things in our Beehieve Controller&lt;br /&gt;&lt;br /&gt;//Set the save form attribute to hide the buttons that are not allowed on saved forms, and show the "upload" button&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;HttpServletRequest&lt;/font&gt; &lt;font color="#2040a0"&gt;req&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;this&lt;/strong&gt;.&lt;font color="#2040a0"&gt;getRequest&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;req&lt;/font&gt;.&lt;font color="#2040a0"&gt;setAttribute&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;SAVE&amp;quot;&lt;/font&gt;,&lt;font color="#008000"&gt;&amp;quot;TRUE&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;getResponse&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;.&lt;font color="#2040a0"&gt;setHeader&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;Content-Disposition&amp;quot;&lt;/font&gt;,&lt;font color="#008000"&gt;&amp;quot;attachment;filename=OneDraft.htm&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In Our Jsp We Have This Condition To Allow "Upload" Button To Display Only For Locally Saved Html Files&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;%&lt;/font&gt;      &lt;font color="#2040a0"&gt;boolean&lt;/font&gt; &lt;font color="#2040a0"&gt;localFile;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;        &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;save&lt;/font&gt; &lt;font color="#2040a0"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;(String)&lt;/font&gt; &lt;font color="#2040a0"&gt;request.getAttribute(&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;SAVE&amp;quot;&lt;/font&gt;&lt;font color="#2040a0"&gt;);&lt;br /&gt;&lt;/font&gt;         &lt;font color="#2040a0"&gt;if&lt;/font&gt; &lt;font color="#2040a0"&gt;(save&lt;/font&gt; &lt;font color="#2040a0"&gt;==&lt;/font&gt; &lt;font color="#2040a0"&gt;null&lt;/font&gt; &lt;font color="#2040a0"&gt;||&lt;/font&gt; &lt;font color="#2040a0"&gt;!save.equalsIgnoreCase(&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;TRUE&amp;quot;&lt;/font&gt;&lt;font color="#2040a0"&gt;))&lt;/font&gt; &lt;font color="#2040a0"&gt;{&lt;br /&gt;&lt;/font&gt;             &lt;font color="#2040a0"&gt;localFile&lt;/font&gt; &lt;font color="#2040a0"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;false;&lt;br /&gt;&lt;/font&gt;         &lt;font color="#2040a0"&gt;}&lt;/font&gt; &lt;font color="#2040a0"&gt;else&lt;/font&gt; &lt;font color="#2040a0"&gt;{&lt;br /&gt;&lt;/font&gt;             &lt;font color="#2040a0"&gt;localFile&lt;/font&gt; &lt;font color="#2040a0"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;true;&lt;br /&gt;&lt;/font&gt;        &lt;font color="#2040a0"&gt;}&lt;br /&gt;%&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;%&lt;/font&gt; &lt;font color="#2040a0"&gt;if(!localFile)&lt;/font&gt; &lt;font color="#2040a0"&gt;{%&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;          &lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;netui:button&lt;/font&gt; &lt;font color="#2040a0"&gt;action=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;saveForm&amp;quot;&lt;/font&gt; &lt;font color="#2040a0"&gt;value=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;Save Draft Copy&amp;quot;&lt;/font&gt; &lt;font color="#2040a0"&gt;type=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;submit&amp;quot;&lt;/font&gt; &lt;font color="#2040a0"&gt;alt=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;Save draft copy&amp;quot;&lt;/font&gt; &lt;font color="#2040a0"&gt;/&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;%&lt;/font&gt; &lt;font color="#2040a0"&gt;}&lt;/font&gt; &lt;font color="#2040a0"&gt;else&lt;/font&gt; &lt;font color="#2040a0"&gt;{%&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;          &lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;netui:button&lt;/font&gt; &lt;font color="#2040a0"&gt;type=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;submit&amp;quot;&lt;/font&gt; &lt;font color="#2040a0"&gt;value=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;Upload Form&amp;quot;&lt;/font&gt; &lt;font color="#2040a0"&gt;action=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;UploadForm&amp;quot;&lt;/font&gt; &lt;font color="#2040a0"&gt;/&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;         &lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;%}&lt;/font&gt; &lt;font color="#2040a0"&gt;&lt;br /&gt;%&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So as we can see javascript code will get executed when user tries to hit "Save draft copy" button and as "SAVE" attribute is already stored in request scope in our Beehieve Controller so "upload" button will get executed.&lt;br /&gt;&lt;br /&gt;And once the user hits "upload" button "UploadForm" action gets called in our Beehieve Controller and we load the jsp with the existing form which has few details saved previously.&lt;br /&gt;&lt;br /&gt;Hope this explanation helps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-8838718754021955038?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/8838718754021955038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=8838718754021955038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/8838718754021955038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/8838718754021955038'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2010/08/how-to-allow-users-to-save-local-copy.html' title='How to allow users to save a local copy of the current form'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-9195070224360973102</id><published>2010-07-30T07:54:00.001-07:00</published><updated>2010-07-30T07:54:38.880-07:00</updated><title type='text'>A regular expression to check for prime numbers</title><content type='html'>Today i came across this &lt;a target="_blank" href="http://www.noulakaz.net/weblog/2007/03/18/a-regular-expression-to-check-for-prime-numbers/"&gt;article&lt;/a&gt; regarding regular expression to check for prime numbers.&lt;br /&gt;&lt;br /&gt;It is really wonderful and i thank Avinash for putting in his blog.&lt;br /&gt;&lt;br /&gt;Below code is used in java to achieve the same.&lt;br /&gt;&lt;br /&gt;import java.util.regex.Pattern;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;ArtlTest&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt; &lt;br /&gt; &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;main&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;args&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;c&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#FF0000"&gt;7&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;s&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;strong&gt;while&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;c&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;   &lt;font color="#2040a0"&gt;c&lt;/font&gt;&lt;font color="4444FF"&gt;-&lt;/font&gt;&lt;font color="4444FF"&gt;-&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;br /&gt;   &lt;font color="#2040a0"&gt;s&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;1&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;!&lt;/font&gt;&lt;font color="#2040a0"&gt;Pattern&lt;/font&gt;.&lt;font color="#2040a0"&gt;matches&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;^1?|^(11+?)&lt;font color="#77dd77"&gt;\\&lt;/font&gt;1+&amp;quot;&lt;/font&gt;, &lt;font color="#2040a0"&gt;s&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Few Notes:&lt;br /&gt;&lt;br /&gt;if we keenly see what exactly this expression &lt;pre&gt;(11+?)\\1+)&lt;/pre&gt; is doing &lt;br /&gt;&lt;br /&gt;It matches with "1″ followed by one or more ones minimally. This means that it matches with "11″ initially. &lt;br /&gt;&lt;br /&gt;The string obtained initially is bound to the variable &lt;pre&gt;\\1&lt;/pre&gt;.&lt;br /&gt;&lt;br /&gt;\1+ then matches with whatever has been matched above ("11″ initially) repeated one or more times. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Let’s try to apply it to 9.&lt;br /&gt;&lt;br /&gt;"1″ * 9 = "111111111″. (11+?) matches "11″ initially. \\1+ cannot match because there are 7 remaining ones. Backtracking occurs. (11+?) now matches "111″. And here \\1+ matches the remaining 6 remaining ones! Hence, 9 is not prime.&lt;br /&gt;&lt;br /&gt;Cool isn't it?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Source&lt;/span&gt;:  http://www.noulakaz.net/weblog/2007/03/18/a-regular-expression-to-check-for-prime-numbers/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-9195070224360973102?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/9195070224360973102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=9195070224360973102' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/9195070224360973102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/9195070224360973102'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2010/07/regular-expression-to-check-for-prime.html' title='A regular expression to check for prime numbers'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-4481338911160192056</id><published>2010-07-16T02:13:00.000-07:00</published><updated>2010-07-16T02:21:01.232-07:00</updated><title type='text'>Part 1 - Java Generics FAQ By Angelika Langer</title><content type='html'>Couple of months back i started practicing &lt;a href="http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html" target="_blank"&gt;Java Generics FAQ&lt;/a&gt; By Angelika Langer.&lt;br /&gt;&lt;br /&gt;Great book written by Angelika Langer.&lt;br /&gt;&lt;br /&gt;I had already read this book in the past and even spotted 4 bugs from the book.&lt;br /&gt;&lt;br /&gt;http://prasanthaboutjava.blogspot.com/2008/03/4-things-i-donot-understand-in.html&lt;br /&gt;&lt;br /&gt;I wanted to share few important quotations found from the book from page 1 - 100.&lt;br /&gt;&lt;br /&gt;1) Java Generics are a language feature that allows for definition and use of generic types and  methods.&lt;br /&gt;&lt;br /&gt;2) The compiler translates generic and parameterized types by a technique called type erasure.&lt;br /&gt;&lt;br /&gt;3) It is illegal to define generic type that are directly or indirectly derived from class Throwable.   Consequently, no parameterized types appear anywhere in exception handling.&lt;br /&gt;&lt;br /&gt;4) An instantiation of a generic type where all type arguments are concrete types rather than wildcards is called concrete parameterized type. Examples of concrete parameterized types are List&lt;String&gt;, Map&lt;String,Date&gt;.&lt;br /&gt;&lt;br /&gt;5) Parameterized types are not never covariant so &lt;pre&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;List&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Object&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt; is not a supertype of &lt;pre&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;List&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;.&lt;br /&gt;&lt;br /&gt;6) Instantiations of different generic types for the same type argument can be compatible.&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;br /&gt;        &lt;pre&gt;&lt;br /&gt;&lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;printAll&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Collection&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Object&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;c&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;          &lt;strong&gt;for&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Object&lt;/font&gt; &lt;font color="#2040a0"&gt;o&lt;/font&gt; &lt;font color="4444FF"&gt;:&lt;/font&gt; &lt;font color="#2040a0"&gt;c&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;o&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;          &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;          &lt;font color="#2040a0"&gt;List&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Object&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;list&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;ArrayList&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Object&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;          &lt;font color="#2040a0"&gt;printAll&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;list&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;   &lt;font color="#444444"&gt;// ok&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;7)  Concrete parameterized types cannot be used in below situations&lt;br /&gt;&lt;br /&gt;a) for creation of arrays&lt;br /&gt;b) in exception handling&lt;br /&gt;c) in a class literal&lt;br /&gt;d) in an instanceof expression&lt;br /&gt;&lt;br /&gt;Because generic type information will be erased at runtime.&lt;br /&gt;&lt;br /&gt;8) Because parameterized type has no exact runtime type representation there is no class literal for concrete parameterized types.&lt;br /&gt;&lt;br /&gt;9) A wildcard parameterized type cannot be not a supertype as it is of no use.&lt;br /&gt;&lt;br /&gt;10) A place holder for a type argument is called a type parameter.&lt;br /&gt;&lt;br /&gt; Example of a parameterized type:&lt;br /&gt;&lt;br /&gt;       &lt;pre&gt;&lt;br /&gt; &lt;strong&gt;interface&lt;/strong&gt; &lt;font color="#2040a0"&gt;Comparable&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;E&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;          &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;compareTo&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;E&lt;/font&gt; &lt;font color="#2040a0"&gt;other&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The identifier E is a type parameter. Each type parameter is replaced by a type argument when an instantiation of the generic type, such as &lt;pre&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;Comparable&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Object&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;or &lt;pre&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;Comparable&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;? &lt;strong&gt;extends&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;11) A type parameter with one or more bounds is called a bounded type parameter. The bounds restrict the set of types that can be used as type arguments and  give access to the methods defined by the bounds.&lt;br /&gt;&lt;br /&gt;Ex:   &lt;pre&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;TreeMap&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Key&lt;/font&gt; &lt;strong&gt;extends&lt;/strong&gt; &lt;font color="#2040a0"&gt;Comparable&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Key&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;,&lt;font color="#2040a0"&gt;Data&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Specification of a bound has two effects:&lt;br /&gt;&lt;br /&gt;a)  It gives access to the methods that the bound specifies. In the example, the bound &lt;pre&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;Comparable&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Key&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt; gives access to the compareTo method that we want to invoke in the implementation of our TreeMap class.&lt;br /&gt;&lt;br /&gt;b) Only types "within bounds" can be used for instantiation of the generic type.&lt;br /&gt;&lt;br /&gt;12) Primitive types and array types are not permitted as type parameter bounds.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;       &lt;strong&gt;class&lt;/strong&gt;    &lt;font color="#2040a0"&gt;X0&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;T&lt;/font&gt;    &lt;strong&gt;extends&lt;/strong&gt;     &lt;strong&gt;int&lt;/strong&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; ... &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;      &lt;font color="#444444"&gt;// error&lt;/font&gt;&lt;br /&gt;       &lt;strong&gt;class&lt;/strong&gt;    &lt;font color="#2040a0"&gt;X1&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;T&lt;/font&gt;    &lt;strong&gt;extends&lt;/strong&gt;     &lt;font color="#2040a0"&gt;Object&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; ... &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt; &lt;font color="#444444"&gt;// error&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;13) Enum types, such as Thread.State are also permitted as type parameter bound. Thread.State is an example of a nested type used as type parameter bound. Non-static inner types are also permitted.&lt;br /&gt;&lt;br /&gt;14) Parameterized types are permitted as type parameter bound, including concrete parameterized types such as List&lt;String&gt;, bounded wildcard parameterized types such as List&lt;? extends Number&gt; and Comparable&lt;?&lt;br /&gt;super Long&gt;, and unbounded wildcard parameterized types such as Map.Entry&lt;?,?&gt;. A bound that is a wildcard&lt;br /&gt;parameterized type allows as type argument all types that belong to the type family that the wildcard denotes. The wildcard parameterized type bound gives only restricted access to fields and methods; the restrictions depend on the kind of wildcard.&lt;br /&gt;&lt;br /&gt;15)  A type parameter can be used as the bound of another type parameter.&lt;br /&gt;&lt;br /&gt; Example (of a type parameter used as a type parameter bound):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;        &lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;Triple&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;T&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;          &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;T&lt;/font&gt; &lt;font color="#2040a0"&gt;fst&lt;/font&gt;, &lt;font color="#2040a0"&gt;snd&lt;/font&gt;, &lt;font color="#2040a0"&gt;trd&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;          &lt;strong&gt;public&lt;/strong&gt; &lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;U&lt;/font&gt; &lt;strong&gt;extends&lt;/strong&gt; &lt;font color="#2040a0"&gt;T&lt;/font&gt;, &lt;font color="#2040a0"&gt;V&lt;/font&gt; &lt;strong&gt;extends&lt;/strong&gt; &lt;font color="#2040a0"&gt;T&lt;/font&gt;, &lt;font color="#2040a0"&gt;W&lt;/font&gt; &lt;strong&gt;extends&lt;/strong&gt; &lt;font color="#2040a0"&gt;T&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;Triple&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;U&lt;/font&gt; &lt;font color="#2040a0"&gt;arg1&lt;/font&gt;, &lt;font color="#2040a0"&gt;V&lt;/font&gt; &lt;font color="#2040a0"&gt;arg2&lt;/font&gt;, &lt;font color="#2040a0"&gt;W&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;arg3&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;fst&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;arg1&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;snd&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;arg2&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;trd&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;arg3&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;          &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;16) At most one instantiation of the same generic type can appear in the list of bounds of a type parameter.&lt;br /&gt;&lt;br /&gt; Example (of illegal use of two instantiations of the same generic type as bounds of a type parameter):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;        &lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;ObjectStore&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;T&lt;/font&gt; &lt;strong&gt;extends&lt;/strong&gt; &lt;font color="#2040a0"&gt;Comparable&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;T&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;amp;&lt;/font&gt; &lt;font color="#2040a0"&gt;Comparable&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; &lt;font color="#444444"&gt;// error&lt;/font&gt;&lt;br /&gt;          &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;Set&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;T&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;theObjects&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;TreeSet&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;T&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;          ...&lt;br /&gt;          &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;boolean&lt;/strong&gt; &lt;font color="#2040a0"&gt;equals&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;ObjectStore&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;other&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;            &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;theObjects&lt;/font&gt;.&lt;font color="#2040a0"&gt;size&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;!&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;other&lt;/font&gt;.&lt;font color="#2040a0"&gt;size&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;return&lt;/strong&gt; &lt;strong&gt;false&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;Iterator&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;T&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;iterThis&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;theObjects&lt;/font&gt;.&lt;font color="#2040a0"&gt;iterator&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;Iterator&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;iterOther&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;other&lt;/font&gt;.&lt;font color="#2040a0"&gt;theObjects&lt;/font&gt;.&lt;font color="#2040a0"&gt;iterator&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;            &lt;strong&gt;while&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;iterThis&lt;/font&gt;.&lt;font color="#2040a0"&gt;hasNext&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;amp;&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;amp;&lt;/font&gt; &lt;font color="#2040a0"&gt;iterOther&lt;/font&gt;.&lt;font color="#2040a0"&gt;hasNext&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;              &lt;font color="#2040a0"&gt;T&lt;/font&gt; &lt;font color="#2040a0"&gt;t&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;iterThis&lt;/font&gt;.&lt;font color="#2040a0"&gt;next&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;              &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;string&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;iterOther&lt;/font&gt;.&lt;font color="#2040a0"&gt;next&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;              &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;t&lt;/font&gt;.&lt;font color="#2040a0"&gt;compareTo&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;string&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;!&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;return&lt;/strong&gt; &lt;strong&gt;false&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;            &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;            &lt;strong&gt;return&lt;/strong&gt; &lt;strong&gt;true&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;          &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;17) A bound that is a class type gives access to all its public members except any constructors.&lt;br /&gt;&lt;br /&gt;18) The declaration "&lt;pre&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;Enum&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;E&lt;/font&gt; &lt;strong&gt;extends&lt;/strong&gt; &lt;font color="#2040a0"&gt;Enum&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;E&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;" can be decyphered as: Enum is a generic type that can only&lt;br /&gt;be instantiated for its subtypes, and those subtypes will inherit some useful methods, some of which take subtype specific arguments (or otherwise depend on the subtype).&lt;br /&gt;&lt;br /&gt;19) We cannot create an object whose type is a type parameter because the compiler does not know how to create objects of an unknown type.&lt;br /&gt;&lt;br /&gt;20) Type parameters can appear in throws clauses, but not in catch clauses.&lt;br /&gt;&lt;br /&gt;21) Because a type parameter does not have a runtime type representation of its own there is no class literal for a type parameter.&lt;br /&gt;&lt;br /&gt;22) The scope of a class's type parameter is the entire definition of the class, except any static members or static initializers of the class. This means that the type parameters cannot be used in the declaration of static fields or methods or in static nested types or static initializers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-4481338911160192056?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/4481338911160192056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=4481338911160192056' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/4481338911160192056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/4481338911160192056'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2010/07/part-1-java-generics-faq-by-angelika.html' title='Part 1 - Java Generics FAQ By Angelika Langer'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-6997272497169155997</id><published>2010-06-16T07:05:00.000-07:00</published><updated>2010-06-16T07:06:59.792-07:00</updated><title type='text'>Ajax with Direct Web Remoting (DWR)</title><content type='html'>I request readers to refer to my wife Sneha's article regarding DWR and its usages with examples.&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" href="http://snehaprashant.blogspot.com/2010/06/ajax-with-direct-web-remoting-dwr.html"&gt;http://snehaprashant.blogspot.com/2010/06/ajax-with-direct-web-remoting-dwr.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-6997272497169155997?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/6997272497169155997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=6997272497169155997' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/6997272497169155997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/6997272497169155997'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2010/06/ajax-with-direct-web-remoting-dwr.html' title='Ajax with Direct Web Remoting (DWR)'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-4888006464956651643</id><published>2010-06-11T08:34:00.000-07:00</published><updated>2010-06-11T08:37:15.927-07:00</updated><title type='text'>Handling Concurrent Modification Exceptions in Java Collections</title><content type='html'>Today we have faced below problem when trying to remove a object from a list&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;Exception&lt;/font&gt; &lt;font color="#2040a0"&gt;in&lt;/font&gt; &lt;font color="#2040a0"&gt;thread&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;main&amp;quot;&lt;/font&gt; &lt;font color="#2040a0"&gt;java&lt;/font&gt;.&lt;font color="#2040a0"&gt;util&lt;/font&gt;.&lt;font color="#2040a0"&gt;ConcurrentModificationException&lt;/font&gt;&lt;br /&gt; &lt;font color="#2040a0"&gt;at&lt;/font&gt; &lt;font color="#2040a0"&gt;java&lt;/font&gt;.&lt;font color="#2040a0"&gt;util&lt;/font&gt;.&lt;font color="#2040a0"&gt;AbstractList&lt;/font&gt;$&lt;font color="#2040a0"&gt;Itr&lt;/font&gt;.&lt;font color="#2040a0"&gt;checkForComodification&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;AbstractList&lt;/font&gt;.&lt;font color="#2040a0"&gt;java&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;font color="#FF0000"&gt;449&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#2040a0"&gt;at&lt;/font&gt; &lt;font color="#2040a0"&gt;java&lt;/font&gt;.&lt;font color="#2040a0"&gt;util&lt;/font&gt;.&lt;font color="#2040a0"&gt;AbstractList&lt;/font&gt;$&lt;font color="#2040a0"&gt;Itr&lt;/font&gt;.&lt;font color="#2040a0"&gt;next&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;AbstractList&lt;/font&gt;.&lt;font color="#2040a0"&gt;java&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;font color="#FF0000"&gt;420&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#2040a0"&gt;at&lt;/font&gt; &lt;font color="#2040a0"&gt;ConcurrentModificationException&lt;/font&gt;.&lt;font color="#2040a0"&gt;removeObjectTwo&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;ConcurrentModificationException&lt;/font&gt;.&lt;font color="#2040a0"&gt;java&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;font color="#FF0000"&gt;28&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#2040a0"&gt;at&lt;/font&gt; &lt;font color="#2040a0"&gt;ConcurrentModificationException&lt;/font&gt;.&lt;font color="#2040a0"&gt;main&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;ConcurrentModificationException&lt;/font&gt;.&lt;font color="#2040a0"&gt;java&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;font color="#FF0000"&gt;20&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Below is the code&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;ConcurrentModificationException&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;main&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;args&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;A&lt;/font&gt; &lt;font color="#2040a0"&gt;a&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;A&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;sneha&amp;quot;&lt;/font&gt;,&lt;font color="#008000"&gt;&amp;quot;prasanth&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;A&lt;/font&gt; &lt;font color="#2040a0"&gt;a1&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;A&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;pradeep&amp;quot;&lt;/font&gt;,&lt;font color="#008000"&gt;&amp;quot;hima&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;A&lt;/font&gt; &lt;font color="#2040a0"&gt;a2&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;A&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;praveen&amp;quot;&lt;/font&gt;,&lt;font color="#008000"&gt;&amp;quot;subz&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;font color="#2040a0"&gt;List&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;A&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;list&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;ArrayList&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;A&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;list&lt;/font&gt;.&lt;font color="#2040a0"&gt;add&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;a&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;font color="#2040a0"&gt;list&lt;/font&gt;.&lt;font color="#2040a0"&gt;add&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;a1&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;font color="#2040a0"&gt;list&lt;/font&gt;.&lt;font color="#2040a0"&gt;add&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;a2&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;font color="#2040a0"&gt;B&lt;/font&gt; &lt;font color="#2040a0"&gt;b&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;B&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;b&lt;/font&gt;.&lt;font color="#2040a0"&gt;setAList&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;list&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;font color="#2040a0"&gt;removeObjectTwo&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;b&lt;/font&gt;,&lt;font color="#2040a0"&gt;a1&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;b&lt;/font&gt;.&lt;font color="#2040a0"&gt;getAList&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;removeObjectTwo&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;B&lt;/font&gt; &lt;font color="#2040a0"&gt;b&lt;/font&gt;,&lt;font color="#2040a0"&gt;A&lt;/font&gt; &lt;font color="#2040a0"&gt;aToBeRemoved&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;br /&gt;  &lt;strong&gt;for&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;A&lt;/font&gt; &lt;font color="#2040a0"&gt;a&lt;/font&gt; &lt;font color="4444FF"&gt;:&lt;/font&gt; &lt;font color="#2040a0"&gt;b&lt;/font&gt;.&lt;font color="#2040a0"&gt;getAList&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;b&lt;/font&gt;.&lt;font color="#2040a0"&gt;removeA&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;a&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;B&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;List&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;A&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;aList&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;ArrayList&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;A&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;font color="#2040a0"&gt;List&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;A&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;getAList&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;aList&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;setAList&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;List&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;A&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;list&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;aList&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;list&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;removeA&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;A&lt;/font&gt; &lt;font color="#2040a0"&gt;a&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;aList&lt;/font&gt;.&lt;font color="#2040a0"&gt;remove&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;a&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;a&lt;/font&gt;.&lt;font color="#2040a0"&gt;delete&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;A&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;firstName&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;lastName&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;private&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;isDeleted&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;N&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;font color="#2040a0"&gt;A&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;firstName&lt;/font&gt;,&lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;lastName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;this&lt;/strong&gt;.&lt;font color="#2040a0"&gt;firstName&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#2040a0"&gt;firstName&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;this&lt;/strong&gt;.&lt;font color="#2040a0"&gt;lastName&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#2040a0"&gt;lastName&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;getIsDeleted&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;isDeleted&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;setIsDeleted&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;isDeleted&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;this&lt;/strong&gt;.&lt;font color="#2040a0"&gt;isDeleted&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;isDeleted&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;getFirstName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;firstName&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;setFirstName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;firstName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;this&lt;/strong&gt;.&lt;font color="#2040a0"&gt;firstName&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;firstName&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;getLastName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;lastName&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;setLastName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;lastName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;this&lt;/strong&gt;.&lt;font color="#2040a0"&gt;lastName&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;lastName&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;delete&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;this&lt;/strong&gt;.&lt;font color="#2040a0"&gt;isDeleted&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;Y&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;toString&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;firstName&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;:&amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;lastName&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;   &lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Once you have changed the below method it works perfectly&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;removeObjectTwo&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;B&lt;/font&gt; &lt;font color="#2040a0"&gt;b&lt;/font&gt;,&lt;font color="#2040a0"&gt;A&lt;/font&gt; &lt;font color="#2040a0"&gt;aToBeRemoved&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;font color="#2040a0"&gt;List&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;A&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;dupA&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;ArrayList&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;A&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;strong&gt;for&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;A&lt;/font&gt; &lt;font color="#2040a0"&gt;a&lt;/font&gt; &lt;font color="4444FF"&gt;:&lt;/font&gt; &lt;font color="#2040a0"&gt;b&lt;/font&gt;.&lt;font color="#2040a0"&gt;getAList&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;if&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;aToBeRemoved&lt;/font&gt;.&lt;font color="#2040a0"&gt;equals&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;a&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;dupA&lt;/font&gt;.&lt;font color="#2040a0"&gt;add&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;a&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;strong&gt;for&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;A&lt;/font&gt; &lt;font color="#2040a0"&gt;a&lt;/font&gt; &lt;font color="4444FF"&gt;:&lt;/font&gt; &lt;font color="#2040a0"&gt;dupA&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;b&lt;/font&gt;.&lt;font color="#2040a0"&gt;removeA&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;a&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Lesson&lt;/span&gt;: Never try to do both read/write on the same collection object and better try to take 2 seperate lists and do the way it was done as shown in the above code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-4888006464956651643?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/4888006464956651643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=4888006464956651643' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/4888006464956651643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/4888006464956651643'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2010/06/handling-concurrent-modification.html' title='Handling Concurrent Modification Exceptions in Java Collections'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-3015968904066007200</id><published>2010-05-11T07:47:00.000-07:00</published><updated>2010-05-11T07:48:20.513-07:00</updated><title type='text'>SCJP Sun Certified Programmer By Kathy Sierra and Bert Bates - Final Part</title><content type='html'>Couple of months back i started practicing &lt;a href="http://www.booksmatter.com/book.aspx?isbn=0071402276&amp;cp=&amp;ag=" target="_blank"&gt;SCJP Sun Certified Programmer for Java 5 Study Guide&lt;/a&gt; By Kathy Sierra and Bert Bates.&lt;br /&gt;&lt;br /&gt;Great book written by Kathy Sierra and Bert Bates.&lt;br /&gt;&lt;br /&gt;I wanted to share few important quotations found from the last chapter.&lt;br /&gt;&lt;br /&gt;1) use -d option to change the destination of a class file when it's first generated by the javac command.&lt;br /&gt;&lt;br /&gt;2) System properties consist of name=value pairs that must be appended directly behind the -D, for example, Java -Dmyproperty=myvalue.&lt;br /&gt;&lt;br /&gt;3) Command-line arguments are always treated as Strings.&lt;br /&gt;&lt;br /&gt;4) Default classpaths can be defined by using OS environment variables.&lt;br /&gt;&lt;br /&gt;5) In Unix, colons (:) are used to separate the paths within a classpath. In Windows, semicolons (;) are used.&lt;br /&gt;&lt;br /&gt;6) In a classpath, to specify the current directory as a search location, use a dot (.)&lt;br /&gt;&lt;br /&gt;7) When you include a JAR file in a classpath, you must include not only the directory in which the JAR file is located, but the name of the JAR file too.&lt;br /&gt;&lt;br /&gt;8) You can use static imports to create shortcuts for static members (static variables, constants, and methods) of any class.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-3015968904066007200?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/3015968904066007200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=3015968904066007200' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/3015968904066007200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/3015968904066007200'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2010/05/scjp-sun-certified-programmer-by-kathy_11.html' title='SCJP Sun Certified Programmer By Kathy Sierra and Bert Bates - Final Part'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-1350112010799022629</id><published>2010-05-10T06:20:00.000-07:00</published><updated>2010-05-10T06:21:19.030-07:00</updated><title type='text'>SCJP Sun Certified Programmer By Kathy Sierra and Bert Bates - Part9</title><content type='html'>Couple of months back i started practicing &lt;a href="http://www.booksmatter.com/book.aspx?isbn=0071402276&amp;cp=&amp;ag=" target="_blank"&gt;SCJP Sun Certified Programmer for Java 5 Study Guide&lt;/a&gt; By Kathy Sierra and Bert Bates.&lt;br /&gt;&lt;br /&gt;Great book written by Kathy Sierra and Bert Bates.&lt;br /&gt;&lt;br /&gt;I wanted to share few important quotations found from the nineth chapter.&lt;br /&gt;&lt;br /&gt;1) Besides the no-arg constructor and the constructor that takes a Runnable (the target, i.e., the instance with the job to do), there are other overloaded constructors in class Thread. &lt;br /&gt;&lt;br /&gt;The constructors we care about are&lt;br /&gt;&lt;br /&gt;Thread() &lt;br /&gt;&lt;br /&gt;Thread(Runnable target) &lt;br /&gt;&lt;br /&gt;Thread(Runnable target, String name) &lt;br /&gt;&lt;br /&gt;Thread(String name) &lt;br /&gt;&lt;br /&gt;2) The isAlive() method is the best way to determine if a thread has been started but has not yet completed its run() method.&lt;br /&gt;&lt;br /&gt;3) The order in which runnable threads are chosen to run is not guaranteed. &lt;br /&gt;&lt;br /&gt;4) A thread can be only in one of five states &lt;br /&gt;&lt;br /&gt;a) &lt;span style="font-weight:bold;"&gt;New&lt;/span&gt; :- This is the state the thread is in after the Thread instance has been created, but the start() method has not been invoked on the thread.&lt;br /&gt;&lt;br /&gt;b) &lt;span style="font-weight:bold;"&gt;Runnable&lt;/span&gt; :- This is the state a thread is in when it's eligible to run, but the scheduler has not selected it to be the running thread. A thread first enters the runnable state when the start() method is invoked, but a thread can also return to the runnable state after either running or coming back from a blocked, waiting, or sleeping state. When the thread is in the runnable state, it is considered alive.&lt;br /&gt;&lt;br /&gt;c) &lt;span style="font-weight:bold;"&gt;Running&lt;/span&gt; :-  This is the state a thread is in when the thread scheduler selects it (from the runnable pool) to be the currently executing process.&lt;br /&gt;&lt;br /&gt;d) &lt;span style="font-weight:bold;"&gt;Waiting/blocked/sleeping&lt;/span&gt; :-  The thread is still alive, but is currently not eligible to run. In other words, it is not runnable, but it might return to a runnable state later if a particular event occurs.&lt;br /&gt;&lt;br /&gt;e) &lt;span style="font-weight:bold;"&gt;Dead&lt;/span&gt; :- A thread is considered dead when its run() method completes.&lt;br /&gt;&lt;br /&gt;5) Threads always run with some priority, usually represented as a number between 1 and 10 (although in some cases the range is less than 10). The scheduler in most JVMs uses preemptive, priority-based scheduling (which implies some sort of time slicing).&lt;br /&gt;&lt;br /&gt;6) Although the default priority is 5, the Thread class has the three following constants (static final variables) that define the range of thread priorities:&lt;br /&gt;&lt;br /&gt;Thread.MIN_PRIORITY  (1)&lt;br /&gt;Thread.NORM_PRIORITY  (5)&lt;br /&gt;Thread.MAX_PRIORITY  (10)&lt;br /&gt;&lt;br /&gt;7) The non-static join() method of class Thread lets one thread "join onto the end" of another thread. If you have a thread B that can't do its work until another thread A has completed its work, then you want thread B to "join" thread A. This means that thread B will not become runnable until A has finished (and entered the dead state).&lt;br /&gt;&lt;br /&gt;Thread t = new Thread();&lt;br /&gt;t.start();&lt;br /&gt;t.join();&lt;br /&gt;&lt;br /&gt;8) There are three ways a running thread could leave the running state:&lt;br /&gt;&lt;br /&gt;a) A call to sleep() Guaranteed to cause the current thread to stop executing for at least the specified sleep duration (although it might be interrupted before its specified time).&lt;br /&gt;&lt;br /&gt;b) A call to yield() Not guaranteed to do much of anything, although typically it will cause the currently running thread to move back to runnable so that a thread of the same priority can have a chance.&lt;br /&gt;&lt;br /&gt;c) A call to join() Guaranteed to cause the current thread to stop executing until the thread it joins with (in other words, the thread it calls join() on) completes, or if the thread it's trying to join with is not alive, however, the current thread won't need to back out.&lt;br /&gt;&lt;br /&gt;Besides those three, we also have the following scenarios in which a thread might leave the running state:&lt;br /&gt;&lt;br /&gt;The thread's run() method completes. &lt;br /&gt;&lt;br /&gt;A call to wait() on an object &lt;br /&gt;&lt;br /&gt;A thread can't acquire the lock on the object whose method code it's attempting to run.&lt;br /&gt;&lt;br /&gt;The thread scheduler can decide to move the current thread from running to runnable in order to give another thread a chance to run. &lt;br /&gt;&lt;br /&gt;9) We can't guarantee that a single thread will stay running throughout the entire atomic operation.&lt;br /&gt;&lt;br /&gt;10) Following are the key points about locking and synchronization:&lt;br /&gt;&lt;br /&gt;a) Only methods (or blocks) can be synchronized, not variables or classes.&lt;br /&gt;&lt;br /&gt;b) Each object has just one lock.&lt;br /&gt;&lt;br /&gt;c) Not all methods in a class need to be synchronized. A class can have both synchronized and non-synchronized methods.&lt;br /&gt;&lt;br /&gt;d) If two threads are about to execute a synchronized method in a class, and both threads are using the same instance of the class to invoke the method, only one thread at a time will be able to execute the method. The other thread will need to wait until the first one finishes its method call. In other words, once a thread acquires the lock on an object, no other thread can enter any of the synchronized methods in that class (for that object).&lt;br /&gt;&lt;br /&gt;e) If a class has both synchronized and non-synchronized methods, multiple threads can still access the class's non-synchronized methods! &lt;br /&gt;&lt;br /&gt;f) If a thread goes to sleep, it holds any locks it has—it doesn't release them.&lt;br /&gt;&lt;br /&gt;g) Thread can acquire more than one lock. For example, a thread can enter a synchronized method, thus acquiring a lock, and then immediately invoke a synchronized method on a different object, thus acquiring that lock as well. As the stack unwinds, locks are released again. Also, if a thread acquires a lock and then attempts to call a synchronized method on that same object, no problem. The JVM knows that this thread already has the lock for this object, so the thread is free to call other synchronized methods on the same object, using the lock the thread already has.&lt;br /&gt;&lt;br /&gt;h) You can synchronize a block of code rather than a method.&lt;br /&gt;&lt;br /&gt;11) Static methods can be synchronized.There is only one copy of the static data we're trying to protect, so we only need one lock per class to synchronize static methods—a lock for the whole class. There is such a lock; every class loaded in Java has a corresponding instance of java.lang.Class representing that class. It's that java.lang.Class instance whose lock is used to protect the static methods of the class (if they're synchronized). &lt;br /&gt;&lt;br /&gt;12) wait(), notify(), and notifyAll() must be called from within a synchronized context! A thread can't invoke a wait or notify method on an object unless it owns that object's lock. &lt;br /&gt;&lt;br /&gt;13)  Note that if the thread calling wait() does not own the lock, it will throw an  IllegalMonitorStateException.&lt;br /&gt;&lt;br /&gt;14) wait() and notify() or notifyAll(), we should almost always also have a while loop around the wait() that checks a condition and forces continued waiting until the condition is met.&lt;br /&gt;&lt;br /&gt;wait() and notify() or notifyAll() are defined on Object class and start(),yield(),sleep() and join() are declared in Thread class.&lt;br /&gt;&lt;br /&gt;run() method is declared in Runnable class.&lt;br /&gt;&lt;br /&gt;15) The sleep() method is a static method that sleeps the currently executing thread's state. One thread cannot tell another thread to sleep.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-1350112010799022629?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/1350112010799022629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=1350112010799022629' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/1350112010799022629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/1350112010799022629'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2010/05/scjp-sun-certified-programmer-by-kathy_10.html' title='SCJP Sun Certified Programmer By Kathy Sierra and Bert Bates - Part9'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-8558556005658230582</id><published>2010-05-04T07:13:00.000-07:00</published><updated>2010-05-04T07:14:03.077-07:00</updated><title type='text'>SCJP Sun Certified Programmer By Kathy Sierra and Bert Bates - Part8</title><content type='html'>Couple of months back i started practicing &lt;a href="http://www.booksmatter.com/book.aspx?isbn=0071402276&amp;cp=&amp;ag=" target="_blank"&gt;SCJP Sun Certified Programmer for Java 5 Study Guide&lt;/a&gt; By Kathy Sierra and Bert Bates.&lt;br /&gt;&lt;br /&gt;Great book written by Kathy Sierra and Bert Bates.&lt;br /&gt;&lt;br /&gt;I wanted to share few important quotations found from the &lt;span style="font-weight:bold;"&gt;eighth &lt;/span&gt;chapter.&lt;br /&gt;&lt;br /&gt;1) Event handlers are one of the main reasons inner classes were added to the language in the first place. &lt;br /&gt;&lt;br /&gt;2) One of the key benefits of an inner class is the "special relationship" an inner class instance shares with an instance of the outer class. That "special relationship" gives code in the inner class access to members of the enclosing (outer) class, as if the inner class were part of the outer class.&lt;br /&gt;&lt;br /&gt;3) If we want to Refer the Inner or Outer Instance from within the Inner Class below is the process.&lt;br /&gt;&lt;br /&gt;The keyword this can be used only from within instance code which can refer to the inner class.&lt;br /&gt;&lt;br /&gt;But what if the inner class code wants an explicit reference to the outer class instance that the inner instance is tied to?&lt;br /&gt;&lt;br /&gt;Although normally the inner class code doesn't need a reference to the outer class, since it already has an implicit one it's using to access the members of the outer class, it would need a reference to the outer class if it needed to pass that reference to some other code as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;MyInner&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;   &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;seeOuter&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;Outer x is &amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;x&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;Inner class ref is &amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;strong&gt;this&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;Outer class ref is &amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;MyOuter&lt;/font&gt;.&lt;strong&gt;this&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;   &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4) A regular inner class is a member of the outer class just as instance variables and methods are, so the following modifiers can be applied to an inner class:&lt;br /&gt;&lt;br /&gt;final &lt;br /&gt;&lt;br /&gt;abstract &lt;br /&gt;&lt;br /&gt;public &lt;br /&gt;&lt;br /&gt;private &lt;br /&gt;&lt;br /&gt;protected &lt;br /&gt;&lt;br /&gt;static—but static turns it into a static nested class not an inner class. &lt;br /&gt;&lt;br /&gt;strictfp &lt;br /&gt;&lt;br /&gt;5) Remember that a local class declared in a static method has access to only static members of the enclosing class, since there is no associated instance of the enclosing class. If you're in a static method there is no this, so an inner class in a static method is subject to the same restrictions as the static method. In other words, no access to instance variables.&lt;br /&gt;&lt;br /&gt;6) A method-local inner class can be instantiated only within the method where the inner class is defined. In other words, no other code running in any other method—inside or outside the outer class—can ever instantiate the method-local inner class. &lt;br /&gt;&lt;br /&gt;However, the inner class object cannot use the local variables of the method the inner class is in unless it is final.&lt;br /&gt;&lt;br /&gt;Reason is The local variables of the method live on the stack, and exist only for the lifetime of the method. You already know that the scope of a local variable is limited to the method the variable is declared in. When the method ends, the stack frame is blown away and the variable is history. But even after the method completes, the inner class object created within it might still be alive on the heap if, for example, a reference to it was passed into some other code and then stored in an instance variable. Because the local variables aren't guaranteed to be alive as long as the method-local inner class object, the inner class object can't use them.&lt;br /&gt;&lt;br /&gt;7) While an inner class (regardless of the flavor) enjoys that special relationship with the outer class (or rather the instances of the two classes share a relationship), a static nested class does not. It is simply a non-inner (also called "top-level") class scoped within another. So with static classes it's really more about name-space resolution than about an implicit relationship between the two classes.&lt;br /&gt;&lt;br /&gt;8) Just as a static method does not have access to the instance variables and non-static methods of the class, a static nested class does not have access to the instance variables and non-static methods of the outer class. &lt;br /&gt;&lt;br /&gt;9) Any anonymous interface implementers can implement only one interface.&lt;br /&gt;&lt;br /&gt;10) The only modifiers we can apply to a method-local inner class are abstract and final. (Never both at the same time, though.)&lt;br /&gt;&lt;br /&gt;11) An anonymous inner class can extend one subclass or implement one interface, Unlike non-anonymous classes (inner or otherwise), an anonymous inner class cannot do both. In other words, it cannot both extend a class and implement an interface, nor can it implement more than one interface.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-8558556005658230582?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/8558556005658230582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=8558556005658230582' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/8558556005658230582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/8558556005658230582'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2010/05/scjp-sun-certified-programmer-by-kathy.html' title='SCJP Sun Certified Programmer By Kathy Sierra and Bert Bates - Part8'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-4453532205925762658</id><published>2010-04-29T08:19:00.001-07:00</published><updated>2010-04-29T08:19:39.461-07:00</updated><title type='text'>SCJP Sun Certified Programmer By Kathy Sierra and Bert Bates - Part7</title><content type='html'>Couple of months back i started practicing &lt;a href="http://www.booksmatter.com/book.aspx?isbn=0071402276&amp;cp=&amp;ag=" target="_blank"&gt;SCJP Sun Certified Programmer for Java 5 Study Guide&lt;/a&gt; By Kathy Sierra and Bert Bates.&lt;br /&gt;&lt;br /&gt;Great book written by Kathy Sierra and Bert Bates.&lt;br /&gt;&lt;br /&gt;I wanted to share few important quotations found from the seventh chapter.&lt;br /&gt;&lt;br /&gt;1) The equals() Contract&lt;br /&gt;&lt;br /&gt;Pulled straight from the Java docs, the equals() contract says&lt;br /&gt;&lt;br /&gt;It is reflexive. For any reference value x, x.equals(x) should return true.&lt;br /&gt;&lt;br /&gt;It is symmetric. For any reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.&lt;br /&gt;&lt;br /&gt;It is transitive. For any reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) must return true.&lt;br /&gt;&lt;br /&gt;It is consistent. For any reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the object is modified.&lt;br /&gt;&lt;br /&gt;For any non-null reference value x, x.equals(null) should return false.&lt;br /&gt;&lt;br /&gt;2) A hashCode() that returns the same value for all instances whether they're equal or not is still a legal—even appropriate—hashCode() method! For example,&lt;br /&gt;&lt;br /&gt;public int hashCode() { return 1492; }&lt;br /&gt;&lt;br /&gt;This hashCode() method is horribly inefficient, remember, because it makes all objects land in the same bucket, but even so, the object can still be found as the collection cranks through the one and only bucket—using equals()—trying desperately to finally, painstakingly, locate the correct object. In other words, the hashcode was really no help at all in speeding up the search, even though improving search speed is hashcode's intended purpose! &lt;br /&gt;&lt;br /&gt;3) The hashCode() Contract&lt;br /&gt;&lt;br /&gt;a) Whenever it is invoked on the same object more than once during an execution of a Java application, the hashcode() method must consistently return the same integer, provided no information used in equals() comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application.&lt;br /&gt;&lt;br /&gt;b) If two objects are equal according to the equals(object) method, then calling the hashCode() method on each of the two objects must produce the same integer result.&lt;br /&gt;&lt;br /&gt;c) It is NOT required that if two objects are unequal according to the equals(Java.lang.Object) method, then calling the hashCode() method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hashtables.&lt;br /&gt;&lt;br /&gt;4) Transient variables can really mess with your equals() and hashcode() implementations. Keep variables non-transient or, if they must be marked transient, don't use then to determine hashcodes or equality.&lt;br /&gt;&lt;br /&gt;5) A Vector is basically the same as an ArrayList, but Vector methods are synchronized for thread safety.&lt;br /&gt;&lt;br /&gt;6) A Set does not allow for duplicates.A HashSet is an unsorted, unordered Set. &lt;br /&gt;&lt;br /&gt;7) Hashtable is the synchronized counterpart to HashMap.Another difference, though, is that while HashMap lets you have null values as well as one null key, a Hashtable doesn't let you have anything that's null.&lt;br /&gt;&lt;br /&gt;8) Below table gives more details of the collection classes &lt;br /&gt;&lt;br /&gt;&lt;table border=1 align=center&gt;&lt;br /&gt;&lt;tr&gt;&lt;th&gt;Class&lt;th&gt;Map&lt;th&gt;Set&lt;th&gt;List&lt;th&gt;Ordered&lt;th&gt;Sorted&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;HashMap&lt;td&gt;x&lt;td&gt;&lt;td&gt;&lt;td&gt;No&lt;td&gt;No&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;HashTable&lt;td&gt;x&lt;td&gt;&lt;td&gt;&lt;td&gt;No&lt;td&gt;No&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;TreeMap&lt;td&gt;x&lt;td&gt;&lt;td&gt;&lt;td&gt;Sorted&lt;td&gt;By natural order or custom comparison rules&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;LinkedHashMap&lt;td&gt;x&lt;td&gt;&lt;td&gt;&lt;td&gt;By insertion order or last access order&lt;td&gt;No&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;HashSet&lt;td&gt;&lt;td&gt;x&lt;td&gt;&lt;td&gt;No&lt;td&gt;No&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;TreeSet&lt;td&gt;&lt;td&gt;x&lt;td&gt;&lt;td&gt;Sorted&lt;td&gt;By natural order or custom comparison rules&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;LinkedHashSet&lt;td&gt;&lt;td&gt;x&lt;td&gt;&lt;td&gt;By insertion order&lt;td&gt;No&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;ArrayList&lt;td&gt;&lt;td&gt;&lt;td&gt;x&lt;td&gt;By index&lt;td&gt;No&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Vector&lt;td&gt;&lt;td&gt;&lt;td&gt;x&lt;td&gt;By index&lt;td&gt;No&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;LinkedList&lt;td&gt;&lt;td&gt;&lt;td&gt;x&lt;td&gt;By index&lt;td&gt;No&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;PriorityQueue&lt;td&gt;&lt;td&gt;&lt;td&gt;x&lt;td&gt;Sorted&lt;td&gt;By to-do order&lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;9)  Unlike basic queue structures that are first-in, first-out by default, a PriorityQueue orders its elements using a user-defined priority. The priority can be as simple as natural ordering (in which, for instance, an entry of 1 would be a higher priority than an entry of 2). In addition, a PriorityQueue can be ordered using a Comparator, which lets you define any ordering you want. Queues have a few methods not found in other collection interfaces: peek(), poll(), and offer().&lt;br /&gt;&lt;br /&gt;10) List&lt;?&gt;, which is the wildcard &lt;?&gt; without the keywords extends or super, simply means "any type." So that means any type of List can be assigned to the argument. That could be a List of &lt;Dog&gt;, &lt;Integer&gt;, &lt;JButton&gt;, &lt;Socket&gt;, whatever. And using the wildcard alone, without the keyword super (followed by a type), means that you cannot ADD anything to the list referred to as List&lt;?&gt;.&lt;br /&gt;&lt;br /&gt;11) We cannot use wildcard notation in the object creation.&lt;br /&gt;&lt;br /&gt;12) When using a wildcard like  List&lt;? extends Dog&gt;, the collection can be accessed but not modified.&lt;br /&gt;&lt;br /&gt;13) When using a wildcard like  List&lt;?&gt;, any generic type can be assigned to the reference, but for access only, no modifications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-4453532205925762658?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/4453532205925762658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=4453532205925762658' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/4453532205925762658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/4453532205925762658'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2010/04/scjp-sun-certified-programmer-by-kathy.html' title='SCJP Sun Certified Programmer By Kathy Sierra and Bert Bates - Part7'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-151753391257040230</id><published>2010-04-27T05:09:00.000-07:00</published><updated>2010-04-27T05:10:16.402-07:00</updated><title type='text'>Writing Testable Code By Isa Goksu, ThoughtWorks</title><content type='html'>Readers are requested to read this nice article&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" href="http://www.methodsandtools.com/archive/archive.php?id=103"&gt;http://www.methodsandtools.com/archive/archive.php?id=103&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hope you find above article interesting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-151753391257040230?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/151753391257040230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=151753391257040230' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/151753391257040230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/151753391257040230'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2010/04/writing-testable-code-by-isa-goksu.html' title='Writing Testable Code By Isa Goksu, ThoughtWorks'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-3696747988715964945</id><published>2010-04-19T02:46:00.000-07:00</published><updated>2010-04-19T02:50:31.558-07:00</updated><title type='text'>What Next For James Gosling?</title><content type='html'>Below blog article is interesting to know what next James Gosling is doing&lt;br /&gt;&lt;br /&gt;&lt;a href="http://nighthacks.com/roller/jag/entry/next" target="_blank"&gt;http://nighthacks.com/roller/jag/entry/next&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Also Statistics say that Java Is Far From Dead :-)&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" href="http://spikeypillow.com/2010/04/what-programming-languages-are-people-learning/"&gt;http://spikeypillow.com/2010/04/what-programming-languages-are-people-learning/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-3696747988715964945?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/3696747988715964945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=3696747988715964945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/3696747988715964945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/3696747988715964945'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2010/04/what-next-for-james-gosling.html' title='What Next For James Gosling?'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-2209745538191113177</id><published>2010-03-10T09:46:00.001-08:00</published><updated>2010-03-10T09:50:55.351-08:00</updated><title type='text'>How To Clear The Logfile When Application Server Is Is Running Mode</title><content type='html'>Manytimes i want to clear the log file while the application server is is running mode for analysing problem in better ways as the present log file may get more in size.&lt;br /&gt;&lt;br /&gt;We all know we are unable to clear the file when server is in runnning mode.&lt;br /&gt;&lt;br /&gt;But thanks to my collegue &lt;span style="font-weight:bold;"&gt;Sachin Mehta&lt;/span&gt; today i came to know how to do it.&lt;br /&gt;&lt;br /&gt;Below are the simple steps&lt;br /&gt;&lt;br /&gt;1) Open the file which you want to clear in notepad.&lt;br /&gt;&lt;br /&gt;2) Clear the contents of the file and save it. Ignore the error message notepad gives while you are trying to save it.Generally we get error message like "Cannot Create the "name of the file" file.Make sure the path and filename are present."&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_iDK0ur-lqkg/S5fb8mFEjoI/AAAAAAAAHbc/6aJpIpv8zWY/s1600-h/blog.GIF"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_iDK0ur-lqkg/S5fb8mFEjoI/AAAAAAAAHbc/6aJpIpv8zWY/s320/blog.GIF" border="0" alt=""id="BLOGGER_PHOTO_ID_5447064108388355714" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hope this information helps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-2209745538191113177?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/2209745538191113177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=2209745538191113177' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/2209745538191113177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/2209745538191113177'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2010/03/how-to-clear-logfile-when-application.html' title='How To Clear The Logfile When Application Server Is Is Running Mode'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_iDK0ur-lqkg/S5fb8mFEjoI/AAAAAAAAHbc/6aJpIpv8zWY/s72-c/blog.GIF' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-6159597380673081763</id><published>2010-02-26T04:45:00.000-08:00</published><updated>2010-02-26T04:46:13.729-08:00</updated><title type='text'>Debugging web applications from eclipse</title><content type='html'>Today i came to know debugging web applications from eclipse&lt;br /&gt;&lt;br /&gt;Thanks to my collegue Will Byng for helping me a lot in this.&lt;br /&gt;&lt;br /&gt;I want to share with my readers&lt;br /&gt;&lt;br /&gt;Below are the steps required&lt;br /&gt;&lt;br /&gt;1) Download Weblogic Server 923 in official oracle website.&lt;br /&gt;&lt;br /&gt;http://download.oracle.com/docs/cd/E15315_04/help/oracle.eclipse.tools.common.doc/html/install.html&lt;br /&gt;&lt;br /&gt;2) In startweblogic.cmd  &lt;br /&gt;&lt;br /&gt;set JAVA_OPTIONS=%SAVE_JAVA_OPTIONS% -DproxyHost=Access2 -DproxyPort=8080 -DnonProxyHosts="10.220.*|localhost" -DproxySet=true&lt;br /&gt;&lt;br /&gt;3) From eclipse click "start the server in debug mode" icon available in "Servers" Tab&lt;br /&gt;&lt;br /&gt;4) Make sure status icon of the weblogic server in eclipse will show "Debugging".&lt;br /&gt;&lt;br /&gt;5) Keep "breakpoint" in the code you want to debug. &lt;br /&gt;&lt;br /&gt;Hope this explanation helps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-6159597380673081763?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/6159597380673081763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=6159597380673081763' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/6159597380673081763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/6159597380673081763'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2010/02/debugging-web-applications-from-eclipse.html' title='Debugging web applications from eclipse'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-8188460118637288873</id><published>2010-01-26T05:14:00.001-08:00</published><updated>2010-01-26T05:14:34.270-08:00</updated><title type='text'>SCJP Sun Certified Programmer By Kathy Sierra and Bert Bates - Part6</title><content type='html'>Couple of months back i started practicing &lt;a href="http://www.booksmatter.com/book.aspx?isbn=0071402276&amp;cp=&amp;ag=" target="_blank"&gt;SCJP Sun Certified Programmer for Java 5 Study Guide&lt;/a&gt; By Kathy Sierra and Bert Bates.&lt;br /&gt;&lt;br /&gt;Great book written by Kathy Sierra and Bert Bates.&lt;br /&gt;&lt;br /&gt;I wanted to share few important quotations found from the six chapter.&lt;br /&gt;&lt;br /&gt;1) Once you have assigned a String a value, that value can never change.&lt;br /&gt;&lt;br /&gt;2) When we make a new instance of the class File, we're not yet making an actual file, we're just creating a filename. &lt;br /&gt;&lt;br /&gt;Ex: &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;File&lt;/font&gt; &lt;font color="#2040a0"&gt;file&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;File&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;fileWrite1.txt&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;    // Does not create a new file but only creating a filename.&lt;br /&gt;&lt;br /&gt;To create a file we need to create it in below way&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;newFile&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;file&lt;/font&gt;.&lt;font color="#2040a0"&gt;createNewFile&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;   &lt;br /&gt;&lt;br /&gt;3) Basic serialization happens with just two methods: one to serialize objects and write them to a stream, and a second to read the stream and deserialize objects.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;ObjectOutputStream&lt;/font&gt;.&lt;font color="#2040a0"&gt;writeObject&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;   &lt;font color="#444444"&gt;// serialize and write&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;ObjectInputStream&lt;/font&gt;.&lt;font color="#2040a0"&gt;readObject&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;     &lt;font color="#444444"&gt;// read and deserialize&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;Ex&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="0000ff"&gt;&lt;strong&gt;import java.io.*;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;Cat&lt;/font&gt; &lt;strong&gt;implements&lt;/strong&gt; &lt;font color="#2040a0"&gt;Serializable&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; &lt;br /&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;name&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;font color="#2040a0"&gt;Cat&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;name&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;this&lt;/strong&gt;.&lt;font color="#2040a0"&gt;name&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#2040a0"&gt;name&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;getName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#008000"&gt;&amp;quot;Returning name&amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;name&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;   &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;SerializationDemo&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;main&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;args&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;Cat&lt;/font&gt; &lt;font color="#2040a0"&gt;c&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;Cat&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;Mimom&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;  &lt;font color="#444444"&gt;// 2&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;try&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;FileOutputStream&lt;/font&gt; &lt;font color="#2040a0"&gt;fs&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;FileOutputStream&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;testSer.ser&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;ObjectOutputStream&lt;/font&gt; &lt;font color="#2040a0"&gt;os&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;ObjectOutputStream&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;fs&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;os&lt;/font&gt;.&lt;font color="#2040a0"&gt;writeObject&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;c&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;   &lt;font color="#444444"&gt;// 3&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;os&lt;/font&gt;.&lt;font color="#2040a0"&gt;close&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;catch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Exception&lt;/font&gt; &lt;font color="#2040a0"&gt;e&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;e&lt;/font&gt;.&lt;font color="#2040a0"&gt;printStackTrace&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;try&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;FileInputStream&lt;/font&gt; &lt;font color="#2040a0"&gt;fis&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;FileInputStream&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;testSer.ser&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;ObjectInputStream&lt;/font&gt; &lt;font color="#2040a0"&gt;ois&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;ObjectInputStream&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;fis&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;c&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Cat&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;ois&lt;/font&gt;.&lt;font color="#2040a0"&gt;readObject&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;  &lt;font color="#444444"&gt;// 4&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;c&lt;/font&gt;.&lt;font color="#2040a0"&gt;getName&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;ois&lt;/font&gt;.&lt;font color="#2040a0"&gt;close&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;catch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Exception&lt;/font&gt; &lt;font color="#2040a0"&gt;e&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;e&lt;/font&gt;.&lt;font color="#2040a0"&gt;printStackTrace&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4) Serializable is a marker interface; it has no methods to implement. &lt;br /&gt;&lt;br /&gt;5) When you serialize an object, Java serialization takes care of saving that object's entire "object graph." That means a deep copy of everything the saved object needs to be restored.&lt;br /&gt;&lt;br /&gt;6) transient modifier will skip serialization of the respective object.&lt;br /&gt;&lt;br /&gt;7) When we invoke defaultWriteobject() from within writeObject() we're telling the JVM to do the normal serialization process for this object. When implementing writeObject(), we will typically request the normal serialization process, and do some custom writing and reading too.&lt;br /&gt;&lt;br /&gt;8) When it's time to deserialize, defaultReadobject() handles the normal deserialization we'd get if we didn't implement a readobject() method.&lt;br /&gt;&lt;br /&gt;9) When an instance of a Serializable class is deserialized, the constructor does not run, and instance variables arc NOT given their initially assigned values! If the constructor were invoked, and/or instance variables were assigned the values given in their declarations, the object we're trying to restore would revert back to its original state, rather than coming back reflecting the changes in its state that happened sometime after it was created.&lt;br /&gt;&lt;br /&gt;10) Object references marked transient will always be reset to null, regardless of whether they were initialized at the time of declaration in the class.&lt;br /&gt;&lt;br /&gt;11) When superclass is NOT serializable, then any instance variables we INHERIT from that superclass will be reset to the values they were given during the original construction of the object. This is because the non-serializable class constructor WILL run!&lt;br /&gt;&lt;br /&gt;Ex:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="0000ff"&gt;&lt;strong&gt;import java.io.*;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;SuperNotSerial&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;main&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;args&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;Dog&lt;/font&gt; &lt;font color="#2040a0"&gt;d&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;Dog&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#FF0000"&gt;35&lt;/font&gt;, &lt;font color="#008000"&gt;&amp;quot;Fido&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;before: &amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;d&lt;/font&gt;.&lt;font color="#2040a0"&gt;name&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot; &amp;quot;&lt;/font&gt;&lt;br /&gt;                       &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;d&lt;/font&gt;.&lt;font color="#2040a0"&gt;weight&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;try&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;FileOutputStream&lt;/font&gt; &lt;font color="#2040a0"&gt;fs&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;FileOutputStream&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;testSer.ser&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;ObjectOutputStream&lt;/font&gt; &lt;font color="#2040a0"&gt;os&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;ObjectOutputStream&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;fs&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;os&lt;/font&gt;.&lt;font color="#2040a0"&gt;writeObject&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;d&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;os&lt;/font&gt;.&lt;font color="#2040a0"&gt;close&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;catch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Exception&lt;/font&gt; &lt;font color="#2040a0"&gt;e&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;e&lt;/font&gt;.&lt;font color="#2040a0"&gt;printStackTrace&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;try&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;FileInputStream&lt;/font&gt; &lt;font color="#2040a0"&gt;fis&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;FileInputstream&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;testSer.ser&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;ObjectInputStream&lt;/font&gt; &lt;font color="#2040a0"&gt;ois&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;ObjectInputStream&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;fis&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;d&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Dog&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;ois&lt;/font&gt;.&lt;font color="#2040a0"&gt;readObject&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;ois&lt;/font&gt;.&lt;font color="#2040a0"&gt;close&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;catch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Exception&lt;/font&gt; &lt;font color="#2040a0"&gt;e&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;e&lt;/font&gt;.&lt;font color="#2040a0"&gt;printStackTrace&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;after:  &amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;d&lt;/font&gt;.&lt;font color="#2040a0"&gt;name&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot; &amp;quot;&lt;/font&gt;&lt;br /&gt;                       &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;d&lt;/font&gt;.&lt;font color="#2040a0"&gt;weight&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;Dog&lt;/font&gt; &lt;strong&gt;extends&lt;/strong&gt; &lt;font color="#2040a0"&gt;Animal&lt;/font&gt; &lt;strong&gt;implements&lt;/strong&gt; &lt;font color="#2040a0"&gt;Serializable&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;name&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;Dog&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;w&lt;/font&gt;, &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;n&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;weight&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;w&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;          &lt;font color="#444444"&gt;// inherited&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;name&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;n&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;            &lt;font color="#444444"&gt;// not inherited&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;Animal&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;           &lt;font color="#444444"&gt;// not serializable !&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;weight&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#FF0000"&gt;42&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;which produces the output:&lt;br /&gt;&lt;br /&gt;before: Fido 35&lt;br /&gt;after:  Fido 42&lt;br /&gt;&lt;br /&gt;12) If you serialize a collection or an array, every element must be serializable! A single non-serializable element will cause serialization to fail. &lt;br /&gt;&lt;br /&gt;13) Static variables are NEVER saved as part of the object's state…because they do not belong to the object!&lt;br /&gt;&lt;br /&gt;14) As simple as serialization code is to write, versioning problems can occur in the real world. If you save a Dog object using one version of the class, but attempt to deserialize it using a newer, different version of the class, deserialization might fail&lt;br /&gt;&lt;br /&gt;15) The parse() method in DateFormat class takes a String formatted in the style of the DateFormat instance being used, and converts the String into a Date object.&lt;br /&gt;&lt;br /&gt;16) Regular expressions (regex for short) are a kind of language within a language, designed to help programmers with these searching tasks.&lt;br /&gt;&lt;br /&gt;Simple Searches&lt;br /&gt;&lt;br /&gt;For our first example, we'd like to search through the following source String&lt;br /&gt;&lt;br /&gt;abaaaba&lt;br /&gt;&lt;br /&gt;for all occurrences (or matches) of the expression &lt;br /&gt;&lt;br /&gt;ab&lt;br /&gt;&lt;br /&gt;We can see that we have two occurrences of the expression ab: one starting at position 0 and the second starting at position 4. &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="0000ff"&gt;&lt;strong&gt;import java.util.regex.*;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;RegexSmall&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;main&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;args&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;Pattern&lt;/font&gt; &lt;font color="#2040a0"&gt;p&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;Pattern&lt;/font&gt;.&lt;font color="#2040a0"&gt;compile&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;ab&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;      &lt;font color="#444444"&gt;// the expression&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;Matcher&lt;/font&gt; &lt;font color="#2040a0"&gt;m&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;p&lt;/font&gt;.&lt;font color="#2040a0"&gt;matcher&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;abaaaba&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;       &lt;font color="#444444"&gt;// the source&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;boolean&lt;/strong&gt; &lt;font color="#2040a0"&gt;b&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;false&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;while&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;b&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;m&lt;/font&gt;.&lt;font color="#2040a0"&gt;find&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;print&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;m&lt;/font&gt;.&lt;font color="#2040a0"&gt;start&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot; &amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This produces&lt;br /&gt;&lt;br /&gt;0 4&lt;br /&gt;&lt;br /&gt;17) Regex provides a rich set of metacharacters for java.util.regex.Pattern.&lt;br /&gt;&lt;br /&gt;&lt;table border=1 align=center&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;\d&lt;td&gt;A digit&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;\s&lt;td&gt;A whitespace character&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;\w&lt;td&gt;A word character (letters, digits, or "_" (underscore))&lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;We can also specify sets of characters to search for using square brackets and ranges of characters to search for using square brackets and a dash:&lt;br /&gt;&lt;br /&gt;[abc]  Searches only for a's, b's or c's&lt;br /&gt;&lt;br /&gt;In addition, we can search across several ranges at once. The following expression is looking for occurrences of the letters a - f or A - F, it's NOT looking for an fA combination:&lt;br /&gt;&lt;br /&gt;[a-fA-F]  Searches for the first six letters of the alphabet, both cases.&lt;br /&gt;&lt;br /&gt;18) ? (zero or one) quantifier : Let's say that our job this time is to search a text file and find anything that might be a local, 7-digit phone number. We're going to say, arbitrarily, that if we find either seven digits in a row, or three digits followed by a dash or a space followed by 4 digits, that we have a candidate. Here are examples of "valid" phone numbers:&lt;br /&gt;&lt;br /&gt;1234567&lt;br /&gt;123 4567&lt;br /&gt;123–4567&lt;br /&gt;&lt;br /&gt;The key to creating this expression is to see that we need "zero or one instance of either a space or a dash" in the middle of our digits:&lt;br /&gt;&lt;br /&gt;\d\d\d([-\s])?\d\d\d\d&lt;br /&gt;&lt;br /&gt;19) The Predefined Dot&lt;br /&gt;&lt;br /&gt;When you see this character in a regex expression, it means "any character can serve here." For instance, the following source and pattern&lt;br /&gt;&lt;br /&gt;source: "ac abc a c"&lt;br /&gt;pattern: a.c&lt;br /&gt;&lt;br /&gt;will produce the output&lt;br /&gt;&lt;br /&gt;3 abc&lt;br /&gt;7 a c&lt;br /&gt;&lt;br /&gt;The "." was able to match both the "b" and the " " in the source data.&lt;br /&gt;&lt;br /&gt;20) The greedy quantifier does in fact read the entire source data, and then it works backwards (from the right) until it finds the rightmost match. At that point, it includes everything from earlier in the source data up to and including the data that is part of the rightmost match.&lt;br /&gt;&lt;br /&gt;? is greedy, ?? is reluctant, for zero or once&lt;br /&gt;&lt;br /&gt;* is greedy, *? is reluctant, for zero or more&lt;br /&gt;&lt;br /&gt;+ is greedy, +? is reluctant, for one or more&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;br /&gt;What happens when we have the following source and pattern?&lt;br /&gt;&lt;br /&gt;source:  yyxxxyxx&lt;br /&gt;pattern:  .*xx&lt;br /&gt;&lt;br /&gt;Result&lt;br /&gt;&lt;br /&gt;0 yyxxxyxx&lt;br /&gt;&lt;br /&gt;The way to think about this is to consider the name greedy. The regex engine looks (greedily) at the entire source data before it could determine that there was an xx at the end.&lt;br /&gt;&lt;br /&gt;If we change the pattern to&lt;br /&gt;&lt;br /&gt;source:  yyxxxyxx&lt;br /&gt;pattern:  .*?xx&lt;br /&gt;&lt;br /&gt;we're now using the reluctant qualifier *?, and we get the following:&lt;br /&gt;&lt;br /&gt;0 yyxx&lt;br /&gt;4 xyxx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-8188460118637288873?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/8188460118637288873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=8188460118637288873' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/8188460118637288873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/8188460118637288873'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2010/01/scjp-sun-certified-programmer-by-kathy.html' title='SCJP Sun Certified Programmer By Kathy Sierra and Bert Bates - Part6'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-6866448796448255130</id><published>2010-01-22T02:03:00.000-08:00</published><updated>2010-01-22T03:04:57.751-08:00</updated><title type='text'>James Gosling's tribute to Sun</title><content type='html'>Just now i am browsing dzone and found james gosling tribute to sun.&lt;br /&gt;&lt;br /&gt;Hatsoff to James Gosling for his excellent work and may god bless him&lt;br /&gt;&lt;br /&gt;Hope readers are aware that Oracle's acquisition of Sun is in near approaching.&lt;br /&gt;&lt;br /&gt;http://www.goodgearguide.com.au/article/333517&lt;br /&gt;&lt;br /&gt;More Information can be found in below website.&lt;br /&gt;&lt;br /&gt;http://blogs.sun.com/jag/entry/so_long_old_friend&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-6866448796448255130?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/6866448796448255130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=6866448796448255130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/6866448796448255130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/6866448796448255130'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2010/01/james-goslings-tribute-to-sun.html' title='James Gosling&apos;s tribute to Sun'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-6025416230679175862</id><published>2009-12-11T08:17:00.000-08:00</published><updated>2009-12-11T09:05:24.718-08:00</updated><title type='text'>SCJP Sun Certified Programmer By Kathy Sierra and Bert Bates - Part5</title><content type='html'>Couple of weeks back i started practicing &lt;a href="http://www.booksmatter.com/book.aspx?isbn=0071402276&amp;cp=&amp;ag=" target="_blank"&gt;SCJP Sun Certified Programmer for Java 5 Study Guide&lt;/a&gt; By Kathy Sierra and Bert Bates.&lt;br /&gt;&lt;br /&gt;Great book written by Kathy Sierra and Bert Bates.&lt;br /&gt;&lt;br /&gt;I wanted to share few important quotations found from the fifth chapter.&lt;br /&gt;&lt;br /&gt;1) The general form of the switch statement is:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;switch&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;expression&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;case&lt;/strong&gt; &lt;font color="#2040a0"&gt;constant1&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt; &lt;font color="#2040a0"&gt;code&lt;/font&gt; &lt;font color="#2040a0"&gt;block&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;case&lt;/strong&gt; &lt;font color="#2040a0"&gt;constant2&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt; &lt;font color="#2040a0"&gt;code&lt;/font&gt; &lt;font color="#2040a0"&gt;block&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;default&lt;/strong&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt; &lt;font color="#2040a0"&gt;code&lt;/font&gt; &lt;font color="#2040a0"&gt;block&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2) It's also illegal to have more than one case label using the same value. For example, the following block of code won't compile because it uses two cases with the same value of 80:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;temp&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#FF0000"&gt;90&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;strong&gt;switch&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;temp&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;case&lt;/strong&gt; &lt;font color="#FF0000"&gt;80&lt;/font&gt; &lt;font color="4444FF"&gt;:&lt;/font&gt;  &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;80&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;case&lt;/strong&gt; &lt;font color="#FF0000"&gt;80&lt;/font&gt; &lt;font color="4444FF"&gt;:&lt;/font&gt;  &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;80&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;   &lt;font color="#444444"&gt;// won't compile!&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;case&lt;/strong&gt; &lt;font color="#FF0000"&gt;90&lt;/font&gt; &lt;font color="4444FF"&gt;:&lt;/font&gt;  &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;90&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;default&lt;/strong&gt; &lt;font color="4444FF"&gt;:&lt;/font&gt;  &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;default&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;3) It is legal to leverage the power of boxing in a switch expression. For instance, the following is legal:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;switch&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;Integer&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#FF0000"&gt;4&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;case&lt;/strong&gt; &lt;font color="#FF0000"&gt;4&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt; &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;boxing is OK&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;4) We can have only one test expression in a for loop.&lt;br /&gt;&lt;br /&gt;Ex: The below code is illegal&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;for&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;x&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;x&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#FF0000"&gt;5&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;, &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;y&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt; &lt;font color="#FF0000"&gt;2&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;font color="#2040a0"&gt;x&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt; &lt;font color="#444444"&gt;// too many expressions&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The compiler will let you know the problem:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;TestLong&lt;/font&gt;.&lt;font color="#2040a0"&gt;java&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;font color="#FF0000"&gt;20&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt; &lt;font color="#008000"&gt;';'&lt;/font&gt; &lt;font color="#2040a0"&gt;expected&lt;/font&gt;&lt;br /&gt;&lt;strong&gt;for&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;x&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;x&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#FF0000"&gt;5&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;, &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;y&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt; &lt;font color="#FF0000"&gt;2&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;font color="#2040a0"&gt;x&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;5) continue statements must be inside a loop; otherwise, you'll get a compiler error. break statements must be used inside either a loop or switch statement. (Note: this does not apply to labeled break statements.).&lt;br /&gt;&lt;br /&gt;6) The continue statement causes only the current iteration of the innermost loop to cease and the next iteration of the same loop to start if the condition of the loop is met. When using a continue statement with a for loop, you need to consider the effects that continue has on the loop iteration. Examine the following code:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;for&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;i&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;font color="#2040a0"&gt;i&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt; &lt;font color="#FF0000"&gt;10&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;font color="#2040a0"&gt;i&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;Inside loop&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;continue&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The question is, is this an endless loop? The answer is no. When the continue statement is hit, the iteration expression still runs! It runs just as though the current iteration ended "in the natural way."&lt;br /&gt;&lt;br /&gt;7) A finally block encloses code that is always executed at some point after the try block, whether an exception was thrown or not. Even if there is a return statement in the try block, the finally block executes right after the return statement is encountered, and before the return executes!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-6025416230679175862?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/6025416230679175862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=6025416230679175862' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/6025416230679175862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/6025416230679175862'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2009/12/scjp-sun-certified-programmer-by-kathy.html' title='SCJP Sun Certified Programmer By Kathy Sierra and Bert Bates - Part5'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-3857651646434632213</id><published>2009-11-09T02:26:00.000-08:00</published><updated>2009-11-09T02:28:45.697-08:00</updated><title type='text'>SCJP Sun Certified Programmer By Kathy Sierra and Bert Bates - Part4</title><content type='html'>Couple of weeks back i started practicing &lt;a href="http://www.booksmatter.com/book.aspx?isbn=0071402276&amp;cp=&amp;ag=" target="_blank"&gt;SCJP Sun Certified Programmer for Java 5 Study Guide&lt;/a&gt; By Kathy Sierra and Bert Bates.&lt;br /&gt;&lt;br /&gt;Great book written by Kathy Sierra and Bert Bates.&lt;br /&gt;&lt;br /&gt;I wanted to share few important quotations found from the fourth chapter.&lt;br /&gt;&lt;br /&gt;1) It is legal to test whether the null reference is an instance of a class. This will always result in false, of course. For example:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;InstanceTest&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;   &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;main&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;args&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;a&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;boolean&lt;/strong&gt; &lt;font color="#2040a0"&gt;b&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;null&lt;/strong&gt; &lt;strong&gt;instanceof&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;strong&gt;boolean&lt;/strong&gt; &lt;font color="#2040a0"&gt;c&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;a&lt;/font&gt; &lt;strong&gt;instanceof&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#2040a0"&gt;System&lt;/font&gt;, &lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;b&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot; &amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;c&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;   &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;prints this: false false &lt;br /&gt;&lt;br /&gt;2) Below table summarizes the use of the instanceof operator given the following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;interface&lt;/strong&gt; &lt;font color="#2040a0"&gt;Face&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;Bar&lt;/font&gt; &lt;strong&gt;implements&lt;/strong&gt; &lt;font color="#2040a0"&gt;Face&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;Foo&lt;/font&gt; &lt;strong&gt;extends&lt;/strong&gt; &lt;font color="#2040a0"&gt;Bar&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;table border=1 align=center&gt;&lt;br /&gt;&lt;tr&gt;&lt;th&gt;First Operand (Reference Being Tested)&lt;th&gt;instanceof Operand (Type We're Comparing the Reference Against)&lt;th&gt;Result&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;null&lt;td&gt;Any class or interface type&lt;td&gt;false&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Foo instance&lt;td&gt;Foo, Bar, Face, Object&lt;td&gt;true&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Bar instance&lt;td&gt;Bar, Face, Object&lt;td&gt;true&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Bar instance&lt;td&gt;Foo&lt;td&gt;false&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Foo[]&lt;td&gt;Foo, Bar, Face&lt;td&gt;false&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Foo[]&lt;td&gt;Object&lt;td&gt;true&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Foo[]&lt;td&gt;Foo, Bar, Face, Object&lt;td&gt;true&lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;3) The || and &amp;&amp; operators work only with boolean operands.&lt;br /&gt;&lt;br /&gt;4) Difference between short-circuit and non-short-circuit logical operators.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;z&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#FF0000"&gt;5&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="#2040a0"&gt;z&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#FF0000"&gt;5&lt;/font&gt; &lt;font color="4444FF"&gt;|&lt;/font&gt; &lt;font color="4444FF"&gt;|&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="#2040a0"&gt;z&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#FF0000"&gt;6&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;z&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;   &lt;font color="#444444"&gt;// z = 7 after this code&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;versus&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;z&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#FF0000"&gt;5&lt;/font&gt; &lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="#2040a0"&gt;z&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#FF0000"&gt;5&lt;/font&gt; &lt;font color="4444FF"&gt;|&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="#2040a0"&gt;z&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#FF0000"&gt;6&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;z&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;   &lt;font color="#444444"&gt;// z = 8 after this code&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;5) There are six relational operators: &gt;, &gt;=, &lt;, &lt;= , ==, and !=. The last two ( == and ! = ) are sometimes referred to as equality operators. &lt;br /&gt;&lt;br /&gt;6) instanceof is for reference variables only, and checks for whether the object is of a particular type.&lt;br /&gt;&lt;br /&gt;7) The || does not evaluate the right operand if the left operand is true.&lt;br /&gt; &lt;br /&gt;8) The &amp; and | operators always evaluate both operands.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-3857651646434632213?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/3857651646434632213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=3857651646434632213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/3857651646434632213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/3857651646434632213'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2009/11/scjp-sun-certified-programmer-by-kathy.html' title='SCJP Sun Certified Programmer By Kathy Sierra and Bert Bates - Part4'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-7693625402939973705</id><published>2009-11-05T06:27:00.000-08:00</published><updated>2009-11-05T06:29:28.683-08:00</updated><title type='text'>Java Puzzlers By Joshua Bloch, Neal Gafter</title><content type='html'>Just now i finished solving puzzles &lt;span style="font-weight:bold;"&gt;2nd time&lt;/span&gt; from &lt;a href="http://www.javapuzzlers.com/" target="_blank"&gt;Java Puzzlers&lt;/a&gt; book by Joshua Bloch, Neal Gafter.&lt;br /&gt;&lt;br /&gt;Oh!! What a book and my comment on the book is same as Guy Steele "I laughed, I cried, I threw up (my hands in admiration)."&lt;br /&gt;&lt;br /&gt;Please go fast and get a copy of the book if not till now.&lt;br /&gt;&lt;br /&gt;I have already read and practiced the puzzles during May 2008 and below is the link.&lt;br /&gt;&lt;br /&gt;http://prashantaboutjava.blogspot.com/2008/05/java-puzzlers-by-joshua-bloch-neal.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-7693625402939973705?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/7693625402939973705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=7693625402939973705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/7693625402939973705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/7693625402939973705'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2009/11/java-puzzlers-by-joshua-bloch-neal.html' title='Java Puzzlers By Joshua Bloch, Neal Gafter'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-3324064773208069991</id><published>2009-11-04T01:52:00.000-08:00</published><updated>2009-11-04T01:58:27.537-08:00</updated><title type='text'>Overriding,Hiding,Overloading,Shadowing,Obscuring</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Overriding&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;An instance method overrides all accessible instance methods with the same signature in superclasses [JLS 8.4.8.1], enabling dynamic dispatch; in other words, the VM chooses which overriding to invoke based on an instance's run-time type [JLS 15.12.4.4]. Overriding is fundamental to object-oriented programming and is the only form of name reuse that is not generally discouraged:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;Base&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;f&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;Derived&lt;/font&gt; &lt;strong&gt;extends&lt;/strong&gt; &lt;font color="#2040a0"&gt;Base&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;f&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt; &lt;font color="#444444"&gt;// overrrides Base.f()&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Hiding&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A field, static method, or member type hides all accessible fields, static methods, or member types, respectively, with the same name (or, for methods, signature) in supertypes. Hiding a member prevents it from being inherited [JLS 8.3, 8.4.8.2, 8.5]:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;Base&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;f&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;Derived&lt;/font&gt; &lt;strong&gt;extends&lt;/strong&gt; &lt;font color="#2040a0"&gt;Base&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;f&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt; &lt;font color="#444444"&gt;// hides Base.f()&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Overloading&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Methods in a class overload one another if they have the same name and different signatures. The overloaded method designated by an invocation is selected at compile time [JLS 8.4.9, 15.12.2]:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;CircuitBreaker&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;f&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;i&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt; &lt;font color="#444444"&gt;// int overloading&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;f&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;s&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt; &lt;font color="#444444"&gt;// String overloading&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Shadowing&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A variable, method, or type shadows all variables, methods, or types, respectively, with the same name in a textually enclosing scope. If an entity is shadowed, you cannot refer to it by its simple name; depending on the entity, you cannot refer to it at all [JLS 6.3.1]:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;WhoKnows&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;static&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;sentence&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;I don't know.&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;main&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;args&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;sentence&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;I know!&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;   &lt;font color="#444444"&gt;// shadows static field&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;sentence&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;  &lt;font color="#444444"&gt;// prints local variable&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Although shadowing is generally discouraged, one common idiom does involve shadowing. Constructors often reuse a field name from their class as a parameter name to pass the value of the named field. This idiom is not without risk, but most Java programmers have decided that the stylistic benefits outweigh the risks:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;Belt&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;private&lt;/strong&gt; &lt;strong&gt;final&lt;/strong&gt; &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;size&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;public&lt;/strong&gt; &lt;font color="#2040a0"&gt;Belt&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;size&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt; &lt;font color="#444444"&gt;// Parameter shadows Belt.size&lt;/font&gt;&lt;br /&gt;        &lt;strong&gt;this&lt;/strong&gt;.&lt;font color="#2040a0"&gt;size&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;size&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Obscuring&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A variable obscures a type with the same name if both are in scope: If the name is used where variables and types are permitted, it refers to the variable. Similarly, a variable or a type can obscure a package. Obscuring is the only kind of name reuse where the two names are in different namespaces: variables, packages, methods, or types. If a type or a package is obscured, you cannot refer to it by its simple name except in a context where the syntax allows only a name from its namespace. Adhering to the naming conventions largely eliminates obscuring [JLS 6.3.2, 6.5]:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;Obscure&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;static&lt;/strong&gt; &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;System&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;font color="#444444"&gt;// Obscures type java.lang.System&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;main&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;args&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#444444"&gt;// Next line won't compile: System refers to static field&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;hello, obscure world!&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Source&lt;/span&gt;: Java Puzzlers: Traps, Pitfalls, and Corner Cases By Joshua Bloch, Neal Gafter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3307744931779499285-3324064773208069991?l=prasanthaboutjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://prasanthaboutjava.blogspot.com/feeds/3324064773208069991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3307744931779499285&amp;postID=3324064773208069991' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/3324064773208069991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3307744931779499285/posts/default/3324064773208069991'/><link rel='alternate' type='text/html' href='http://prasanthaboutjava.blogspot.com/2009/11/overridinghidingoverloadingshadowingobs.html' title='Overriding,Hiding,Overloading,Shadowing,Obscuring'/><author><name>Prasanth Jalasutram</name><uri>http://www.blogger.com/profile/02049809664724727115</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3307744931779499285.post-7704555196953889223</id><published>2009-10-26T01:45:00.000-07:00</published><updated>2009-10-26T01:46:03.751-07:00</updated><title type='text'>SCJP Sun Certified Programmer By Kathy Sierra and Bert Bates - Part3</title><content type='html'>Couple of weeks back i started practicing &lt;a href="http://www.booksmatter.com/book.aspx?isbn=0071402276&amp;cp=&amp;ag=" target="_blank"&gt;SCJP Sun Certified Programmer for Java 5 Study Guide&lt;/a&gt; By Kathy Sierra and Bert Bates.&lt;br /&gt;&lt;br /&gt;Great book written by Kathy Sierra and Bert Bates.&lt;br /&gt;&lt;br /&gt;I wanted to share few important quotations found from the third chapter.&lt;br /&gt;&lt;br /&gt;1)  Octal integers use only the digits 0 to 7. In Java, you represent an integer in octal form by placing a zero in front of the number.&lt;br /&gt;&lt;br /&gt;2) Static variables have the longest scope; they are created when the class is loaded, and they survive as long as the class stays loaded in the JVM.&lt;br /&gt;&lt;br /&gt;Instance variables are the next most long-lived; they are created when a new instance is created, and they live until the instance is removed.&lt;br /&gt;&lt;br /&gt;Local variables are next; they live as long as their method remains on the stack.However, local variables can be alive, and still be "out of scope".&lt;br /&gt;&lt;br /&gt;Block variables live only as long as the code block is executing.&lt;br /&gt;&lt;br /&gt;3) Array elements are always, always, always given default values, regardless of where the array itself is declared or instantiated. &lt;br /&gt;&lt;br /&gt;4) One exception to the way object references are assigned is String. In Java, String objects are given special treatment.String objects are immutable; &lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;StringTest&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;main&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;args&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;x&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;Java&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;  &lt;font color="#444444"&gt;// Assign a value to x&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="#2040a0"&gt;y&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;x&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;       &lt;font color="#444444"&gt;// Now y and x refer to the same&lt;/font&gt;&lt;br /&gt;                        &lt;font color="#444444"&gt;// String object&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;y string = &amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;y&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;x&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;x&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot; Bean&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;    &lt;font color="#444444"&gt;// Now modify the object using&lt;/font&gt;&lt;br /&gt;                        &lt;font color="#444444"&gt;// the x reference&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;y string = &amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;y&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Output:&lt;br /&gt;&lt;br /&gt;%java StringTest&lt;br /&gt;y string = Java&lt;br /&gt;y string = Java&lt;br /&gt;&lt;br /&gt;5) Shadowing involves redeclaring a variable that's already been declared somewhere else.&lt;br /&gt;&lt;br /&gt;The effect of shadowing is to hide the previously declared variable in such a way that it may look as though you're using the hidden variable, but you're actually using the shadowing variable.&lt;br /&gt;&lt;br /&gt;You can shadow an instance variable by declaring a local variable of the same name, either directly or as part of an argument:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;Foo&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;size&lt;/font&gt; &lt;font color="4444FF"&gt;*&lt;/font&gt; &lt;font color="#FF0000"&gt;7&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;changeIt&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;size&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;size&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;size&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#FF0000"&gt;200&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;Systsm&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;size in changelt is &amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;size&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;main&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;args&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;Foo&lt;/font&gt; &lt;font color="#2040a0"&gt;f&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;Foo&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;size = &amp;quot;&lt;/font&gt;  &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;size&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;changeIt&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;size&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;size after changeIt is &amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;size&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The preceding code appears to change the size instance variable in the changeIt() method, but because changeIt() has a parameter named size, the local size variable is modified while the instance variable size is untouched. &lt;br /&gt;&lt;br /&gt;Running class Foo prints&lt;br /&gt;&lt;br /&gt;%java Foo&lt;br /&gt;size = 7&lt;br /&gt;size in changeIt is 207&lt;br /&gt;size after changelt is 7&lt;br /&gt;&lt;br /&gt;Things become more interesting when the shadowed variable is an object reference, rather than a primitive:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;Bar&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;barNum&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#FF0000"&gt;28&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;Foo&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#2040a0"&gt;Bar&lt;/font&gt; &lt;font color="#2040a0"&gt;myBar&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;Bar&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;changelt&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;Bar&lt;/font&gt; &lt;font color="#2040a0"&gt;myBar&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;myBar&lt;/font&gt;.&lt;font color="#2040a0"&gt;barNum&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#FF0000"&gt;99&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;myBar.barNum in changeIt is &amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;myBar&lt;/font&gt;.&lt;font color="#2040a0"&gt;barNum&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;myBar&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;Bar&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;myBar&lt;/font&gt;.&lt;font color="#2040a0"&gt;barNum&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#FF0000"&gt;420&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;myBar.barNum in changelt is now &amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;myBar&lt;/font&gt;.&lt;font color="#2040a0"&gt;barNum&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt;. &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;main&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;args&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;Foo&lt;/font&gt; &lt;font color="#2040a0"&gt;f&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;font color="#2040a0"&gt;Foo&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;System&lt;/font&gt;. &lt;font color="#2040a0"&gt;out&lt;/font&gt; .&lt;font color="#2040a0"&gt;println&lt;/font&gt;.&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;f.myBar.barNum is &amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;f&lt;/font&gt;.&lt;font color="#2040a0"&gt;myBar&lt;/font&gt;.&lt;font color="#2040a0"&gt;barNum&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;f&lt;/font&gt;.&lt;font color="#2040a0"&gt;changeIt&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;f&lt;/font&gt;.&lt;font color="#2040a0"&gt;myBar&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;System&lt;/font&gt;.&lt;font color="#2040a0"&gt;out&lt;/font&gt;.&lt;font color="#2040a0"&gt;println&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;f .myBar.barNum after changeIt is &amp;quot;&lt;/font&gt;&lt;br /&gt;                       &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;f&lt;/font&gt;.&lt;font color="#2040a0"&gt;myBar&lt;/font&gt;.&lt;font color="#2040a0"&gt;barNum&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The preceding code prints out this:&lt;br /&gt;&lt;br /&gt;f.myBar.barNum is 28&lt;br /&gt;myBar.barNum in changelt is 99&lt;br /&gt;myBar.barNum in changeIt is now 420&lt;br /&gt;f, myBar. barNum after changeIt is 99&lt;br /&gt;&lt;br /&gt;You can see that the shadowing variable (the local parameter myBar in changeIt().) can still affect the myBar instance variable, because the myBar parameter receives a reference to the same Bar object. But when the local myBar is reassigned a new Bar object, which we then modify by changing its barNum value, Foo's original myBar instance variable is untouched.&lt;br /&gt;&lt;br /&gt;6) Multidimensional arrays, remember, are simply arrays of arrays. So a two-dimensional array of type int is really an object of type int array (int[]), with each element in that array holding a reference to another int array. The second dimension holds the actual int primitives. The following code declares and constructs a two-dimensional array of type int:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;int&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;myArray&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;strong&gt;int&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="#FF0000"&gt;3&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;7) When you assign an array to a previously declared array reference, the array you're assigning must be the same dimension as the reference you're assigning it to. For example, a two-dimensional array of int arrays cannot be assigned to a regular int array reference, as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;int&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;blots&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;strong&gt;int&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;squeegees&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;new&lt;/strong&gt; &lt;strong&gt;int&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="#FF0000"&gt;3&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;blots&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;squeegees&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;          &lt;font color="#444444"&gt;// NOT OK, squeegees is a two-d array of int arrays&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;8) A static initialization block runs once, when the class is first loaded. An instance initialization block runs once every time a new instance is created.&lt;br /&gt;&lt;br /&gt;9) Init blocks execute in the order they appear.&lt;br /&gt;&lt;br /&gt;Static init blocks run once, when the class is first loaded.&lt;br /&gt;&lt;br /&gt;Instance init blocks run every time a class instance is created.&lt;br /&gt;&lt;br /&gt;Instance init blocks run after the constructor's call to super().&lt;br /&gt;&lt;br /&gt;10) Remember, wrapper reference variables can be null.&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; &lt;font color="#2040a0"&gt;Boxing2&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;static&lt;/strong&gt; &lt;font color="#2040a0"&gt;Integer&lt;/font&gt; &lt;font color="#2040a0"&gt;x&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;  &lt;strong&gt;public&lt;/strong&gt; &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;void&lt;/strong&gt; &lt;font color="#2040a0"&gt;main&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;String&lt;/font&gt; &lt;font
