<?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-5969046146605906454</id><updated>2011-10-13T23:39:59.901-07:00</updated><title type='text'>Be a different fool</title><subtitle type='html'>Stay Hungry, Stay Foolish</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://loghmani.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5969046146605906454/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://loghmani.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>ali</name><uri>http://www.blogger.com/profile/07859295588539681429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_IjNtY51oZ7c/R3iLXqgS2vI/AAAAAAAAA70/PXPr4psNL4A/S220/face.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5969046146605906454.post-854934374076473024</id><published>2010-03-29T02:15:00.000-07:00</published><updated>2010-05-27T12:36:19.508-07:00</updated><title type='text'>How-Tos for implementation of Open Source Portal and ECM Projects</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;It is always a big challenge when you want to extend your current web presence and manageability of your content produced by your existing legacy applications. There are a variety of different implementations on how to achieve this goal. In this post I will try to list some of the main criteria and constraints and evaluate their impact and order of magnitude on successful execution of such projects.&lt;br /&gt;&lt;br /&gt;1.       Available budget and time (this includes current license fees for proprietary solutions)&lt;br /&gt;&lt;br /&gt;2.       Volume of new requirements&lt;br /&gt;&lt;br /&gt;3.       Non functional requirements&lt;br /&gt;&lt;br /&gt;4.       Complexity of current applications&lt;br /&gt;&lt;br /&gt;5.       Volume of Legacy Data&lt;br /&gt;&lt;br /&gt;6.       Technologies used in the current applications&lt;br /&gt;&lt;br /&gt;7.       Size of client organization, on board technical team and existing technical knowledge&lt;br /&gt;&lt;br /&gt;8.       Foreseeable vision in the industry and its impact on you&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Based on the constraints above and some additional requirements companies decide about their choice of framework or application.&lt;br /&gt;&lt;br /&gt;In fact, your budget and window of time is often the main driver of most of the projects. But how can you receive a solution in a tight window with an already limited budget? It makes sense to adopt an already developed framework and build on top of that to cut time and cost. So, how are you supposed to train your team (if you have any) to pick up that framework? The answer is easy; you need creditable system integrators and reliable open source solution providers. Hence, you will have your project delivered and concurrently train the team during implementation.&lt;br /&gt;&lt;br /&gt;Alright, let’s say you are pretty convinced about dancing with open source Portal/ECM technologies. Obviously it is not going to end up like an arranged marriage because you should not pay an arm and a leg for it. You are just dating some open source solution providers, just like high school days. The whole idea is to not anchor yourself.&lt;br /&gt;&lt;br /&gt;Now the question is how could an open source Portal/ECM solution help you in satisfying your requirements? To be quite frank, open source frameworks may require light to heavy customization in order to satisfy some of your requirements. What makes them quite compelling is that being open source makes it possible to extend and customize them. Indeed, volume of your requirements should be balanced with your time and budget.&lt;br /&gt;&lt;br /&gt;Currently there are a variety of different Open Source Portal and CMS frameworks in the market, frameworks built on Python, Java, PHP, C++, ROR, and basically any language or technology out there. Most of these frameworks come with tons of OOTB (Out of the Box) features and cool stuff. However, often most of these freebies must be polished and re-skinned to match your requirements. In fact, assessing these frameworks and matching their OOTB features with the requirement list is the first thing you need to do.&lt;br /&gt;&lt;br /&gt;After benchmarking your requirements with available frameworks or having someone to do it, you can shortlist a handful of products for your project. Next step is to categorize the requirements in respect to the shortlisted frameworks as below:&lt;br /&gt;&lt;br /&gt;1.       Requirement is satisfied by OOTB feature: The selected framework will contain the code and services.&lt;br /&gt;&lt;br /&gt;2.       Requirement will be satisfied by extending the OOTB feature(s): The customizations and extensions should be done in an extensible pluggable way, I will describe after this section.&lt;br /&gt;&lt;br /&gt;3.       Requirement is custom and must be developed. This type of requirement could be broken into the following sub categories:&lt;br /&gt;&lt;br /&gt;a.       Singular requirement: For instance custom Admin, dashboard, contact us page, custom Portlets, unique user attributes and etc. Basically anything that is unique and not repeatable: Such requirements should be implemented as external services or components as much as possible. You do not need to bind the developed components to any frameworks. This is vital for near future extensions. Especially when you consider the trend of technology where services will be hosted on the cloud in near future.&lt;br /&gt;&lt;br /&gt;b.      Repeatable requirements: For instance email templates, Product Pages, Order entities, Workflows, Search function, etc. Basically anything that is repeatable or could be generalized to be reusable: For such requirements a custom framework must be designed containing generic extensible services configurable for your repeatable requirements. This is imperative especially with big projects where amount of time put in designing and creating such framework pays off in reducing overall production time.&lt;br /&gt;&lt;br /&gt;After or even before this analysis you should compare the shortlisted frameworks with your current in house expertise. Basically a framework is discarded if it does not match your in house knowledge. Let’s say your team knows PHP like the back of their hand in which case, it would not be wise to pick a Java based framework. But what if you are coming from a big corporate using several technologies, what should be your approach? What if you want to implement a Portal or ECM aggregating legacy services or content from different sources each built on a different technology?&lt;br /&gt;&lt;br /&gt;To answer this question it is better to analyze the impact of complexity of current legacy applications and their data on architecture of the solution first.&lt;br /&gt;&lt;br /&gt;You may think your new solution must fully replace the existing legacy applications and the current data should be migrated. I would agree if you are using a solution from the eighties or you want to get rid of licensing fees of proprietary products. Otherwise, most of the time it is not necessary or even wrong to fully replace the existing systems. Let me categorize the cases where you need to replace a product:&lt;br /&gt;&lt;br /&gt;1.       The current product is using an old technology and you receive no in house or external support for it. In other words, it is impossible to extend, alter, or even maintain it.&lt;br /&gt;&lt;br /&gt;2.       The current product is an expensive proprietary solution and you need to cut cost.&lt;br /&gt;&lt;br /&gt;In other cases it is much better to wire all or some parts of the old legacy applications with the new Portal or ECM solution. It is recommended to do the wiring through Web Service, REST, CMIS or other widely supported interfaces. By the way, this kind of wiring is affordable if the new Portal or ECM is an Open Source one.&lt;br /&gt;&lt;br /&gt;Integration of old and new applications through adaptable and extensible interfaces helps you in cutting cost and reducing production time. In a nutshell, my idea is about maximizing utilization of useful components and increasing their re-usability by wrapping them with configurable interfaces.&lt;br /&gt;&lt;br /&gt;So far we have discussed different types of requirements and techniques to implement them and how to integrate applications together. It is very important to execute the integration via pluggable, extensible and reconfigurable interfaces. Following these design patterns enables you to be able to box solutions in atomic packages and make them independent of each other. All you need to do is to make sure that they can communicate with each other. This way your dependency on technologies will be reduced and your near future customizations could be done much easier.&lt;br /&gt;&lt;br /&gt;As mentioned before it is really important what Portal or ECM technology is selected. On the other hand, it is vital to have a flexible Portal and ECM backbone for hosting different types of technologies and content. It is better recognized, if your company is serving a big volume of data produced by different applications. In a nutshell, considering the pace of change in the industry you always need to be able to reuse your existing services instead of renewing them constantly.&lt;br /&gt;&lt;br /&gt;You should be hearing cloud computing, cloud services, social networking and things like that every day. The fact is you need to be ready to publish your services to the cloud or be able to consume services from it. In order to do that, you need to focus on the integration level and extension of the current services more than recreating services with new technologies.&lt;br /&gt;&lt;br /&gt;As illustrated in the diagram below generic modules and components should be loosely coupled to each other so in future extensions you would go through smaller changes.&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_IjNtY51oZ7c/S_Rp6tcf8gI/AAAAAAAABoo/p1nNLDF7GPE/s1600/Architecture.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 341px;" src="http://4.bp.blogspot.com/_IjNtY51oZ7c/S_Rp6tcf8gI/AAAAAAAABoo/p1nNLDF7GPE/s400/Architecture.jpg" alt="" id="BLOGGER_PHOTO_ID_5473115904514454018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;To recap, it is important to be technology agnostic and be flexible to interact with components developed in any language. As depicted in the diagram above it is highly imperative to separate the components from each other and make them as reusable as possible. In order to achieve such goal the following steps are necessary to be considered.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    1.    Have the right vision about the future of your requirements&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    2.    Prioritize your requirements based on your budget and time and cross check them with the framework you select.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    3.    Do not fall in love with any technology, they change every day. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    4.    Develop the components in standalone packages and modules. Even avoid developing them within the open source Portal and ECM stack. You do not want to marry them either. Remember, you are just dating them for maximum five years. Standalone packages could later be reconfigured and reused over and over. But if you change the framework chances of re-usability drop drastically.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    5.    Try to maximize usage of the existing services and save money and time for more important requirements. Try to componentize existing functions and equip them with configurable, extensible and reusable interfaces.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;    6.    Execute the project by the right people who know the open source stack and technologies inside out. Do not worry to outsource the project. You always can have your people trained on the job during project implementation. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    7.    Try to separate rendition of your content from its processing and population. The only thing you need to display in a Portal is the rendered content not the way it is processed. In other words package the rendering layer separately. The view or rendering layer should fetch data from other components through the discussed interfaces. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    8.    Do not used heavy technologies in the view layer. Try to use lightweight ones instead. Your Portlets should be designed as shell rendering your already processed content by other modules. If you execute this correctly, you could render your services in any Portal, or application. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    9.    Keep your content components separate from the other components and access them through generic and configurable services. You do not need to be bound to one particular CMS framework. Remember you are dating.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;    10.    The middle layer and business logic services should be template agnostic. The rendering layer is responsible for templating the processed content. The business layer services should be designed in such a way to be consumable by any Portal (for instance iGoogle, iTunes, Facebook, etc.) with minimum effort. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Finally, I need to mention that I have exercised this idea for several big clients and it has worked out pretty well. My concept is pretty easy, do not waste your time by repeating yourself, look for already developed code and try to make it reusable and extensible. Ain't it easy? &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5969046146605906454-854934374076473024?l=loghmani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://loghmani.blogspot.com/feeds/854934374076473024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5969046146605906454&amp;postID=854934374076473024' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5969046146605906454/posts/default/854934374076473024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5969046146605906454/posts/default/854934374076473024'/><link rel='alternate' type='text/html' href='http://loghmani.blogspot.com/2010/03/implementing-open-source-ecm-and-portal.html' title='How-Tos for implementation of Open Source Portal and ECM Projects'/><author><name>ali</name><uri>http://www.blogger.com/profile/07859295588539681429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_IjNtY51oZ7c/R3iLXqgS2vI/AAAAAAAAA70/PXPr4psNL4A/S220/face.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_IjNtY51oZ7c/S_Rp6tcf8gI/AAAAAAAABoo/p1nNLDF7GPE/s72-c/Architecture.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5969046146605906454.post-4024801870938837565</id><published>2008-07-17T00:32:00.000-07:00</published><updated>2008-07-17T16:56:09.160-07:00</updated><title type='text'>Why is web UI development slow?</title><content type='html'>Have you ever been a team member in a web framework or web product development? You may have noticed although UI prototyping is a fast process but UI integration is disappointingly slow. Have you thought why does this happen? Is it because of not using MVC design pattern and templating technologies? Is it because of poor code quality, tight time frame or ever changing requirements? &lt;br /&gt;&lt;br /&gt;To answer the above question, I would say it is more because of the sluggish process of inserting the framework components and tags into the UI pages. Especially when you try to see the changes as the UI is being translated inserting MVC tags and components into the view pages. As many of us have experienced UI designers and usability people can freely preview UI pages as they are being built. Well, at the other hand you may have noticed that a developer can only preview the translated UI pages when they are served by an application server. That really slows down the process. Each time you should wait as the application is built and deployed, again wait for the app server to come up and then finally checking your change. That is just a waste of time, sucks, nah?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So let’s talk about a solution to make the UI construction faster and easier? In this post I am going to introduce the first part of new discipline for UI development by smart manipulation of the existing technologies. That is true, no new technology.  &lt;br /&gt;&lt;br /&gt;I have learned in time that solutions must be simple not complex; complex solutions are always more error prone than the simple ones. To realize the necessity of the change for UI construction let’s answer to the questions below:&lt;br /&gt;&lt;br /&gt;● What if UI designers could develop UI separately from developers and test them with mock data?&lt;br /&gt;&lt;br /&gt;● What if UI designers could still leverage from easy preview features of their IDE’s while constructing the final UI pages using only HTML, CSS and Java Script?&lt;br /&gt;&lt;br /&gt;● What if backend developers could integrate the UI to their code simply by introducing some touch points (Think of touch points as URLs, yes I mean RESTful API here)?&lt;br /&gt;&lt;br /&gt;● What if the developed UI could be interoperable and be easily integrated with any backend technology like Python, .Net, Java, etc. (Relying on XML and Ajax for interfacing)?&lt;br /&gt;&lt;br /&gt;Well, we can continue with questions but I think it is better to see how they all could be possible. It is simple just follow the following steps:&lt;br /&gt;&lt;br /&gt;● Avoid using any non HTML tags (JSF, ASP, JSP, Struts, etc.) in the view layer pages; just use plain HTML with Java script. This helps for faster development and easy page previewing during construction. Simply there will be no need to wait for the app server to be restarted or even waiting for hot deployment. &lt;br /&gt;&lt;br /&gt;● During unit development and testing, simply test the UI with some static mock data, whether it is text or XML. I personally recommend using XML for complex data types. It is better for standardization and reusability and extensibility of your code both in the backend and front end.&lt;br /&gt;&lt;br /&gt;● For any Ajax based component follow a consistent RESTful API. It means that in the backend the integration points should provide XML based RESTful APIs. This helps the ultimate view layer abstraction from the backend technology. This would also lead you to become adaptable with future ESB, SDO and Metamodel integrations.&lt;br /&gt;&lt;br /&gt;● Try to package and proxy XML de-serialization and parsing in reusable and reconfigurable Java Script functions. As an example, study Dojo, JSON, JQuery, etc. In fact, there are frameworks like IceFaces or DWR that perform XML to Java Script data serialization and de-serialization out of the box. Eventually, after creating a dozen of such reusable and reconfigurable functions, then most of your new requirements would be satisfied by an already developed function.&lt;br /&gt;&lt;br /&gt;Basically, there is always a tendency that opposes any direction or discipline change from the current state to a new and unexplored state. To dump it down, there is inertia for quitting the View chunk of the MVC technologies, and simply hopping on this UFO. In fact, this discipline is not a new technology. Instead, it is a simple trick for accelerating the development process by abstracting the view layer from the underlying ones and making it more interoperable, cluster-able, cache-able and reusable. The Lego parts have always been there and this time we are not playing based on the given plot, but we want to play it above the age limit.  &lt;br /&gt;&lt;br /&gt;Indeed, I have to elaborate this discipline more and describe it by tangible and solid examples. I believe each of the bullets above could be a post for itself. I will definitely expand them with detailed and comparative samples in the coming days. &lt;br /&gt;&lt;br /&gt;By the way, I am looking for a name for this discipline, what about MASK?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5969046146605906454-4024801870938837565?l=loghmani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://loghmani.blogspot.com/feeds/4024801870938837565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5969046146605906454&amp;postID=4024801870938837565' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5969046146605906454/posts/default/4024801870938837565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5969046146605906454/posts/default/4024801870938837565'/><link rel='alternate' type='text/html' href='http://loghmani.blogspot.com/2008/07/why-ria-view-layer-integration-is-hard.html' title='Why is web UI development slow?'/><author><name>ali</name><uri>http://www.blogger.com/profile/07859295588539681429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_IjNtY51oZ7c/R3iLXqgS2vI/AAAAAAAAA70/PXPr4psNL4A/S220/face.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5969046146605906454.post-1337249242020508997</id><published>2008-06-18T04:01:00.000-07:00</published><updated>2008-06-18T23:00:02.517-07:00</updated><title type='text'>Enhanced Object Pool</title><content type='html'>The classic design pattern for an object pool is to define a synchronized List (or rarely a Map) object that stores initialized objects in it. Each time a consumer requests an object the controller Thread selects a free object from the list, marks it as busy and returns it to the consumer. For releasing the object back to the pool the consumer calls the controller Thread and subsequently it passivates the object or reconfigures it or simply sets its status back to free (based on the complexity of the object). The controller Thread is also responsible for object initialization if there is object starvation in the pool. It is worthy to remind that most of the common patterns prescribe a block size for object initialization rather than creating only one object.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;&lt;br /&gt;// The conventional borrow method&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);font-family:courier new;" &gt;&lt;br /&gt;public synchronized Object borrow() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (pool.size == 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;createObjects();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Object freeObject = pool.getNextElement();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return freeObject;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If an object consumer has to wait for object initialization then the pool design pattern becomes meaningless. To avoid any delay in responding back to the greedy object consumption, instead of losing all resources and then initializing a number of them, set a bottom limit other than zero so if the pool hits this limit it initializes more objects, so it always has ready objects. Likely, in order to control memory and process management (if objects are Threads) set an upper limit, so each time the pool has more than a certain number of objects it passivates the excessive ones.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;&lt;br /&gt;// The enhanced borrow method&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);font-family:courier new;" &gt;&lt;br /&gt;public synchronized Object borrow() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (pool.size &lt;= limit &amp;&amp; initializingFlag == SLEEP) {&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-family:courier new;" &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// a separate Thread&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);font-family:courier new;" &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objectInitializerThread().resume();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Object freeObject = pool.getNextElement();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return freeObject;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It is important to note that a separate Thread must be responsible for Object initialization and if the initialization process is in progress then do not exhaust the resources again. This requires a heedful calculation for the bottom limit and block size adjustment.&lt;br /&gt;&lt;br /&gt;Now if the snippets are compared it is obvious that the second one is more responsive than the first one. It is worthy to note again that based on your specification and requirements the bottom limit and the block size numbers must be configured in a way to avoid any object starvation in the pool.&lt;br /&gt;&lt;br /&gt;Next I will present a formula for adjusting these numbers and afterward will unveil a series about the new Client Server architecture based on Ajax, RIA, REST,  SOA and ESB concepts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5969046146605906454-1337249242020508997?l=loghmani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://loghmani.blogspot.com/feeds/1337249242020508997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5969046146605906454&amp;postID=1337249242020508997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5969046146605906454/posts/default/1337249242020508997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5969046146605906454/posts/default/1337249242020508997'/><link rel='alternate' type='text/html' href='http://loghmani.blogspot.com/2008/06/enhanced-object-pool.html' title='Enhanced Object Pool'/><author><name>ali</name><uri>http://www.blogger.com/profile/07859295588539681429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://bp2.blogger.com/_IjNtY51oZ7c/R3iLXqgS2vI/AAAAAAAAA70/PXPr4psNL4A/S220/face.JPG'/></author><thr:total>0</thr:total></entry></feed>
