tag:blogger.com,1999:blog-65813150876658896222024-02-08T05:28:47.107-08:00ThoughtsSujith Vellathttp://www.blogger.com/profile/15351851625847994330noreply@blogger.comBlogger13125tag:blogger.com,1999:blog-6581315087665889622.post-85582403238457268242010-08-30T17:25:00.000-07:002010-10-14T23:45:43.186-07:00Retry Logic for Spring SimpleRemoteStatelessSessionProxyFactoryBeanThis is one of the possible generic solution for a specific clustering/failover problem if we have a spring/ejb application deployed in Jboss server.<br /><br />The problem will happen if we follow the pure distributed J2EE deploymnet having the web artifacts deployed on a set of web servers (Tomcat/JBoss etc) which remotely connects to a set of stateless session beans exposing business services. In this case session beans will be hosted on a cluster of JBoss servers.<br /><br />The failover will work fine as long as the ejb cluster did not go for a complete shutdown. But in cases where the ejb application cluster was completely restarted for maintenance we will be forced to restart the web cluster as well since the client proxy no longer has the information on new cluster topology.<br /><br />In the spring/ejb approache we will use the SimpleRemoteStatelessSessionProxyFactoryBean provided by spring to connect to the EJBs.<br /><br />If we google we will find atleast 2 solutions<br /><br />1. Use refreshHomeOnConnectFailure<br /><br />The SimpleRemoteStatelessSessionProxyFactoryBean used for JNDI lookup has property “refreshHomeOnConnectFailure” which if sets true, Spring will refresh the Home by retrying.<br /><br />The only catch here is the refresh will happen only for RMI Exception and its subclasses. But Jboss is throwing “java.lang.RuntimeException” exception and Spring will not do the the refresh.<br /><br />Here is the JIRA for details https://jira.springframework.org/browse/SPR-129<br /><br />2. Use JBoss RetryInterceptor<br /><br />With this interceptor, JBoss will refresh the proxy and it has to be specified in jboss.xml file.<br /><br />http://community.jboss.org/wiki/RetryInterceptor<br /><br />This interceptor requires environment properties which can be set by using the method RetryInterceptor.setRetryEnv(env) or having the JNDI property file in the class path.<br /><br />Since we are using spring, it is not possible to directly use setRetryEnv () method, instead we can extend the SimpleRemoteStatelessSessionProxyFactoryBean to have the retry lgic.<br /><br /><pre class="Java" name="code"><br /><br />import java.lang.reflect.InvocationTargetException;<br />import java.net.ConnectException;<br />import java.rmi.RemoteException;<br /><br />import javax.ejb.CreateException;<br />import javax.ejb.EJBObject;<br />import javax.naming.NamingException;<br /><br />import org.aopalliance.intercept.MethodInvocation;<br />import org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean;<br />import org.springframework.remoting.RemoteLookupFailureException;<br />import org.springframework.remoting.rmi.RmiClientInterceptorUtils;<br /><br />/**<br /> * This is extended version of SimpleRemoteStatelessSessionProxyFactoryBean This<br /> * class is extended to Retry the connetion after refreshing the ejbHome for a<br /> * specfied number of times.<br /> * <br /> * This is only required in cases of entire cluster shutdown.<br /> * <br /> * For example: If there are nodeA,nodeB and nodeC in the cluster. If all these<br /> * nodes are brought down then the client proxies do not have any knowledge on<br /> * the cluster topology. In such a case, the only option is to refresh the home<br /> * by a re-lookup and retry the operation.<br /> * <br /> * This can be used as spring replacement for the approach mentioned here<br /> * http://community.jboss.org/wiki/RetryInterceptor<br /> * <br /> * @author Sujith Vellat<br /> */<br />public class RetrySimpleRemoteStatelessSessionProxyFactoryBean extends<br /> SimpleRemoteStatelessSessionProxyFactoryBean {<br /><br /> private int numberOfRetries = 2;<br /><br /> /**<br /> * This implementation "creates" a new EJB instance for each invocation. Can<br /> * be overridden for custom invocation strategies.<br /> * <p><br /> * Alternatively, override {@link #getSessionBeanInstance} and<br /> * {@link #releaseSessionBeanInstance} to change EJB instance creation, for<br /> * example to hold a single shared EJB component instance.<br /> */<br /> @Override<br /> protected Object doInvoke(MethodInvocation invocation) throws Throwable {<br /> return doInvoke(invocation, 0);<br /> }<br /><br /> protected Object doInvoke(MethodInvocation invocation, int count)<br /> throws Throwable {<br /> Object ejb = null;<br /> try {<br /> ejb = getSessionBeanInstance();<br /> if (count < numberOfRetries) {<br /> return RmiClientInterceptorUtils.invokeRemoteMethod(invocation,<br /> ejb);<br /> } else {<br /> return null;<br /> }<br /> } catch (NamingException ex) {<br /> throw new RemoteLookupFailureException(<br /> "Failed to locate remote EJB [" + getJndiName() + "]", ex);<br /> } catch (InvocationTargetException ex) {<br /> Throwable targetEx = ex.getTargetException();<br /> if (targetEx instanceof RemoteException) {<br /> RemoteException rex = (RemoteException) targetEx;<br /> throw RmiClientInterceptorUtils.convertRmiAccessException(<br /> invocation.getMethod(), rex, isConnectFailure(rex),<br /> getJndiName());<br /> } else if (targetEx instanceof CreateException) {<br /> throw RmiClientInterceptorUtils.convertRmiAccessException(<br /> invocation.getMethod(), targetEx,<br /> "Could not create remote EJB [" + getJndiName() + "]");<br /> } else if (targetEx instanceof RuntimeException) {<br /> if ((targetEx.getCause() == null && "Unreachable?: Service unavailable."<br /> .equals(targetEx.getMessage()))<br /> || (targetEx.getCause() != null && (targetEx.getCause() instanceof ConnectException || targetEx<br /> .getCause().getCause() instanceof ConnectException))) {<br /> try {<br /> refreshHome();<br /> } catch (NamingException namingException) {<br /> throw new RemoteLookupFailureException(<br /> "Failed to locate remote EJB [" + getJndiName()<br /> + "]", namingException);<br /> }<br /> return doInvoke(invocation, ++count);<br /> }<br /> }<br /> throw targetEx;<br /> } finally {<br /> if (ejb instanceof EJBObject) {<br /> releaseSessionBeanInstance((EJBObject) ejb);<br /> }<br /> }<br /> }<br /><br /> public int getNumberOfRetries() {<br /> return numberOfRetries;<br /> }<br /><br /> public void setNumberOfRetries(int numberOfRetries) {<br /> this.numberOfRetries = numberOfRetries;<br /> }<br /><br />}<br /></pre><br /><br />This approach gives us atleast a foolproof failover mechanism on JBoss server for the spring-ejb flavoured applications. <br /><br />I would love to know if there are better approaches for the same problem.Sujith Vellathttp://www.blogger.com/profile/15351851625847994330noreply@blogger.com0tag:blogger.com,1999:blog-6581315087665889622.post-43701579131483230192010-07-27T12:39:00.001-07:002010-10-14T21:01:02.824-07:00More thoughts on Solution Architecture<span style="font-size:85%;">My attempt to define solution architecture steps may have confused the readers and I started to receive more queries and I thought I will explain those in much more detail with examples.<br /><br />NOTE: I will update this with an example to give more clarification as soon as I get some enough free time from my paid job :)<br /><br />1) At what point will you decide on architecture pattern(style) e.g., Layers, SOA, REST, MVC ?<br />As we discussed earlier. There are tiers and different layers in each tier.<br />For example: At conceptual level itself you should be able to define the different tiers. A two tier, three tier or n-tier application.<br />The layers are identified at the Logical architecture level. For example in a n-tier app at the business tier I can have multiple layers based on various considerations (design approach, nfr , complexity, reusability etc.) like service layer, component layer, data access layer etc based on the concepts of separation of concerns / class-responsibilty-collaboration etc<br />SOA is a pattern/paradigm not a layer or tier. REST is a protocol to choose at the technical architecture level.<br /><br />2) Where exactly are NFRs realised (In Conceptual or Logical architecture).<br />I would say NFRs are considered at all stages in architecture but the amount of impact of NFR in architecture differ at differnt phases. For example a performance requirement can reduce the number of tiers OR layers chosen for a system at the coceptual and logical levels.<br />The same performance requirement can introduce a caching layer at the time of logical/technical architecture phase. It can impact the technologies chosen at the tarchitecute phase. Since technical architecture being the pillar of a solution architecture this is where you get most impact and where you get your hands dirty :) Again architectures goes through different iterations to achieve its perfection, so when you define an architecture document for a project, put all your deep thoughts into it but keep it as a living document. Atleast thats what I found in my experience.<br /><br />3) How exactly do you differenciate between Conceptual and Logical architecture.<br />I hope I answered this as part of frst question. Still to elaborate, the difference lies in the level of details. You also need to consdier that there are different audience for your architectue. This involves stake holders, other customer officials, business managers, sales team, testers and (the most important audience) developers who need to execute this. So we should be defining architecture at different detail levels for easiness of grasping the architecture for all type of audience. Many of the business audience/sales may not be much intersted in knowing all the layers in detail but may be interested in the conceptual architecture. I am not sure whether this will confuse you more but I would suggest you to compare conceptual-to-logical as a journey from highlevel design to lowlevel design (just to compare design is not architecture always).</span>Sujith Vellathttp://www.blogger.com/profile/15351851625847994330noreply@blogger.com1tag:blogger.com,1999:blog-6581315087665889622.post-72609171377096992502010-07-26T21:49:00.000-07:002010-07-30T05:31:49.136-07:00Defining Solution Architecture<span class="Apple-style-span" style=" color: rgb(51, 51, 51); line-height: 15px; font-family:Arial, Helvetica, 'Nimbus Sans L', sans-serif;font-size:13px;">There are different types of architectures and architects in todays industry spanning from enterprise/solutions/system/technical/application/platform/data architectures/architects. (Architecture is now a very generic term) So the analysis of requirements to architecture differ for each of these cases.<br /><br />Still let me try to explain the architecture at a solution architecture level as I understand enterprise architecture is still far from my reach :)<br /><br />By understanding the business requirements and grouping them into modules/sub-systems at a high level we achieve the conceptual architecture. In normal scenarios we will be able to identify the different tiers in the system at this time.<br /><br />These high level modules/subsystems are further analysed in more detail to get to a logical architecture and at this point we should be focusing on defining the various layers in each tier. This is achieved by identifying the business services, the reusable components that make up these services etc.<br /><br />Now this logical architecture needs a technology mapping. Which technologies you choose for the each of the subsystems/tiers/layers are identified at this stage and this phase should form the pillar of our architecture. This is where the architecture reflects how the business requirements are transformed to technology solutions. This is where an architects breadth in technology knowledge comes handy and these chosen technologies are where a hands-on architect will increase his depth of knowledge. We also need to consider the non-functional requirements while choosing technologies and platforms. But please also note that non-functional requirements should be heavily prioritized as many of them can be compromised over the duration of a project. I like to call this phase as technical architecture (tarchitecture).<br /><br />Once you have mapped your business requirements to technology, you need to define a physical view of how these technologies will be laid out and hence we define a Deployment architecture. The non-functional requirements like scalability, availability etc play a significant role while defining this. Whether our components should be co-located or distributed we decide at this stage assuming our tarchitecture supported both :)<br /><br />So in short defining conceptual,logical,technical and deployment architectures are what i followed from the requirements to solution to delivery. There are more variations and additions and exceptions to these in specific cases which i skipped here and we can write a book to explain all those as we adapt many of our approaches based on each project :)</span>Sujith Vellathttp://www.blogger.com/profile/15351851625847994330noreply@blogger.com1tag:blogger.com,1999:blog-6581315087665889622.post-3238865354612704862010-06-07T21:10:00.000-07:002010-07-24T18:45:06.394-07:00Before Beginning a Project<div>It has been a year since I wrote my first blog here. In this long period I was working on 2 software projects and I am almost near the final functional release of my first one. There is still some more work to be done but they are all what we call the final touches including minor bug fixes and performance improvements, enhancements based on wishlist that we kept on pending etc. </div><div><br /></div>Straight to the point: Now a days many of the projects are carried out in a short time span, so what are some of the important steps that need to be put in place before beginning development of a software project.<div><br /></div><div><li>Technically Foolproof Statement of Work (SOW)</li></div><div>Not many gets a chance to influence the SOW of projects that they work on. I strongly believe that any one who is going to play the architect role should be given a chance to review the SOW before its signed off if non-functional aspects like scalability and availability etc are detailed in the SOW documents. Some SOW writers go into extreme level in non-functional aspects like 99.9999 percent availability, infinite horizontal scalability, 100% test coverage etc with a motive of getting the project by sitting in fictional world. These are the statements which sets wrong expectation to any customer without giving them the entire details about the effort and cost to achieve the same. How to write a foolproof statement of work will need another blog of its entirety but I wanted to scribble some interesting thoughts I have on SOWs that may fail the project before it starts.</div><div><br /></div><div><li>Proper Requirement Analysis:</li></div><div>I have seen organizations multi-tasking the resources for various type of day to day works in software industry. This has its pros/cons. Some times moving a core engineering team member into level 2 support or application testing team for some time helps the developer to understand the necessities of his counterparts and adapt his working style to contribute to the team better, but instead if developers are dragged into the requirement capturing phase we might end up in getting semi cooked design documents instead of requirement specifications. Instead of understanding the breadth and depth of requirements, the developer always tend to concentrate more on the technical challenges in achieving the same and misses out the important point of capturing the thoughts from the business team. So its important that organizations should not multi-task resources to this extreme and instead employ the right experienced resources at the time of requirement capturing.</div><div><br /></div><div><br /></div><div><li>Setting Up a Source Code Repository (SCR):</li></div><div><br /></div><div>This is the place where we keep all the essential files required to build a product. It plays an important role in the software development life cycle and the significance is very high in recent projects where we have Continous Integration (CI) in place. SCR like Subversion enable the development team to work collaboratively and simultaneously on the code / document artifacts. These tools provide this concurrent collaboration feature with the help of powerful version control mechanism and conflict resolution inbuilt.</div><div><br /></div><div><li>Defining the Standards:</li></div><div>However strong and experienced the team we build we should not forget that the team is a set of people with diversified thoughts and its necessary to ensure that all these thoughts are stream lined to achieve the success of a project as a team. Defining standards at all levels as much as possible ensure that this is achieved. Defining the set of tools that project should use, the development environment for all the different kinds of developers etc should be defined and documented upfront. Though I would say an architect will need to refine these things on the course of the project by receiving feedback from his team.</div><div><br /></div><div>General Developer Guidelines: This should be the first place of reference for any developer for any project specific documentation. In some situations this document may also act as the index for the other sub-documents.</div><div>Coding Standards & Guidelines:</div><div><br /></div><div>Checklist: Code review checklists, </div><div><br /></div><div><br /></div><div><br /><li>Setting up Continous Integration (CI):</li><span class="Apple-style-span" style=" color: rgb(51, 51, 51); line-height: 16px; font-family:'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif;font-size:13px;"><em style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-weight: inherit; font-style: italic; font-family: inherit; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">“Continuous integration is a software development practice where members of a team integrate their work frequently—usually each person integrates at least daily—leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly.”—Martin Fowler</em></span></div><div><br /></div><div><br /></div><div>There are so many servers supporting continous integration now and most of them are open source. I have used two of them Cruise Control and Hudson and found it exremely easy to set up and very helpful in the whole duration of projects. </div><div>Regardless of what CI server you use, the CI server obtains the latest source code from SCR, locates all required dependencies, and builds the product independently from the previous build output.</div><div>Well none of these CI servers will write the build scripts for us. So we need to ensure that we have a solid build system. (For eg: based on maven or ivy for a JEE project). Its very important that this is setup very early, atleast before the developers are kicked into the project.</div><div><br /></div><div><br /></div><div><div><li>Setting Up Bug Tracking System:</li></div><div>JIRA or bugzilla</div></div><div><br /></div><div><li> Building an application framework</li></div><div><br /></div><div><div><li>Maintaining a talent pool:</li></div><div>After working for some startups and consulting firms I find a talent pool playing a significant role in the success of any company. Maintaining a talent pool is going to be one of the major factors in the success of any organization. We save the time for team building. Having a nice team environment is not an easy one to achieve from the day one. Yes it takes time and effort. Apart from that the developers are already proven in the organization and hence you can guarantee that unhealthy competitions are avoided. Also when we have the organizational wide frameworks in place these developers will be well versed with the usage of the same.</div><div><br /></div></div>Sujith Vellathttp://www.blogger.com/profile/15351851625847994330noreply@blogger.com0tag:blogger.com,1999:blog-6581315087665889622.post-76691257356017357152010-04-02T18:30:00.000-07:002010-10-08T23:39:35.889-07:00Principles behind the Agile Manifesto<ol><br /><li>Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.</li><br /><li>Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage. </li><br /><li>Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.</li><br /><li>Business people and developers must work together daily throughout the project. </li><br /><li>Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done. </li><br /><li>The most efficient and effective method of conveying information to and within a development team is face-to-face conversation. </li><br /><li>Working software is the primary measure of progress. </li><br /><li>Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely. </li><br /><li>Continuous attention to technical excellence and good design enhances agility. </li><br /><li>Simplicity—the art of maximizing the amount of work not done—is essential. </li><br /><li>The best architectures, requirements, and designs emerge from self-organizing teams. </li><br /><li>At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.</li></ol><br /><p align="left"></p><br /><p align="right"><em><font color="#666666">Highsmith (2001)</font></em> </p>Sujith Vellathttp://www.blogger.com/profile/15351851625847994330noreply@blogger.comtag:blogger.com,1999:blog-6581315087665889622.post-44383678864419080272009-08-18T09:19:00.000-07:002010-10-14T12:11:36.299-07:00Map-Reduce Database (MRDBMS)With data growing faster than Moores Law, the different flavours of massively-parallel processing (MPP) database architectures are in limelight.<br />After Google revealing the power of Map-reduce applications for procesing large scale data, most of the new generation databases have followed that path. Hence I call them as Map-Reduce Databases.<br />With high scalability and performance being two most important considerations for a successful web 2.0+ application architecture, Relational DBMS is being either supplemented or replaced by MapReduce database systems (MRDBMS)<br /><br /><br />The important picks in my list folllow:<br /><br />BigTable : From Google<br />I would call this as Father of MapReduce databases. The only way I know to use this is via Google App Engine :(<br /><a href="http://en.wikipedia.org/wiki/BigTable">http://en.wikipedia.org/wiki/BigTable</a><br />If you use Google App engine, you can use BigTable via the native DataStore API, using JPA or JDO.<br /><br />HBase : Based on HDFS from Yahoo<br />This is mostly implemented using Java. Has a C++ competitor called Hypertable.<br /><br />AsterData - nCluster : From Aster Data<br />In-Database MapReduce<br />You need to implement Map-Reduce functions in a language of your choice.<br />(A variety of languages Java, C#, Python, Perl, C++, and C are supported) and deploy them onto the Queen Node. These functions can then be called in the SQL queries.<br /><br />Greenplum Database : From GreenplumSujith Vellathttp://www.blogger.com/profile/15351851625847994330noreply@blogger.com0tag:blogger.com,1999:blog-6581315087665889622.post-89045065066271124512009-07-29T06:48:00.000-07:002009-07-29T17:44:56.858-07:00Microsoft-Yahoo Search DealYahoo signs an important search deal with Microsoft. An agreement for the next 10 years. Yahoo will continue to search throughout the existing content and properties but the technology behind the search will be powered by Microsoft - The BING - Yahoo will be the exclusive sales force for both companies premium search advertisers with Microsoft investing in the search technology.<br /><br />I don't need to say that technically this deal was profitable for Microsoft. Who wont love to move from the 3rd position in the world to 2<span id="SPELLING_ERROR_0" class="blsp-spelling-error">nd</span> position, still keeping their technology as the foundation for all future development.<br /><br />With this deal Yahoo is betting into the future. Yahoo finds this necessary for both companies to scale and compete against the online search and Advertising giant GOOGLE. The companies will invest couple of 100 millions for the successful transformation. Yahoo expects the users, advertisers and publishers will benefit from this deal.<br /><br />For any one who is eager to know the impacts of this deal on the search as well as on the related services offered by both companies following are the expectations from the <span id="SPELLING_ERROR_0" class="blsp-spelling-error"><span id="SPELLING_ERROR_0" class="blsp-spelling-error"><span id="SPELLING_ERROR_1" class="blsp-spelling-error"><span id="SPELLING_ERROR_1" class="blsp-spelling-error">CEOs</span></span></span></span> of both companies<br /><ol><li>Users are expected to have the same privacy and capability as before on all the existing services </li><li>The developers from both companies are expected to have the same ability of innovation</li><li>There will be decisions made on what <span id="SPELLING_ERROR_1" class="blsp-spelling-error"><span id="SPELLING_ERROR_1" class="blsp-spelling-error"><span id="SPELLING_ERROR_2" class="blsp-spelling-error"><span id="SPELLING_ERROR_2" class="blsp-spelling-error">apis</span></span></span></span> will be equal and open to share technology etc. in web and mobile space </li><li>The companies expect to see a lot of innovation in the areas of technology innovation, for example better algorithms for <span id="SPELLING_ERROR_2" class="blsp-spelling-corrected">relevance</span> of content in the area of <span id="SPELLING_ERROR_3" class="blsp-spelling-error"><span id="SPELLING_ERROR_2" class="blsp-spelling-error"><span id="SPELLING_ERROR_3" class="blsp-spelling-error"><span id="SPELLING_ERROR_3" class="blsp-spelling-error">UI</span></span></span></span> innovation. </li><li>They expect to see innovations in areas other than technology. For example with combined marketing of Ads, both will get to see more information for business intelligence, on what customers need, what customers use most etc</li></ol><p>As per the stated plan an execution team will be formed, with members from Yahoo and Microsoft. The team is expected to have mostly members of sales team from Yahoo and members of technology team from Microsoft.</p><p>Microsoft says the foundation platform for the joint search engine (search and advertising) will be Bing. Obviously this is a big win for Bing. What is more interesting is that as part of the <span id="SPELLING_ERROR_4" class="blsp-spelling-corrected">agreement</span> announced Microsoft will acquire rights for Yahoo's search engine technology for the next 10 years. This also mean </p><ul><li>As part of all these some engineers from Yahoo may move to Microsoft. We might see the <span id="SPELLING_ERROR_5" class="blsp-spelling-error"><span id="SPELLING_ERROR_3" class="blsp-spelling-error"><span id="SPELLING_ERROR_4" class="blsp-spelling-error"><span id="SPELLING_ERROR_4" class="blsp-spelling-error">YUI</span></span></span></span> and <span id="SPELLING_ERROR_6" class="blsp-spelling-error"><span id="SPELLING_ERROR_4" class="blsp-spelling-error"><span id="SPELLING_ERROR_5" class="blsp-spelling-error"><span id="SPELLING_ERROR_5" class="blsp-spelling-error">Hadoop</span></span></span></span> technologies powering the decision engine along with <span id="SPELLING_ERROR_6" class="blsp-spelling-error"><span id="SPELLING_ERROR_6" class="blsp-spelling-error">AdCenter</span></span> advertising sales technology. </li><li>Some developers of Yahoo search department might get moved to some other areas of development</li><li>Since there is some <span id="SPELLING_ERROR_7" class="blsp-spelling-error"><span id="SPELLING_ERROR_7" class="blsp-spelling-corrected">redundancy</span></span> as part of this, some developers might be asked to go :( </li></ul><p>Since <span id="SPELLING_ERROR_8" class="blsp-spelling-error"><span id="SPELLING_ERROR_8" class="blsp-spelling-error">Ballmer</span></span> stated that introduction of Bing in Yahoo will be more of an integration than instead of a replace of search technology in Yahoo, the chances of third option (Yahoo layoff)may be minimal as lot of new opportunities always come into limelight due to the integration process <span id="SPELLING_ERROR_9" class="blsp-spelling-error"><span id="SPELLING_ERROR_9" class="blsp-spelling-corrected">at least</span></span> for an initial duration. Especially when all these processes will take it into 2010.</p><p>Its is expected that with the vast amount of content that Yahoo possess over the last decade, Bing is going to benefit in term of its relevance in the search result. How much of this improvement will be and how much of that will take away the share of <span id="SPELLING_ERROR_7" class="blsp-spelling-corrected">advertising</span> market from Google to Microsoft/Yahoo will depend really on the technology capability of Bing as well as on the sales capabilities of Y! :) </p><p></p><p></p>Sujith Vellathttp://www.blogger.com/profile/15351851625847994330noreply@blogger.com0tag:blogger.com,1999:blog-6581315087665889622.post-58056405940296482592009-07-21T06:57:00.000-07:002009-07-23T23:29:55.102-07:00Google App Engine is Supporting JVMAlmost a year after its release Google App Engine (GAE) is supporting Java. GAE supported only python as the runtime when it was released. There were stories of Java support in GAE for a long time.<br />Till now, the only options I knew to host Java applications in the cloud was the Amazon Web Services and the salesforce app engine. One of the important comment that attracts me in GAE is the support for multiple languages like Java, Scala, JRuby, Jython what else.. Literally google says that it support more than Java, it supports anything that can run on a JVM.<br /><br />Google says it supports the Sun JVM, but with some restrictions. As per google these restrictions are for ensuring security in their cloud.<br /><br />Google sees GAE as a Platform As A Service (PAAS) solution and all those Google services like BigTable are also available for JVM based applications (apart from the world famous Google Infrastructure). <br /><br />Thoughtworks as always have done their cut-throat analysis of JVM support for GAE.<br />They have come up with some suggestions/recommendations in the areas of Testing, Persistence and Concurrency<br />As per their analysis:<br /><br /><ul><li>Testing: There are things that google need to improve on testing aspects. The service stub approach may not be practical always. Developers need to be cautious that the testing will take more time than usual. If a google specific API like dataservice is used to access the google BigTable in the code, then testing that code outside GAE may become a herculian task today.</li><li>Persistence:<br />Coding for JPA or JDO will only guarantee 80% abstraction. Developers still need to understand that you are dealing with Nested HashMaps and not with RDBMS.<br />For people like me who have been using the RDBMS in the enterprise world for so many years this is going to be a big shift. Though I won't hesitate when i think about the scalability that BigTable offers :) </li><li>Concurrency:<br />Google App Engine has a single thread model. 3rd party libraries may need to change to work in this environment.</li></ul><p>So I hope altogether this is a good move from Google to support JVM on their PAAS solution and hope they will or some else will soon come up with a development/debugging environment for JVM based applications in GAE which will make our lifes more easy.</p>Sujith Vellathttp://www.blogger.com/profile/15351851625847994330noreply@blogger.com0tag:blogger.com,1999:blog-6581315087665889622.post-1140080911621878442009-07-20T20:08:00.000-07:002010-06-07T21:13:59.849-07:00Developing Java Apps for Google App Engine<div>Developing Java Apps for Google App Engine</div><br /><div> </div><br /><div>Testing:</div><br /><div>There are things that google need to improve on testing aspects. The service stub approach may not be practical always.</div><br /><div>Developers need to be cautious that the testing will take more time than otherwise.</div><br /><div> </div><br /><div>Persistence:</div><br /><div>Coding for JPA or JDO will only guarantee 80% abstraction. Developers still need to understand that you are dealing with Nested HashMaps and not with RDBMS.</div><br /><div>This is a big shift in the enterprise development world.</div><br /><div> </div><br /><div>Concurrency:</div><br /><div>Google App Engine has a single thread model.</div><br /><div>3rd party libraries may need to change to work in this environment.</div>Sujith Vellathttp://www.blogger.com/profile/15351851625847994330noreply@blogger.com0tag:blogger.com,1999:blog-6581315087665889622.post-60562168064429519792009-07-18T08:38:00.000-07:002009-07-18T13:06:26.253-07:00Hadoop is getting bigger!This July has been a Hadoop / Map Reduce month till now..<br /><br />• Hadoop Core is renamed Hadoop Common.<br />With the growth of Haddop and addition of specialized sub-projects, hadoop core no longer was the core of haddop rather just the common libraries of hadoop and hadoop abstraction projects.<br /><br />• MapReduce and the Hadoop Distributed File System (HDFS) are now separate subprojects.<br /><br />• Avro and Chukwa are new Hadoop subprojects<br />MapReduce programming model and Hadoop filesystem seems to take more buzz in the world and more related projects are getting released. The latest sub project releases on Apache were Avro and Chukwa<br /><br />Avro is optimized cross-language data serialzation system for RPC and persistent storage. Its backed by a schema defined in JSON. The first release supports APIs in Java, C and Python.<br /><br />Chukwa is data collection system for managing large distributed systemsSujith Vellathttp://www.blogger.com/profile/15351851625847994330noreply@blogger.com0tag:blogger.com,1999:blog-6581315087665889622.post-20487827886472827142009-06-23T17:16:00.000-07:002010-07-26T23:40:30.708-07:00HadoopDB<div>HadoopDB is a work released by researchers at Yale university.</div>Sujith Vellathttp://www.blogger.com/profile/15351851625847994330noreply@blogger.com0tag:blogger.com,1999:blog-6581315087665889622.post-54716740358173151582009-06-07T13:51:00.001-07:002010-07-23T14:18:14.066-07:00Virtual Power Plants<div>Are virtual power plants going to be a revolution?</div>Sujith Vellathttp://www.blogger.com/profile/15351851625847994330noreply@blogger.com0tag:blogger.com,1999:blog-6581315087665889622.post-48751344273668162162009-06-07T09:55:00.000-07:002009-07-18T12:37:33.937-07:00I never thought.. I would write a blog!!!I never thought.. I would write a blog...<br />Yet.. Here goes my first blog and I am still finding difficult and hesitant to scribble my thoughts on a rich text editor...<br /><p>I always loved to go through other(s) blogs and found it always an opportunity to learn, relax and sometime provide one line comments...I was also questioned by some of my friends on why hesitant on blogging...Well I had so many reasons of my own and I used to get convinced by those.. I don't know whether those reasons will ever <span id="SPELLING_ERROR_0" class="blsp-spelling-corrected">convince others</span>.. may be never...</p><p></p><p></p><p>Dedicating this first blog to all my friends!!!</p>Sujith Vellathttp://www.blogger.com/profile/15351851625847994330noreply@blogger.com0