<?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-3342788524792878045</id><updated>2011-11-27T15:16:18.777-08:00</updated><category term='Migration'/><category term='tricks'/><category term='RCP'/><category term='preference'/><category term='ScopedPreferenceStore'/><category term='Inno Setup'/><category term='tips'/><category term='product'/><category term='Eclipse'/><category term='ConfigurationScope'/><title type='text'>Technology</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3342788524792878045.post-693416348266437921</id><published>2010-04-05T01:05:00.001-07:00</published><updated>2010-04-05T01:11:23.713-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Migration'/><title type='text'>Migration of Eclipse based products :- Need of time</title><content type='html'>&lt;strong&gt;Introduction&lt;br /&gt;&lt;/strong&gt;This paper is intended to describe newer features of Eclipse and Eclipse based projects. Paper also describes why one should migrate from older Eclipse runtime to newer one. To explain these points, I will be taking example of our team which is doing migration of our product from Eclipse 3.2 to Eclipse 3.5 runtime.&lt;br /&gt;&lt;strong&gt;Motivation&lt;/strong&gt;&lt;br /&gt;From past three year, our team is working on Eclipse based RCP product. This product has been built on older version of eclipse. Runtime for our product is based on Equinox 3.2, which is implementation of OSGi R4 core framework specification. Our project uses lot of Eclipse based projects, such as EMF, GEF, GMF, etc. All these project plug-in sets are based on Eclipse 3.2 runtime.&lt;br /&gt;Few days back we have decided to migrate our product to Eclipse 3.5 runtime. Before making this decision, we had lot of discussions on migration. We have discussed pros and cons of migration. At one end we could see all the good features of newer Eclipse and at other end changes we might have to make lot of changes in our product. Finally after lot of debate, we have started migration process. Basic motivation behind the migration is “Newer Features provided by Eclipse 3.5”. This paper intended to document reason behind our motivation. In other words, this paper will explain “What's new in Eclipse 3.5”. Please remember that I am not just focusing on Eclipse 3.5 but I will be also covering some Eclipse based projects which we used in our product.&lt;br /&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;br /&gt;Before going into details of Galileo's (Eclipse 3.5) features, I would like to describe what eclipse is in short. Definition of Eclipse popularly known to everyone is “Eclipse is a multi-language software development environment comprising an integrated development environment (IDE) and an extensible plug-in system”. But I personally like other definition of Eclipse, and which is “Eclipse is framework for everything and nothing in particular”.&lt;br /&gt;Most software developer knows that Eclipse is a popular Integrated Development Environment (IDE) for Java. As Eclipse is free and stable, lot of programmers now a days are using Eclipse as an IDE. It is written primarily in Java and can be used to develop applications in Java and, by means of the various plug-ins, in other languages as well, including C, C++, COBOL, Python, Perl, PHP, and others. The IDE is often called Eclipse ADT for Ada, Eclipse CDT for C, Eclipse JDT for Java and Eclipse PDT for PHP.&lt;br /&gt;Eclipse began as an IBM Canada project. It was developed by Object Technology International (OTI) as a Java-based replacement for the Smalltalk based VisualAge family of IDE products, which itself had been developed by OTI. In November 2001, a consortium was formed to further the development of Eclipse as open source. In January 2004, the Eclipse Foundation was created. Eclipse was originally released under the Common Public License, but was later relicensed under the Eclipse Public License.&lt;br /&gt;Most people think that Eclipse is only a Java IDE, but it's not just an IDE, it is complete framework. It is based upon OSGi (Open Service Gateway initiative) standard. This standard defines specification for creating component based architecture over java runtime environment. Eclipse has implemented OSGi specification using Equinox project. Eclipse supports plug-n-play architecture and it allows bundle or plug-in to load on demand. In programmer's jargon, it is called as lazy loading.&lt;br /&gt;There are lots of project build over Eclipse platform. Most popular projects are EMF (Eclipse Modeling Framework), GEF (Graphical Editing Framework), BIRT (Business Intelligence and Reporting Tools), etc. All development toolkit, such as Java Development Toolkit (JDT), PHP Development Toolkit (PDT), C/C++ Development Toolkit (CDT), etc is also based on eclipse framework.&lt;br /&gt;So remember Eclipse is not just an IDE, but it is framework containing some built in tools.&lt;br /&gt;&lt;strong&gt;Drivers for moving to Eclipse 3.5 :&lt;/strong&gt;&lt;br /&gt;As our older product was on Eclipse 3.2 runtime, we faced some limitation while implementing new features.&lt;br /&gt;&lt;strong&gt;a) User Interface:&lt;br /&gt;&lt;/strong&gt;For development of basic user interfaces, we were using SWT 3.2. SWT (Standard Widget Toolkit) is cross-platform graphical widget toolkit for use with the Java platform. In newer SWT versions, eclipse has improved / added lots of user interface component. Improved StyledText widget, new system tray support, new Date widget, improved color schemes, new line drawing capabilities, effective drag-n-drop, effective browser support, improved copy paste support, etc are just some instances of improvement in SWT. In these three years lot of SWT APIs are changed for providing better control. Apart from these UI changes, SWT has improved lot on platform portability. Now SWT runs perfectly on newer Windows OS (operating system) versions, Linux, Mac OS, Solaris, HP-UX, etc. Now SWT runs on almost all bits of operating systems.&lt;br /&gt;Eclipse has developed a framework called JFace on top of SWT. JFace is a UI toolkit that provides helper classes for developing UI features that can be tedious to implement. It is a layer that sits on top of the raw widget system, and provides classes for handling common UI programming tasks. It brings model view controller programming to the Standard Widget Toolkit (SWT). As the underline SWT widgets have improved, JFace is able to extract better support from SWT. Improvement in SWT leads to improvement in JFace.&lt;br /&gt;Eclipse workbench is built up using SWT. Using newer version of SWT, Eclipse has improved workbench's look and feel. So by using newer graphical plug-ins of Eclipse, we are able to improve the look and feel of our application.&lt;br /&gt;Migrating our product to newer Eclipse Runtime, user interface of product has improved. Also due to use of new graphical library, we can implement newer widgets and improve existing user interface.&lt;br /&gt;&lt;strong&gt;b) Restricted upgrade support:&lt;br /&gt;&lt;/strong&gt;Eclipse 3.2 was using Upgrade manager to upgrade eclipse plug-ins. Upgrade manager was also used for installing new plug-ins. In newer versions, Eclipse has come up with a new way for upgrading and installing plug-ins, which is called as p2. P2 stands for Provisioning Platform. Provisioning is a process of providing users with access to data and technology resources. The term typically is used in reference to enterprise-level resource management. P2 replaces the upgrade manager with simplified workflows. So it will be a lot easier to install new plug-ins and keep them managed. P2 also comes with concept of 'Bundle Pooling'. That means you can share plug-ins across multiple Eclipse instances. By using Bundle Pooling, you can reduce considerable amount memory and disk space. P2 automatically find out all the dependent plug-ins for running particular functionality and installed those automatically.&lt;br /&gt;So by incorporating p2 in our product, we can provide better support for upgrade. Philosophy behind p2 project was, user should not install-uninstall eclipse multiple times, user should only upgrade existing eclipse. We wanted to have same principle in our product.&lt;br /&gt;&lt;strong&gt;c) Incompatible newer plug-ins:&lt;br /&gt;&lt;/strong&gt;Eclipse 3.2 has been released in the June 2006. It was just third release of Eclipse using OSGi specifications. Now after three years Eclipse has come long way. In year 2007-08 Eclipse got lot of popularity. Lots of enhancement has been done in Eclipse. Lots of new project has been started in Eclipse Release Train. For example, Mylyn, BIRT, Eclipse RT, etc. Now a day’s Eclipse comes in lot of flavors such as Eclipse for J2EE, Eclipse for PHP development, Eclipse for Mobile platform(Pulsar), etc. Most of the newer projects or frameworks are not compatible with Eclipse 3.2 runtime. Also older Eclipse projects have came with lots of new features and enhancements. Most of these new features does not work in Eclipse 3.2. Also most of the new projects are not making their projects compatible with Eclipse 3.2. This has been biggest handicap for us. We were unable to include newer plug-ins or projects in our product. Migration to Eclipse Galileo enabled us to use newer Eclipse projects and frameworks.&lt;br /&gt;&lt;strong&gt;d) Unavailability of Task management:&lt;br /&gt;&lt;/strong&gt;For providing task management, new project , called Mylyn, has started under Eclipse projects. It's open source implementation of the Task-Focused Interface. It provides an Application programming interface (API) for tools embedding the task-focused interface. Generally developer works on lots of modules simultaneously. Most of the tasks are need to be revisited. For example, in my project I have written code for writing file in simple text format. After one month my manager asked me to write all the files in XML format. To add this functionality, I have to modified code which write file in text format. Also I may need to modify all the references which are getting affected by change. In my projects there are lots of source files and thats why my most of the time will went in finding out right code to be modified. Mylyn would be helpful in such situation. Using Mylyn, I can create task (such as Text file writing operation) before working on that task. This task gets stored in my workspace. Mylyn records all the files or code fragment which are used while working on code. So whenever I want to modify any particular task, I can simply activate that task. After activating task, Mylyn will show only those code fragments which are added or modified while working on task. So you don't have to iterate over all the code to search right code. This is very good feature if you are working on large code base. You can integrate bug management system like Bugzilla, Trac, Redmine, JIRA, etc in Mylyn. This helps to integrate your bugs and code in one development environment. Also Mylyn allows you to share your tasks with other developers. So Mylyn focuses on improving productivity by reducing searching, scrolling, and navigation. By making task context explicit, Mylyn is also meant to facilitate multitasking, planning, reusing past efforts, and sharing expertise.&lt;br /&gt;In our product, user has to manage lot of files and projects. So use of Mylyn could be beneficial for user. But lots of Mylyn features are not available in Eclipse 3.2. That's why task management becomes one of the reason for migration of our product to Eclipse 3.5.&lt;br /&gt;&lt;strong&gt;e) Extended platform support :&lt;br /&gt;&lt;/strong&gt;As we already know, Eclipse is a platform independent framework. Although it is said to be platform independent, it doesn't support all the platforms. Eclipse 3.2 was supporting very less number of platforms. Also on some platform, Eclipse 3.2 was not providing all the functionality. There is a drastic improvement on this front in newer Eclipse. Now Eclipse has started supporting all the newer Windows OS, most of flavors of Linux, Mac, Solaris x86, S390, S390x, HP-UX. Now it also started supporting most of 32 bit and 64 bit platforms. Now due to newer implementation of OSGi specification using Equinox project, Eclipse has started running on most of mobile OS and embedded devices. This helps Eclipse to become more portable and platform independent in true means. It also helps in increasing acceptability of Eclipse.&lt;br /&gt;Currently our product only runs on Windows OS. To increase the portability and acceptability of our product, we have to deploy our product on newer Eclipse runtime.&lt;br /&gt;&lt;strong&gt;f) Generics support :&lt;br /&gt;&lt;/strong&gt;In our product, we have embedded lot of Eclipse based projects such as Eclipse Modeling Framework (EMF), Graphical Editing Framework (GEF), Graphical Modeling Framework (GMF), etc. Eclipse Modeling Framework (EMF) is an Eclipse-based modeling framework and code generation facility for building tools and other applications based on a structured data model. Our product uses EMF 2.2. But this EMF does not supports Generics. Newer version of EMF supports generics and it generates model code, which consist of Generics. But newer EMF version (EMF 3.5) doesn't maintain backward compatibility with Eclipse 3.2 runtime.&lt;br /&gt;In our product, we have to use Generics feature to upgrade some of our existing tools. But for Generics support, we have to upgrade to EMF 3.5 and ultimately upgrade to Eclipse 3.5 runtime.&lt;br /&gt;&lt;strong&gt;g) Zest :&lt;/strong&gt;&lt;br /&gt;Eclipse has started really promising project under Graphical Editing Framework (GEF) called Zest. Zest - Eclipse Visualization Toolkit, is a set of visualization components built for Eclipse. The primary goal of Zest is to make graph based programming easy. In our product, we have lot of graph like structures and we wanted to present these using better user interfaces. To fulfill this requirement, we can use Zest project. But as Zest doesn't support Eclipse 3.2, we have to migrate our product to Eclipse 3.5.&lt;br /&gt;&lt;strong&gt;h) Better memory management :&lt;br /&gt;&lt;/strong&gt;Eclipse is based on plug-n-play architecture. That means only those components, in Eclipse's word Plug-ins, are loaded which are required. This makes Eclipse, memory efficient. But still Eclipse is having lots of memory related issues. Once plug-ins are loaded, they can not be unloaded at runtime. Eclipse manages all the system resources through Eclipse File System (EFS). So resource accessed through some Eclipse API need to managed properly and must be unallocated after use. In older Eclipse API, resources accessed through EFS was not memory efficient. But lot of improvement has been made to handle these memory leaks. Newer versions of Eclipse manages memory in far better way. Improvement in Eclipse API drives Eclipse based projects to work on memory management. For example, in EMF 2.2 one EObject was taking 120 bytes of memory but in EMF 2.5 one EObject is only taking 12 Bytes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-693416348266437921?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/693416348266437921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=693416348266437921' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/693416348266437921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/693416348266437921'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2010/04/migration-of-eclipse-based-products.html' title='Migration of Eclipse based products :- Need of time'/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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-3342788524792878045.post-7056387930480938589</id><published>2009-09-23T22:56:00.000-07:00</published><updated>2009-09-23T23:00:22.709-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Eclipse Tips and Tricks</title><content type='html'>&lt;p&gt; 1) Path for tool bar and menu bar can be found in org.eclipse.ui.IWorkbenchActionConstant&lt;br /&gt; 2) Code to find out an active shell&lt;br /&gt;      PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell()&lt;br /&gt; 3) To find out an active page&lt;br /&gt;      PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()&lt;br /&gt; 4) To access file from workspace&lt;br /&gt;       ResourcesPlugin.getWorkspace().getRoot().getFile(IPath)&lt;br /&gt;  5) To access projects from workspace&lt;br /&gt;       ResourcesPlugin.getWorkspace().getRoot().getProjects()&lt;br /&gt;  6) To create an uri from file location&lt;br /&gt;       uri = org.eclipse.core.runtime.URIUtil.fromString("file://" + "C:/test.txt");&lt;br /&gt;  7) To open external file in an eclipse editor&lt;br /&gt;      IFileStore fileStore = org.eclipse.core.filesystem.EFS.getStore(uri);&lt;br /&gt;      org.eclipse.ui.ide.IDE.openEditorOnFileStore(activePage, fileStore);&lt;br /&gt;  8) To open external file in an external editor&lt;br /&gt;      IDE.openEditor(page, uri, IEditorRegistry.SYSTEM_EXTERNAL_EDITOR_ID, true );&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-7056387930480938589?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/7056387930480938589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=7056387930480938589' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/7056387930480938589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/7056387930480938589'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2009/09/eclipse-tips-and-tricks.html' title='Eclipse Tips and Tricks'/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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-3342788524792878045.post-8176423433148250105</id><published>2009-03-16T02:33:00.000-07:00</published><updated>2009-03-16T02:35:52.075-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Inno Setup'/><category scheme='http://www.blogger.com/atom/ns#' term='RCP'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Inno setup to wrap your Eclipse RCP application</title><content type='html'>Last night, I created an Eclipse RCP application. My requirement was to create an installer. By creating installer , you can wrap your rcp application. For creating installer, I used  Inno Setup utility. You can download this utility from http://www.innosetup.com.By simply installing Inno Setup, you can create installer script using given editor. Simpler installer script can be look as below:&lt;br /&gt;&lt;br /&gt; [Setup]&lt;br /&gt; AppName=SSApp&lt;br /&gt; AppVerName=SSApp version 1.0.0&lt;br /&gt; DefaultDirName={pf}\SSApp&lt;br /&gt; DefaultGroupName=SSApp&lt;br /&gt; [Files]&lt;br /&gt; Source: SSApp.exe; DestDir: {app}&lt;br /&gt; Source: Readme.txt; DestDir: {app}; Flags: isreadme&lt;br /&gt; #include "VFP8Runtimes.txt"&lt;br /&gt; [Icons]&lt;br /&gt; Name: {group}\SSApp; Filename: {app}\SSApp.exe&lt;br /&gt; &lt;br /&gt;Using this utility, you can create installer to fulfill following requirements:&lt;br /&gt; · requiring the user to accept to a license agreement before installation;&lt;br /&gt; · specifying a minimum operating system version on the target machine;&lt;br /&gt; · creating registry entries;&lt;br /&gt; · displaying custom graphics in the setup wizard;&lt;br /&gt; · organizing the installation into components; and&lt;br /&gt; · installing database files to a different location than the application itself. &lt;br /&gt;&lt;br /&gt;For more information, I can go through following pdf.&lt;br /&gt;www.ita-software.com/papers/FT410_Borup_InnoSetup2.pdf&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-8176423433148250105?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/8176423433148250105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=8176423433148250105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/8176423433148250105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/8176423433148250105'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2009/03/inno-setup-to-wrap-your-eclipse-rcp.html' title='Inno setup to wrap your Eclipse RCP application'/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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-3342788524792878045.post-3344669658218300776</id><published>2009-03-03T22:34:00.000-08:00</published><updated>2009-03-03T22:38:02.796-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='preference'/><category scheme='http://www.blogger.com/atom/ns#' term='ConfigurationScope'/><category scheme='http://www.blogger.com/atom/ns#' term='product'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='ScopedPreferenceStore'/><title type='text'>Persisting information in Eclipse</title><content type='html'>When you work on eclipse product, you may need to persist the information related to your product session. One way to persist the information is store it in your workspace. For storing the information in your workspace, you can use Eclipse Preferences. For creating  and handling  the preferences , you can use “org.eclipse.core.runtime.preferences” extension point. Using this extension point , you can create scope, initialize preference variables, etc. But these preferences are persisted in the runtime workspace. So if you switch the runtime workspace, all these persisted data will not be available. But there might be some scenario in which you can not store these information in runtime workspace. For example, you want to keep track of number of user using your  product, or If your product allows user to create diagrams,  then to find out how many diagrams are getting created in entire system. Above said example can not store this data in workspace. You can store this data in your product's installed directory. Eclipse provides final class  “org.eclipse.core.runtime.preferences.ConfigurationScope” to store the data in installed directory. Following snippet of code shows how you can store your data :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import org.eclipse.ui.preferences.ScopedPreferenceStore;&lt;br /&gt;import org.eclipse.jface.preference.IPreferenceStore;&lt;br /&gt;import org.eclipse.core.runtime.preferences.ConfigurationScope;&lt;br /&gt;&lt;br /&gt;public final class StoreManager {&lt;br /&gt; .....&lt;br /&gt; .....&lt;br /&gt; final private static ScopedPreferenceStore store = new  ScopedPreferenceStore(new  ConfigurationScope(), "com.zensar.sbp.ui.editor"); &lt;br /&gt;&lt;br /&gt; private void store(){&lt;br /&gt;  .........&lt;br /&gt;  store.setValue(“Key”, Count);&lt;br /&gt;  try {&lt;br /&gt;    // persist value to hard disk.&lt;br /&gt;    ((ScopedPreferenceStore)preferenceStore).save();&lt;br /&gt;   } catch (IOException e) {&lt;br /&gt;   ........&lt;br /&gt;   }&lt;br /&gt;  .....&lt;br /&gt; } &lt;br /&gt; .....&lt;br /&gt; private int retrive(){&lt;br /&gt;   .......&lt;br /&gt;   return preferenceStore.getInt(“Key”);&lt;br /&gt;  }&lt;br /&gt; .....&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;You can find the persisted information in your products installed directory (in configuration folder).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-3344669658218300776?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/3344669658218300776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=3344669658218300776' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/3344669658218300776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/3344669658218300776'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2009/03/persisting-information-in-eclipse.html' title='Persisting information in Eclipse'/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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-3342788524792878045.post-2393324011993635442</id><published>2009-01-14T00:29:00.000-08:00</published><updated>2009-01-14T00:41:34.466-08:00</updated><title type='text'></title><content type='html'>While exploring ECF(Eclipse Communication Framework), I found a very interesting and helpful tutorial. This will help you to understand the concepts of ECF.&lt;br /&gt;&lt;br /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=" width="400" height="225" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" color="&amp;amp;fullscreen=" show_byline="1&amp;amp;show_portrait=" server="vimeo.com&amp;amp;show_title="&gt;&lt;/embed&gt;&lt;br /&gt;&lt;a href="http://vimeo.com/1195398?pg=embed&amp;amp;sec=1195398"&gt;Cola: Real-Time Shared Editing&lt;/a&gt; from &lt;a href="http://vimeo.com/mustafa?pg=embed&amp;amp;sec=1195398"&gt;Mustafa K. Isik&lt;/a&gt; on &lt;a href="http://vimeo.com/?pg=embed&amp;amp;sec=1195398"&gt;Vimeo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-2393324011993635442?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/2393324011993635442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=2393324011993635442' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/2393324011993635442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/2393324011993635442'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2009/01/while-exploring-ecfeclipse.html' title=''/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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-3342788524792878045.post-3053259166874671476</id><published>2008-08-05T02:00:00.000-07:00</published><updated>2008-08-05T02:08:11.404-07:00</updated><title type='text'>World of Rule Engine</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;span style=""&gt;     &lt;/span&gt;In my current project I have started using Drools rule engine. So I just want to describe my experience with this engine. Rule engine, itself, is quite interesting concept.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;In plain English we can define Rule Engine as “an engine (can be made using software/ hardware) which validates the facts against certain conditions”. To understand this let’s consider following example:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;     &lt;/span&gt;We have some condition as follows&lt;span style=""&gt;    &lt;/span&gt;:&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 45pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;1)&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;If it’s cold, stay in home.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 45pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;2)&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;If it’s night, turn on the lights.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;      &lt;/span&gt;These conditions are known to Rule engine. Now suppose we gave following statement as a input to rule engine:&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 45pt; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;1)&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;It’s night. &lt;/p&gt;  &lt;p class="MsoNormal"&gt;Then Rule engine will return result as “Turn on the lights”.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Suppose we gave input as:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;         &lt;/span&gt;1) Its cold and its night.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Then rule engine will return “Stay in home and turn on the lights”. &lt;span style=""&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;        &lt;/span&gt;So from the given input rule engine extracts facts, validate it with internal facts and generate the output. These can be used to validate complex business rules. From this, concept of BRMS (Business Rule Management System) evolved. A BRMS or Business Rule Management System is a software system used to define, deploy, execute, monitor and maintain the variety and complexity of decision logic that is used by operational systems within an organization or enterprise. &lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;           &lt;/span&gt;To develop your own BRMS, there is standard JSR 94 available. All existing and popular rule engines are complained with JSR 94. Drools, Jess, JRule are the example of JSR 94 complained rule engines. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-3053259166874671476?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/3053259166874671476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=3053259166874671476' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/3053259166874671476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/3053259166874671476'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2008/08/world-of-rule-engine.html' title='World of Rule Engine'/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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-3342788524792878045.post-7709517753210600599</id><published>2008-05-17T06:22:00.000-07:00</published><updated>2008-05-18T21:27:26.885-07:00</updated><title type='text'>About Eclipse's Class Loading  by Scott Lewis</title><content type='html'>&lt;div class="bz_comment"&gt;In my last post Comments by Scott Lewis was not visible properly. Here is comment&lt;br /&gt;once again.&lt;br /&gt;&lt;span class="bz_comment_head"&gt;&lt;span class="comment_rule"&gt;-------&lt;/span&gt; &lt;i&gt;Comment           &lt;a name="c3" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=87775#c3"&gt;             #3&lt;/a&gt; From            &lt;a href="mailto:slewis@composent.com"&gt;Scott Lewis&lt;/a&gt;           2005-03-14 11:21:43 -0400            &lt;/i&gt;           &lt;span class="comment_rule"&gt;-------&lt;/span&gt;         &lt;/span&gt;            &lt;pre class="bz_comment_text"&gt;(In reply to &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=87775#c1"&gt;comment #1&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;We on the ECF team have another case where OSGI classloading creates&lt;br /&gt;a bit of an issue: object serialization.  Jeff McAffer asked me to&lt;br /&gt;attach the following use case to this bug and he and Pascal will&lt;br /&gt;correlate with the other object serialization discussions/reports&lt;br /&gt;for the Equinox effort.&lt;br /&gt;&lt;br /&gt;Here's a use case that shows problems with classloading during object&lt;br /&gt;(de)serialization...caused by the way that classes are loaded across&lt;br /&gt;bundles in OSGI, and the way that packages are exported.  Send any&lt;br /&gt;requests for more information about this issue to &lt;a href="mailto:slewis@composent.com"&gt;slewis@composent.com&lt;/a&gt;.&lt;br /&gt;We have example code/bundles that show the behavior described below.&lt;br /&gt;&lt;br /&gt;The situation:  three plugins/bundles (labelled A, B, C).  Each&lt;br /&gt;plugin is assumed to be duplicated on a remote process&lt;br /&gt;(with plugins labelled A', B', C' on the remote process).&lt;br /&gt;Below is a brief description of the relevant characteristics&lt;br /&gt;of the three plugins.  The plugin names and class names in&lt;br /&gt;parens are ones that actually show this behavior with the&lt;br /&gt;ECF codebase (using EMF to implement a shared EMF editor).&lt;br /&gt;&lt;br /&gt;1) Plugin A (org.eclipse.emf.ecore.sdo):  Declares&lt;br /&gt;serializable class (EChangeSummaryImpl) and exposes this&lt;br /&gt;class via the Eclipse plugin "export" declaration like this:&lt;br /&gt;&lt;br /&gt;&lt;runtime&gt;&lt;&lt;/runtime&gt;runtime&lt;runtime&gt;&gt;&lt;br /&gt;&lt;library name="runtime/ecore.sdo.jar"&gt; &lt;&lt;/library&gt;&lt;/runtime&gt;library name="runtime/ecore.sdo.jar"&lt;runtime&gt;&lt;library name="runtime/ecore.sdo.jar"&gt;/&gt;&lt;br /&gt; &lt;&lt;/library&gt;&lt;/runtime&gt;export name="*"/&lt;runtime&gt;&lt;library name="runtime/ecore.sdo.jar"&gt;&gt;&lt;export name="*"&gt;&lt;br /&gt;&lt;/export&gt; &lt;&lt;/library&gt;&lt;/runtime&gt;/library&lt;runtime&gt;&lt;library name="runtime/ecore.sdo.jar"&gt;&gt;&lt;br /&gt;&lt;/library&gt;&lt;&lt;/runtime&gt;/runtime&lt;runtime&gt;&gt;&lt;br /&gt;&lt;/runtime&gt;&lt;br /&gt;This *EMF plugin* (and of course any others like it) does&lt;br /&gt;*not* expose itself through the OSGI manifest.mf, but rather&lt;br /&gt;through the Eclipse plugin mechanisms (only).  Although I'm&lt;br /&gt;not sure, I believe that &lt;export name="*"&gt; is actually implemented as an OSGI&lt;br /&gt;'Provide-Package', and *not* an 'Export-Package'.&lt;br /&gt;&lt;br /&gt;2) Plugin B (org.eclipse.ecf.provider):  Creates ObjectOutputStream&lt;br /&gt;(for sending) and ObjectInputStream (for receiving) for a given&lt;br /&gt;container.  Also declares DynamicPackage-Import: *, so that&lt;br /&gt;it's classloader (and the classloader for ObjectInputStream)&lt;br /&gt;will see any packages that have been exported via OSGI&lt;br /&gt;Export-Package.  Using DynamicPackage-Import: * is kind of clumsy and&lt;br /&gt;inefficient (as it means that the ObjectInputStream's classloader&lt;br /&gt;may consider lots of classes that it shouldn't), but it works in OSGI 3.0.&lt;br /&gt;&lt;br /&gt;3) Plugin C (org.eclipse.ecf.sdo):  Creates actual instances of&lt;br /&gt;EChangeSummaryImpl and serializes them using an ECF container instance&lt;br /&gt;created/loaded by plugin B.  The sender classloader (C) can see the&lt;br /&gt;EChangeSummaryImpl class because of the Eclipse package export, and the&lt;br /&gt;ObjectOutputStream (created by B's classloader) already has the&lt;br /&gt;classloaded (by C's classloader).&lt;br /&gt;&lt;br /&gt;Here's the ACTUAL RUNTIME BEHAVIOR:   C sends via objectoutputstream&lt;br /&gt;created by B an instance of EChangeSummaryImpl (from A) to other&lt;br /&gt;process(es).&lt;br /&gt;&lt;br /&gt;on other side of the object stream are three plugins A', B', C'&lt;br /&gt;that are assumed to have the same code as A, B, C.&lt;br /&gt;&lt;br /&gt;Plugin B''s ObjectInputStream tries to find the serialized class&lt;br /&gt;EChangeSummaryImpl.  B' has DynamicPackage-Import: *, so it looks&lt;br /&gt;for and will find *any class that has been exposed via Export-Package*.&lt;br /&gt;BUT A' has *not* exposed EChangeSummaryImpl via Export-Package&lt;br /&gt;(only via Provide-Package), and so the classloader fails to find&lt;br /&gt;EChangeSummaryImpl, and the deserialization will&lt;br /&gt;fail also.&lt;br /&gt;&lt;br /&gt;In general, this object serialization problem is this:&lt;br /&gt;There could be a lot of&lt;br /&gt;other plugins (ours and others) that are like Plugin A, in that&lt;br /&gt;they provide serializable classes, are *not* produced/built by&lt;br /&gt;the ECF that creates the objectinput/output stream, but which&lt;br /&gt;are createable, etc by ECF plugins B (and C, D, etc)&lt;br /&gt;because of the (static) plugin dependencies, but are *not* available&lt;br /&gt;to ObjectInputStream's classloader because they haven't declared&lt;br /&gt;Export-Package in their manifest.mf, and the OSGI classloader&lt;br /&gt;(EclipseClassLoader) only looks for/finds packages (at runtime)&lt;br /&gt;that are exposed via&lt;br /&gt;Export-Package....Sooo...the classloader for the ObjectInputStream fails to&lt;br /&gt;find/load these classes, and the deserialization fails.&lt;br /&gt;&lt;/export&gt;&lt;/pre&gt;     &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-7709517753210600599?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/7709517753210600599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=7709517753210600599' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/7709517753210600599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/7709517753210600599'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2008/05/about-eclipses-class-loading-by-scoot.html' title='About Eclipse&apos;s Class Loading  by Scott Lewis'/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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-3342788524792878045.post-4652830721979029606</id><published>2008-05-17T05:39:00.000-07:00</published><updated>2008-05-17T06:14:48.200-07:00</updated><title type='text'>ClassLoading in Eclipse and it's effect.</title><content type='html'>Every one knows that each eclipse plug-in has it's own class loader. This class loader loads plug-in on request of Eclipse Runtime. Due to this architecture i faced some issues while working on ECF(Eclipse Communication Framework). I was developing on application which uses ECF to share the editors. To share information i used to send one serializable message i.e SharedObjectMsg across two Eclipse Runtime Instances. ECF internally serializes  passed message and passes it across the network. But at the receiving end i was unable to receive that message. I tried out all the stuff and check out all my code but could not solve the problem. Then i come across Bug 87775 on eclipse Bugzilla. From there i got the solution to solve this problem.I exposed all messages in menifest.mf of my plug-in which defines messages. As i did not exposed these messages earlier, ECF's org.eclipse.ecf.provider could not saw my messages. "org.eclipse.ecf.provider" does all the serialization and  de-serialization job. But as it could not see my messages serialization failed. But eclipse or ECF does not notify us about this failure. There was no exception thrown. For details ,  go through the comment's by Scott Lewis given in Bug 87775.::&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;&lt;br /&gt;&lt;div style="font-weight: bold; font-style: italic; color: rgb(102, 51, 255);" class="bz_comment"&gt;         &lt;span class="bz_comment_head"&gt;           &lt;span class="comment_rule"&gt;-------&lt;/span&gt; Comment           &lt;a name="c3" href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=87775#c3"&gt;             #3&lt;/a&gt; From            &lt;a href="mailto:slewis@composent.com"&gt;Scott Lewis&lt;/a&gt;           2005-03-14 11:21:43 -0400                       &lt;span class="comment_rule"&gt;-------&lt;/span&gt;         &lt;/span&gt;            &lt;pre class="bz_comment_text"&gt;(In reply to &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=87775#c1"&gt;comment #1&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;We on the ECF team have another case where OSGI classloading creates a bit of an&lt;br /&gt;issue: object serialization.  Jeff McAffer asked me to attach the following use&lt;br /&gt;case to this bug and he and Pascal will correlate with the other object&lt;br /&gt;serialization discussions/reports for the Equinox effort. &lt;br /&gt;&lt;br /&gt;Here's a use case that shows problems with classloading during object&lt;br /&gt;(de)serialization...caused by the way that classes are loaded across bundles in&lt;br /&gt;OSGI, and the way that packages are exported.  Send any requests for more&lt;br /&gt;information about this issue to &lt;a href="mailto:slewis@composent.com"&gt;slewis@composent.com&lt;/a&gt;.  We have example&lt;br /&gt;code/bundles that show the behavior described below.&lt;br /&gt;&lt;br /&gt;The situation:  three plugins/bundles (labelled A, B, C).  Each plugin is&lt;br /&gt;assumed to be duplicated on a remote process (with plugins labelled A', B', C'&lt;br /&gt;on the remote process).   Below is a brief description of the relevant&lt;br /&gt;characteristics of the three plugins.  The plugin names and class names in&lt;br /&gt;parens are ones that actually show this behavior with the ECF codebase (using&lt;br /&gt;EMF to implement a shared EMF editor).&lt;br /&gt;&lt;br /&gt;1) Plugin A (org.eclipse.emf.ecore.sdo):  Declares serializable class&lt;br /&gt;(EChangeSummaryImpl) and exposes this class via the Eclipse plugin "export"&lt;br /&gt;declaration like this:&lt;br /&gt;&lt;br /&gt;&lt;runtime&gt;&lt;br /&gt; &lt;library name="runtime/ecore.sdo.jar"&gt;&lt;br /&gt;   &lt;export name="*"&gt;&lt;br /&gt; &lt;/library&gt;&lt;br /&gt;&lt;/runtime&gt;&lt;br /&gt;&lt;br /&gt;This *EMF plugin* (and of course any others like it) does *not* expose itself&lt;br /&gt;through the OSGI manifest.mf, but rather through the Eclipse plugin mechanisms&lt;br /&gt;(only).  Although I'm not sure, I believe that &lt;export name="*"&gt; is actually&lt;br /&gt;implemented as an OSGI 'Provide-Package', and *not* an 'Export-Package'.&lt;br /&gt;&lt;br /&gt;2) Plugin B (org.eclipse.ecf.provider):  Creates ObjectOutputStream (for&lt;br /&gt;sending) and ObjectInputStream (for receiving) for a given container.  Also&lt;br /&gt;declares DynamicPackage-Import: *, so that it's classloader (and the classloader&lt;br /&gt;for ObjectInputStream) will see any packages that have been exported via OSGI&lt;br /&gt;Export-Package.  Using DynamicPackage-Import: * is kind of clumsy and&lt;br /&gt;inefficient (as it means that the ObjectInputStream's classloader may consider&lt;br /&gt;lots of classes that it shouldn't), but it works in OSGI 3.0.&lt;br /&gt;&lt;br /&gt;3) Plugin C (org.eclipse.ecf.sdo):  Creates actual instances of&lt;br /&gt;EChangeSummaryImpl and serializes them using an ECF container instance&lt;br /&gt;created/loaded by plugin B.  The sender classloader (C) can see the&lt;br /&gt;EChangeSummaryImpl class because of the Eclipse package export, and the&lt;br /&gt;ObjectOutputStream (created by B's classloader) already has the classloaded (by&lt;br /&gt;C's classloader).&lt;br /&gt;&lt;br /&gt;Here's the ACTUAL RUNTIME BEHAVIOR:   C sends via objectoutputstream created by&lt;br /&gt;B an instance of EChangeSummaryImpl (from A) to other process(es).&lt;br /&gt;&lt;br /&gt;on other side of the object stream are three plugins A', B', C' that are assumed&lt;br /&gt;to have the same code as A, B, C.&lt;br /&gt;&lt;br /&gt;Plugin B''s ObjectInputStream tries to find the serialized class&lt;br /&gt;EChangeSummaryImpl.  B' has DynamicPackage-Import: *, so it looks for and will&lt;br /&gt;find *any class that has been exposed via Export-Package*.  BUT A' has *not*&lt;br /&gt;exposed EChangeSummaryImpl via Export-Package (only via Provide-Package), and so&lt;br /&gt;the classloader fails to find EChangeSummaryImpl, and the deserialization will&lt;br /&gt;fail also.&lt;br /&gt;&lt;br /&gt;In general, this object serialization problem is this:   There could be a lot of&lt;br /&gt;other plugins (ours and others) that are like Plugin A, in that they provide&lt;br /&gt;serializable classes, are *not* produced/built by the ECF that creates the&lt;br /&gt;objectinput/output stream, but which are createable, etc by ECF plugins B (and&lt;br /&gt;C, D, etc) because of the (static) plugin dependencies, but are *not* available&lt;br /&gt;to ObjectInputStream's classloader because they haven't declared Export-Package&lt;br /&gt;in their manifest.mf, and the OSGI classloader (EclipseClassLoader) only looks&lt;br /&gt;for/finds packages (at runtime) that are exposed via&lt;br /&gt;Export-Package....Sooo...the classloader for the ObjectInputStream fails to&lt;br /&gt;find/load these classes, and the deserialization fails.&lt;br /&gt;&lt;/pre&gt;     &lt;/div&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-4652830721979029606?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/4652830721979029606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=4652830721979029606' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/4652830721979029606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/4652830721979029606'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2008/05/classloading-in-eclipse-and-its-effect.html' title='ClassLoading in Eclipse and it&apos;s effect.'/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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-3342788524792878045.post-4494791465411154696</id><published>2008-05-13T22:04:00.000-07:00</published><updated>2008-05-13T22:05:03.195-07:00</updated><title type='text'>Jax India 08 conference</title><content type='html'>&lt;p class="MsoNormal"&gt;I am writing this blog after so many days. Last month I have been to Jax &lt;st1:country-region st="on"&gt;&lt;st1:place st="on"&gt;India&lt;/st1:place&gt;&lt;/st1:country-region&gt; 08 conference. Neeraj and Saurabh also attended conference with me. We are three people from Zensar Technologies. There were three forums and you can attend seminars in any forum. We mainly gave stress upon Eclipse forum. For eclipse forum there were two speakers, one is Chris Aniszczyk and Wayne Beaton. Both were good speakers and they explained about Eclipse and project in Eclipse. Good part is we could interact with them personally. There were one keynotes presented by Roy Singham - Founder Chairman – ThoughtWorks. He was pretty impressive in delivering his point. He provides good insight of software domain. I will try to put some photos of Jax India Conference in my next blog .&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-4494791465411154696?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/4494791465411154696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=4494791465411154696' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/4494791465411154696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/4494791465411154696'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2008/05/jax-india-08-conference.html' title='Jax India 08 conference'/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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-3342788524792878045.post-6197243635780684509</id><published>2007-10-24T21:30:00.000-07:00</published><updated>2007-10-24T21:48:16.711-07:00</updated><title type='text'>Fluent Interfaces.</title><content type='html'>Yesterday in teams discussion Ravi tossed up the term Fluent Interface. Fluent interface is term originally tossed up Martin Fowler and Eric. These type of interfaces are used for creating DSL. API are designed in such a way that  object sequence describe flow of sequences. According to definition , a &lt;b&gt;fluent interface&lt;/b&gt; is an &lt;a href="http://en.wikipedia.org/wiki/Object_oriented_design" title="Object oriented design"&gt;objected oriented construct&lt;/a&gt; that defines a behavior capable of relaying the instruction context of a subsequent call&lt;br /&gt;       One criticism about Fluent interface is that it is not so readable. Another thought is that individual method of an class does not mean anything. If we apply method collectively then only it make sense.&lt;br /&gt;        Basically using Fluent Interfaces, API s are designed in such a way that it looks like new language. That's why these interface are mainly used in Internal DSL(Domain Specific Languages).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-6197243635780684509?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/6197243635780684509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=6197243635780684509' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/6197243635780684509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/6197243635780684509'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2007/10/fluent-interfaces.html' title='Fluent Interfaces.'/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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-3342788524792878045.post-1812142026448427853</id><published>2007-08-01T21:04:00.000-07:00</published><updated>2008-12-09T05:19:51.607-08:00</updated><title type='text'>GEF's flow</title><content type='html'>&lt;o:p&gt;&lt;/o:p&gt;When you start learning GEF, some basic question comes to your mind such as “What is the flow of GEF?” or “What happens when I select any component of palette and draw it on canvas?”. &lt;span style=""&gt; &lt;/span&gt;In this post I will try to describe what all the things GEF does before drawing your figure on canvas.  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;1)&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;      &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;User clicks on some elements of palette.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Su8qGzKKqig/RrFi9ddQ3JI/AAAAAAAAADs/92TQHzwpaSQ/s1600-h/blog1.bmp"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_Su8qGzKKqig/RrFi9ddQ3JI/AAAAAAAAADs/92TQHzwpaSQ/s320/blog1.bmp" alt="" id="BLOGGER_PHOTO_ID_5093961461551651986" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;2)&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;      &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;A Creation tool gets activated.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;3)&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;      &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;As soon as you click on the viewer creation tools calls performCreation method.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;4)&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;      &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;performCreation method find out current EditPartViewer. EditPartViewer is nothing but org.eclipse.jface.viewer.IselectionProvider. This manages editpart’s lifecycle. This is an interface and user should not implement this. User must extend abstractEditPartViewer.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;5)&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;      &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;After this targeting tool comes into the picture. Targeting tool returns the creation command.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;6)&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;      &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Command gets executes and new model gets added to the parent model.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Su8qGzKKqig/RrFj7ddQ3KI/AAAAAAAAAD0/QuEUZgtNPfc/s1600-h/blog2.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_Su8qGzKKqig/RrFj7ddQ3KI/AAAAAAAAAD0/QuEUZgtNPfc/s400/blog2.bmp" alt="" id="BLOGGER_PHOTO_ID_5093962526703541410" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;7)&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;      &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Notification send to each listeners, i.e. parent edit part and property sheet, etc.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;8)&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;      &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Parent editpart calls method refreshChildren().&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;9)&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;      &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;AbstractEditPart then creates new edit part for object being dropped using &lt;span style=""&gt; &lt;/span&gt;editpart factory.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;10)&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;  &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style=""&gt; &lt;/span&gt;AbstractEditPart then calls addChildVisual() method for adding visuals for the dropped object. Required figure is obtained from createFigure() method of particular editpart. &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;11)&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;  &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style=""&gt; &lt;/span&gt;addNotify() gets called on the child editpart. This will ask editpart to refresh itself for first time.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;12)&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;  &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Child editpart then calls active() method for installing all the edit policies associated with it.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;13)&lt;span style=";font-family:&amp;quot;;font-size:7;"  &gt;  &lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style=""&gt; &lt;/span&gt;Creation tools then selects current dropped object.&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;This is how objects gets created when you  drag it from the palette. Following figure shows summery of the above steps.&lt;span style="font-size:100%;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Su8qGzKKqig/RrFku9dQ3LI/AAAAAAAAAD8/mwTcB35WPwU/s1600-h/blog3.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_Su8qGzKKqig/RrFku9dQ3LI/AAAAAAAAAD8/mwTcB35WPwU/s400/blog3.bmp" alt="" id="BLOGGER_PHOTO_ID_5093963411466804402" border="0" /&gt;&lt;/a&gt; I just provided abstract flow of ‘creation of object’. Internally GEF does some more things before this creation. You go on and explore the same.&lt;/p&gt;  &lt;!--[if gte vml 1]&gt;&lt;v:oval id="_x0000_s1027" style="'position:absolute;"&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-1812142026448427853?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/1812142026448427853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=1812142026448427853' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/1812142026448427853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/1812142026448427853'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2007/08/gefs-flow.html' title='GEF&apos;s flow'/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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://1.bp.blogspot.com/_Su8qGzKKqig/RrFi9ddQ3JI/AAAAAAAAADs/92TQHzwpaSQ/s72-c/blog1.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3342788524792878045.post-1246509482293028685</id><published>2007-07-24T21:27:00.000-07:00</published><updated>2007-07-24T21:39:21.321-07:00</updated><title type='text'>GEF's Model Adaptability</title><content type='html'>GEF provide very nice way to adapt your model. Basic aim of creating GEF was :-&lt;br /&gt; &lt;span style="font-weight: bold;"&gt;"Create Graphical editor for your domain model"&lt;/span&gt;.&lt;br /&gt;            This means we are not going to change our domain model, but still it should provide business data to our editor.  Once you adapt your model to GEF , then GEF will provide lot of help for displaying it graphically. Basic requirement of GEF for your model is :&lt;br /&gt;          &lt;span style="font-weight: bold;"&gt;Model should provide notification mechanism.&lt;br /&gt;           &lt;br /&gt;            &lt;/span&gt;You can adapt EMF, XML, PojO model with the GEF. As EMF(Eclipse Modeling Framework ) provides very flexible model , it can be easily adapted with GEF.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-1246509482293028685?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/1246509482293028685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=1246509482293028685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/1246509482293028685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/1246509482293028685'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2007/07/gefs-model-adaptability.html' title='GEF&apos;s Model Adaptability'/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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-3342788524792878045.post-5878305463829564833</id><published>2007-07-23T21:16:00.000-07:00</published><updated>2008-12-09T05:19:54.498-08:00</updated><title type='text'></title><content type='html'>&lt;h1&gt;&lt;br /&gt;&lt;/h1&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;JUnit Testing of GEF(Graphical Editing Framework) application&lt;br /&gt;&lt;/h2&gt;&lt;h2&gt;Introduction&lt;/h2&gt;&lt;p&gt;Extreme Programming is software engineering methodology which is the prominent member&lt;br /&gt;of agile technique.JUnit is one of the framework using which one can execute XP in real life.&lt;br /&gt;Graphical Editing Framework provides a rich, consistent graphical editing environment.&lt;/p&gt;&lt;p&gt;This article will use Shape Diagram example to illustrate the writing of JUnit test cases.&lt;br /&gt;This article will also briefly demonstrate how to write JUnit Plug-in tests.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Need&lt;/h2&gt;&lt;p&gt;Path for learning GEF framework is quite long. You need to understand different design patterns before&lt;br /&gt;learning GEF because GEF uses design patterns extensivly.Suppose, Let's consider following two scenario.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;a) If you are expert in GEF and you have developed one GEF application. Now you have to explain this application&lt;br /&gt;to one who understands GEF. It is really time consuming task to explain him each and every thing of your&lt;br /&gt;application. But if you have written test cases for your GEF application then you can ask him/her to go through&lt;br /&gt;test cases. He will defiantly understand application much faster than conventional method.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;b) Normally GEF application has large code base. So it is difficult to maintain consistency between different&lt;br /&gt;parts of application. Suppose you changed something in one part then it may affect other parts of your application.&lt;br /&gt;To keep a track to this you need to test your application regularly. It's time consuming and repetitive process.&lt;br /&gt;But if you have test cases written for different units of your application, you can easily run all unit test cases&lt;br /&gt;and check the consistency.&lt;/p&gt;&lt;p&gt; You can find many such scenario which describes importance of unit testing. Now let's write test cases for well known&lt;br /&gt;GEF's Shape example.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Su8qGzKKqig/RqWBLtdQ28I/AAAAAAAAACE/cJuAY7IRU-8/s1600-h/tip.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_Su8qGzKKqig/RqWBLtdQ28I/AAAAAAAAACE/cJuAY7IRU-8/s320/tip.gif" alt="" id="BLOGGER_PHOTO_ID_5090616991993093058" border="0" /&gt;&lt;/a&gt;&lt;p&gt;For more details about this example please refer to&lt;br /&gt;article by Bo Majewski,"&lt;a href="http://www.blogger.com/Article-GEF-diagram-editor/shape.html"&gt;A Shape Diagram Editor&lt;/a&gt;".&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Before writing any test cases i would like to tell some good practices for writing test case.&lt;br /&gt;&lt;/p&gt;&lt;li&gt; a) Try to avoid writing test case inside your source folder.&lt;br /&gt;     In our case we created a TestCases folder on the same level as of source folder (Fig 1).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Su8qGzKKqig/RqWDA9dQ29I/AAAAAAAAACM/QrnYm3d4gSE/s1600-h/packageView1.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 592px; height: 626px;" src="http://3.bp.blogspot.com/_Su8qGzKKqig/RqWDA9dQ29I/AAAAAAAAACM/QrnYm3d4gSE/s400/packageView1.bmp" alt="" id="BLOGGER_PHOTO_ID_5090619006332754898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;                                                                            Fig. 1&lt;br /&gt;&lt;br /&gt;b) Always give fully qualified name for test method.     &lt;pre&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Su8qGzKKqig/RqWFrtdQ2_I/AAAAAAAAACc/vOH_Yw2f4hM/s1600-h/tag_1.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_Su8qGzKKqig/RqWFrtdQ2_I/AAAAAAAAACc/vOH_Yw2f4hM/s320/tag_1.gif" alt="" id="BLOGGER_PHOTO_ID_5090621939795418098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;public void testConnetionWithSameSourceAndDestination() throws Exception {&lt;br /&gt;  ShapesDiagram shapeDiagram = createProject();&lt;br /&gt;  try {&lt;br /&gt;   Connection connection = new Connection(ellipcticalShape,ellipcticalShape);&lt;br /&gt;  } catch (IllegalArgumentException e) {&lt;br /&gt;   System.err.println("Can not make connection between same source and destination");&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt; In the preceding example,&lt;br /&gt;&lt;pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Su8qGzKKqig/RqWFrtdQ2_I/AAAAAAAAACc/vOH_Yw2f4hM/s1600-h/tag_1.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_Su8qGzKKqig/RqWFrtdQ2_I/AAAAAAAAACc/vOH_Yw2f4hM/s320/tag_1.gif" alt="" id="BLOGGER_PHOTO_ID_5090621939795418098" border="0" /&gt;&lt;/a&gt;&lt;/pre&gt;method will check connection with same source and destination.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Su8qGzKKqig/RqWFNtdQ2-I/AAAAAAAAACU/k2cWGztTcyI/s1600-h/tryit.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_Su8qGzKKqig/RqWFNtdQ2-I/AAAAAAAAACU/k2cWGztTcyI/s320/tryit.gif" alt="" id="BLOGGER_PHOTO_ID_5090621424399342562" border="0" /&gt;&lt;/a&gt; &lt;p&gt; There are lots of best practices available for Unit testing. For more detail about Best Practices, refer to article by Andy Schneider,"&lt;a href="http://www.javaworld.com/javaworld/jw-12-2000/jw-1221-junit.html?page=1"&gt;&lt;br /&gt;JUnit best practices&lt;/a&gt;". &lt;/p&gt;&lt;br /&gt;&lt;h2&gt;Writing JUnit test cases&lt;/h2&gt; &lt;p&gt;&lt;b&gt;  1) Import Shape Example :&lt;/b&gt; Download and unzip    the latest GEF Examples's source code from the    &lt;a href="http://download.eclipse.org/tools/gef/downloads/"&gt;GEF Project    Downloads&lt;/a&gt;. Using this source create plug-in project &lt;/p&gt; &lt;p&gt;&lt;b&gt;  2) Create package for test cases :&lt;/b&gt; Create a package 'TestCases' on same level as that of Source folder(Fig 1).&lt;/p&gt;  &lt;b&gt;  3) Create Test Cases : &lt;/b&gt; By right clicking TestCases package select New-&gt;JUnit Test Case.Make sure that you extend super class junit.framework.TestCase.A test case defines the fixture to run multiple tests. Click on checkbox to override setUp() method. Setup method will initialize the environment for your test cases. For doing clean up after tests, you can override tearDown method.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Su8qGzKKqig/RqWHeNdQ3DI/AAAAAAAAAC8/RV1UPqIFTH0/s1600-h/newJUnitTestScreen2.bmp"&gt;&lt;img style="cursor: pointer; width: 661px; height: 587px;" src="http://4.bp.blogspot.com/_Su8qGzKKqig/RqWHeNdQ3DI/AAAAAAAAAC8/RV1UPqIFTH0/s400/newJUnitTestScreen2.bmp" alt="" id="BLOGGER_PHOTO_ID_5090623906890439730" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can also provide "Class Under Test" in browse option. For example, we select ShapesEditor as "Class Under Test".After Clicking next button you will get all the method of ShapeEditor class.If you select one of the method, test case for that method will get created. Suppose we selected doSaveAs() method.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Su8qGzKKqig/RqWIkNdQ3EI/AAAAAAAAADE/oe3l2-yNGvA/s1600-h/newJUnitTestScreen1.bmp"&gt;&lt;img style="cursor: pointer; width: 668px; height: 682px;" src="http://4.bp.blogspot.com/_Su8qGzKKqig/RqWIkNdQ3EI/AAAAAAAAADE/oe3l2-yNGvA/s400/newJUnitTestScreen1.bmp" alt="" id="BLOGGER_PHOTO_ID_5090625109481282626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;JUnit will create test method for you named testDoSaveAs(). &lt;pre&gt; /**&lt;br /&gt;  * Test method for {@link org.eclipse.gef.examples.shapes.ShapesEditor#doSaveAs()}.&lt;br /&gt;  */&lt;br /&gt; public void testDoSaveAs() {&lt;br /&gt;  fail("Not yet implemented");&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;This test method will be automatically discovered by test annotation.   &lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;b&gt;4) Setup the case : &lt;/b&gt;&lt;/p&gt;    &lt;p&gt; &lt;/p&gt; &lt;p&gt; In setUp method (1) you need to initialize the environment. Means in our case we need to create a new project. Following method createProject(3) shows how to create new project. Method setShapeDiagram(shapeDiagram)(2) is used for encapsulating shapeDiagram object.&lt;/p&gt; &lt;pre&gt; /*&lt;br /&gt;  * This method sets up the environment&lt;br /&gt;  *&lt;br /&gt;  * @see junit.framework.TestCase#setUp()&lt;br /&gt;  */&lt;br /&gt; @Override&lt;br /&gt; (1)Protected void setUp() throws Exception {&lt;br /&gt;  super.setUp();&lt;br /&gt;  shapeDiagram = createProject();&lt;br /&gt;  (2)SetShapeDiagram(shapeDiagram);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;img src="file:///D:/gef-testing/article-template/Article-jUnit%20testing%20of%20GEF%20application/images/tag_3.gif" alt="tag" align="middle" height="13" width="24" /&gt;private ShapesDiagram createProject() throws Exception {&lt;br /&gt;  IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();&lt;br /&gt;  IProject project = root.getProject(projectName);&lt;br /&gt;  if (!project.exists())&lt;br /&gt;   project.create(null);&lt;br /&gt;  if (!project.isOpen())&lt;br /&gt;   project.open(null);&lt;br /&gt;  file = project.getFile(fileName);&lt;br /&gt;  ShapesDiagram shapeDiagram = null;&lt;br /&gt;  if (!file.exists()) {&lt;br /&gt;   shapeDiagram = &lt;img src="file:///D:/gef-testing/article-template/Article-jUnit%20testing%20of%20GEF%20application/images/tag_4.gif" alt="tag" align="middle" height="13" width="24" /&gt;createShapesDiagram();&lt;br /&gt;   ByteArrayOutputStream out = new ByteArrayOutputStream();&lt;br /&gt;   ObjectOutputStream oos = new ObjectOutputStream(out);&lt;br /&gt;   oos.writeObject(shapeDiagram);&lt;br /&gt;   oos.close();&lt;br /&gt;   file.create(new ByteArrayInputStream(out.toByteArray()), false,&lt;br /&gt;     null);&lt;br /&gt;   out.close();&lt;br /&gt;  } else {&lt;br /&gt;   ObjectInputStream ooin = new ObjectInputStream(file.getContents());&lt;br /&gt;   shapeDiagram = (ShapesDiagram) ooin.readObject();&lt;br /&gt;  }&lt;br /&gt;  return shapeDiagram;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * @param shapeDiagram the shapeDiagram to set&lt;br /&gt;  */&lt;br /&gt; void setShapeDiagram(ShapesDiagram shapeDiagram) {&lt;br /&gt;  this.shapeDiagram = shapeDiagram;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;createShapesDiagram() (/*4*/) creates models to be represented in Viewer. Let's look how you can write this method.&lt;/p&gt; &lt;pre&gt; private ShapesDiagram createShapesDiagram() {&lt;br /&gt;  (1)ShapesDiagram shapeDiagram = new ShapesDiagram();&lt;br /&gt;  (2)ellipcticalShape = new EllipticalShape();&lt;br /&gt;      ellipcticalShape.setLocation(new Point(50, 50));&lt;br /&gt;  (3)rectangularShape = new RectangularShape();&lt;br /&gt;      rectangularShape.setLocation(new Point(150, 150));&lt;br /&gt;&lt;br /&gt;      shapeDiagram.addChild(ellipcticalShape);&lt;br /&gt;      shapeDiagram.addChild(rectangularShape);&lt;br /&gt;&lt;br /&gt;      return shapeDiagram;&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;In above code, we first create model object Shape diagram (1).  We add two shapes (elliptical (2)and rectangular (3)) to diagram model. You can set any co-ordinates to these shapes.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;  5) Writing test case :&lt;/b&gt; Now we will right our simple test case for checking the connection. testConnection() method makes connection between ellipse and rectangle. Another method testConnetionWithSameSourceAndDestination() creates connection between two same model i.e ellipticalShape. Look carefully, here we catch  exception thrown by the code. For creating the connection we just need to create 'Connection' object and pass two model to it as an arguments.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;pre&gt; public void testConnection() throws Exception {&lt;br /&gt;  ShapesDiagram shapeDiagram = getShapeDiagram();&lt;br /&gt;  Connection connection = new Connection(ellipcticalShape,rectangularShape);&lt;br /&gt;  writeToFile(shapeDiagram); /* [1] */&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void testConnetionWithSameSourceAndDestination() throws Exception {&lt;br /&gt;  ShapesDiagram shapeDiagram = getShapeDiagram();&lt;br /&gt;  try {&lt;br /&gt;   Connection connection = new Connection(ellipcticalShape,&lt;br /&gt;     ellipcticalShape);&lt;br /&gt;  } catch (IllegalArgumentException e) {&lt;br /&gt;   fail("Can not make connection between same source and destination");&lt;br /&gt;  }&lt;br /&gt;  writeToFile(shapeDiagram);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private void writeToFile(ShapesDiagram shapeDiagram) throws IOException, CoreException {&lt;br /&gt;   ByteArrayOutputStream out = new ByteArrayOutputStream();&lt;br /&gt;   ObjectOutputStream oos = new ObjectOutputStream(out);&lt;br /&gt;   oos.writeObject(shapeDiagram);&lt;br /&gt;   oos.close();&lt;br /&gt;   IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();&lt;br /&gt;   IProject project = root.getProject(projectName);&lt;br /&gt;   file = project.getFile(fileName);&lt;br /&gt;              file.setContents(new ByteArrayInputStream(out.toByteArray()), false, false, null);&lt;br /&gt;   out.close();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * @return the shapeDiagram&lt;br /&gt;  */&lt;br /&gt; ShapesDiagram getShapeDiagram() {&lt;br /&gt;  return shapeDiagram;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;writeToFile  method will write models to the file. This method uses simple ByteArrayOutputStream to serailize model. &lt;/p&gt; &lt;p&gt;Now in next section we will see how to run the test cases.&lt;/p&gt;&lt;b&gt;  6) Running test cases :&lt;/b&gt; Right click on the project and select Run As -&gt; JUnit Plug-in Test.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Su8qGzKKqig/RqWMZNdQ3GI/AAAAAAAAADU/vTqhuW4DbzQ/s1600-h/runJUnitPlug-inTestScreen.bmp"&gt;&lt;img style="cursor: pointer; width: 433px; height: 400px;" src="http://4.bp.blogspot.com/_Su8qGzKKqig/RqWMZNdQ3GI/AAAAAAAAADU/vTqhuW4DbzQ/s400/runJUnitPlug-inTestScreen.bmp" alt="" id="BLOGGER_PHOTO_ID_5090629318549232738" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After completion of JUnit Plug-in test, "JUnit" view opens up with description of tests. It shows information about total test runs, number of test failed, errors and failure trace(Fig 5).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Su8qGzKKqig/RqWO8tdQ3II/AAAAAAAAADk/h6nqWBSk-kI/s1600-h/jUnitViewScreen.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 402px; height: 174px;" src="http://2.bp.blogspot.com/_Su8qGzKKqig/RqWO8tdQ3II/AAAAAAAAADk/h6nqWBSk-kI/s320/jUnitViewScreen.bmp" alt="" id="BLOGGER_PHOTO_ID_5090632127457844354" border="0" /&gt;&lt;/a&gt;                                                                                                Fig 5&lt;br /&gt;&lt;br /&gt;In above Fig 5, you can see that 'testConnection' test succeeded. It is marked with right arrow. Another test 'testConnectionWithSourceAndDestination' failed and it is marked using cross. In adjeccent window you can see failure trace. This failure trace shows reason of failure. It shows message which we gave in test method.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-5878305463829564833?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/5878305463829564833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=5878305463829564833' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/5878305463829564833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/5878305463829564833'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2007/07/junit-testing-of-gefgraphical-editing.html' title=''/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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://2.bp.blogspot.com/_Su8qGzKKqig/RqWBLtdQ28I/AAAAAAAAACE/cJuAY7IRU-8/s72-c/tip.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3342788524792878045.post-7751493784672295148</id><published>2007-07-16T21:21:00.000-07:00</published><updated>2008-12-09T05:19:54.612-08:00</updated><title type='text'>BarCamp3 Pune</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Su8qGzKKqig/RpxE58qgxTI/AAAAAAAAABs/Zidz_qyt5mI/s1600-h/barCamp3.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_Su8qGzKKqig/RpxE58qgxTI/AAAAAAAAABs/Zidz_qyt5mI/s320/barCamp3.jpg" alt="" id="BLOGGER_PHOTO_ID_5088017441349485874" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Last weekend i attended bar Camp.  I attended barcamp first time. It was nice experience. I and Neeraj gave presentation on Graphical Editing Framework. It was my first talk in such events.It was very nice experience.  It's nice when people ask some questions  and you try to fulfill there queries. This will help you to make perfect.&lt;br /&gt; Looking forward for such events.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-7751493784672295148?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/7751493784672295148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=7751493784672295148' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/7751493784672295148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/7751493784672295148'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2007/07/barcamp3-pune.html' title='BarCamp3 Pune'/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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://2.bp.blogspot.com/_Su8qGzKKqig/RpxE58qgxTI/AAAAAAAAABs/Zidz_qyt5mI/s72-c/barCamp3.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3342788524792878045.post-3660480372928109209</id><published>2007-05-27T21:23:00.000-07:00</published><updated>2007-05-28T01:30:40.583-07:00</updated><title type='text'>ThoughtWork's  The Master Class Series</title><content type='html'>On this Sunday i attended 'Master Class Series' organized by ThoughtWork. It was a nice talk.&lt;br /&gt;&lt;br /&gt;    First talk was about Refactoring of the database. It was presented by Pramod Sadalage. Mainly he talked about refactoring, rearranging databases. He also explained some patterns of database refactoring. He mainly explain that you should consider your database as a part of your source code.They found out some patterns while working with databases. I really like concept of making local  copy of database. Main advantage of this, is you can do experimentation with your local copy.&lt;br /&gt;Even if one developer make mistake it would not affect team.&lt;br /&gt;   &lt;br /&gt;    Second talk was "Evolutionary Testing" by Vivek Prahlad. In this he talked about automating your testing. He also showed some tools for automate your tests. He also explains basic principle for writing test cases and test suites.&lt;br /&gt;&lt;br /&gt;    Lat talk was about Domain Specific Languages. These are the languages designed for a specific kind of tasks. Example of such languages are macros of Word, shell scripts, YACC(Yet Another Compiler Complier) .Thoughtwork developed such language for their project. He mainly specify the use and context where we can use DSL.&lt;br /&gt;&lt;br /&gt;     Overall these talks are very informative.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-3660480372928109209?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/3660480372928109209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=3660480372928109209' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/3660480372928109209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/3660480372928109209'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2007/05/thoughtworks-master-class-series.html' title='ThoughtWork&apos;s  The Master Class Series'/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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-3342788524792878045.post-1184030459937023189</id><published>2007-05-23T21:17:00.001-07:00</published><updated>2007-05-23T21:31:10.198-07:00</updated><title type='text'>Writing article for JUnit testing of GEF application.</title><content type='html'>This has been very busy month for me and my  team mates at Zensar. We are going through final phase of development and refactoring before release of product. We are planning to release it at the end of the month. That's   why this scrap comes after long days. I have also writing an article for "JUnit test of GEF application". It's really hard to find time for this when you are in the final phase of your product delivery. I am trying my best for completing my article as early as possible.So let's hope for the best.&lt;br /&gt;&lt;br /&gt;&lt;!--&lt;span class="end-tag"&gt;Oh... One thing is that i will be attending &lt;a href="http://thoughtworks.co.in/"&gt;ThoughtWorks &lt;/a&gt; &lt;a href="http://twi.co.in/"&gt;Master Class Series 2007&lt;/a&gt;. Looking forward to that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-1184030459937023189?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/1184030459937023189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=1184030459937023189' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/1184030459937023189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/1184030459937023189'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2007/05/writing-article-for-junit-testing-of.html' title='Writing article for JUnit testing of GEF application.'/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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-3342788524792878045.post-6358428884714846985</id><published>2007-05-05T23:30:00.000-07:00</published><updated>2007-05-06T00:29:07.321-07:00</updated><title type='text'>jUnit Testing of GEF application</title><content type='html'>If you are learning GEF then path for understanding it is very long. You need to read lot,  understand how "Shapes" example runs. For learning GEF ,it provides many examples such as Logic, Shape, etc. But mare reading the code or just by debugging it, you will not understand all the concepts related to GEF.&lt;br /&gt;         Take a look at new way of learning GEF. This technique come under XP ( Extreme programming). Before using this approach you need to learn basic GEF concepts.&lt;br /&gt; &lt;br /&gt;1)  After you understood the concepts, download the GEF code with jUnit plug tests and Testing     Framework from http://download.eclipse.org/tools/gef/downloads/.&lt;br /&gt;    This download will contain GEF test cases with source code of different examples.&lt;br /&gt;&lt;br /&gt;2) Let's consider that you want to understand Logic example.First create plug-in project containing source code of Logic example.&lt;br /&gt;&lt;br /&gt;3) Then from downloaded GEF plug-in take source of GEF test cases and put it into your Logic example's source code.(from folder org.eclipse.gef.test.source_...... )&lt;br /&gt;&lt;br /&gt;4) Resolve the required dependencies.&lt;br /&gt;&lt;br /&gt;       Now your logic code is ready with jUnit test cases. Now select the project , then go to run menu and select 'Run as jUnit Plug-in test'. Eclipse will automatically load new workbench and then it loads logic example.You can see on jUnit view  which test cases are passing and which are failing. If you don't want to perform the db tests, then you can remove it  from testSuits.&lt;br /&gt;&lt;br /&gt; Now if you really want to understand how Gef create pallets, views,  how it loads the editor then understand and debug the code of 'LogicExampleTests.java' file. You can find this code in performance package of test cases. This code contains 'setUp()' method. Understand and debug code of this method. You will get to know how GEF loads application. Check other test cases similarly for pallet validation, connections.&lt;br /&gt;&lt;br /&gt;  If you know concepts of GEF and  you want to really understand it completely, then please understand  it's test cases. Try to write some test cases for your GEF application. This will give you good hold on GEF concepts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-6358428884714846985?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/6358428884714846985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=6358428884714846985' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/6358428884714846985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/6358428884714846985'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2007/05/junit-testing-of-gef-application.html' title='jUnit Testing of GEF application'/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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-3342788524792878045.post-7887534300770247833</id><published>2007-04-03T21:09:00.000-07:00</published><updated>2007-04-03T21:27:33.825-07:00</updated><title type='text'>Design Patterns</title><content type='html'>Design Pattern :- This is the word used in every interview, in every team meeting,  in every technical seminar. But i think there are many people who knows design pattern theoretically, but when they start writing a  code they cannot give justices to it. I am really trying hard to include design pattern in my code. When time pressure come, i really tends to take shortcuts. Such as,  many  design GURU says that your code should be open for extension but close for modification. But do i really follow this? I don't  think so. But i need to improve on this point. One solution to this is you need to keep revisiting your code. You need to keep refreshing your design pattern concepts.&lt;br /&gt;       Mainly source of existence for design pattern is "Change". Our code will keep changing , our requirements will keep changing and then you have to accomplished that changes in your code. You can pick up any design pattern , it may be creational, behavioral or structural. You will find one common design principle that all are taking .."Open for extension and Close for modification".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-7887534300770247833?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/7887534300770247833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=7887534300770247833' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/7887534300770247833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/7887534300770247833'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2007/04/design-patterns.html' title='Design Patterns'/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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-3342788524792878045.post-6357329565210389174</id><published>2007-03-12T21:28:00.000-07:00</published><updated>2007-03-12T21:42:05.395-07:00</updated><title type='text'>JUnit Testing</title><content type='html'>From few days i am reading the JUnit testing documents. This is really impressive Unit testing framework. This framework will provide different methods to test the stubs. I want to test my GEF application using JUnit. I am finding it some what difficult because  you have to create a mock object for illustrating user's actions. In my case there are three levels :&lt;br /&gt;1) My Code&lt;br /&gt;2) GEF framework&lt;br /&gt;3) Libraries used by GEF and my code.&lt;br /&gt;Due to this multilayer structure, i am finding it difficult to mock the user's behavior. Currently i got the one good link which illustrate how to create complex mock objects.&lt;br /&gt;http://www.easymock.org/EasyMock2_2_Documentation.html&lt;br /&gt;I hope i will get some good way to create mock object.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-6357329565210389174?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/6357329565210389174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=6357329565210389174' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/6357329565210389174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/6357329565210389174'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2007/03/junit-testing.html' title='JUnit Testing'/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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-3342788524792878045.post-5668419663797471512</id><published>2007-02-15T01:11:00.000-08:00</published><updated>2007-02-15T01:28:58.479-08:00</updated><title type='text'>Eclipse Project Builders and Natures</title><content type='html'>Yesterday  i discussed lot of things about Eclipse Project Builder and Nature.It is very good feature provided by Eclipse. Project builder used to for integrating third-party builder into to our Eclipse project. Eclipse provide four types of builds :&lt;br /&gt;&lt;br /&gt;1. Incremental builder : - This is most useful and advance build type. In this first time when we build code whole files gets build.But after that build , next time &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;onwards&lt;/span&gt; only file which gets change gets build.&lt;br /&gt;&lt;br /&gt;2.Full build :  - In this all files gets build each time.&lt;br /&gt;&lt;br /&gt;3.Auto-build : - In this files get build on every changes automatically.&lt;br /&gt;&lt;br /&gt;4.Clean build : -  The final variety of build, introduced in Eclipse 3.0, is &lt;i&gt;clean&lt;/i&gt;. Clean is inspired by the Unix &lt;i&gt;make&lt;/i&gt; utility convention of using a target called &lt;tt&gt;clean&lt;/tt&gt; to discard all artifacts produced by a build.  As with full build, clean should not be required if all builders correctly perform their incremental builds. Clean is intended largely as a safety blanket for the end user when things seem to go wrong with their build process. Builders should implement clean by deleting all output files produced by the build, and removing any problem markers associated with that builder. Unlike other build types, the clean build is not implemented by the &lt;tt&gt;build&lt;/tt&gt; method on &lt;tt&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;IncrementalProjectBuilder&lt;/span&gt;&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Nature : - &lt;/span&gt;Nature provides &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;particular&lt;/span&gt; nature to the project, such as Java Project, C++ Project.&lt;br /&gt;&lt;br /&gt;reference: - http://www.eclipse.org/articles/Article-Builders/builders.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-5668419663797471512?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/5668419663797471512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=5668419663797471512' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/5668419663797471512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/5668419663797471512'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2007/02/eclipse-project-builders-and-natures.html' title='Eclipse Project Builders and Natures'/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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-3342788524792878045.post-3275253297747132516</id><published>2007-02-12T20:49:00.000-08:00</published><updated>2007-02-12T20:49:02.658-08:00</updated><title type='text'>Extreme Programming</title><content type='html'>I have attended the session on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;XP&lt;/span&gt; in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;GeekNight&lt;/span&gt; on last Saturday. There mainly focus on the Test Driven Development(TDD). It was really interesting session. They exhibit how we can write test cases first before writing actual code. They used &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;JUnit&lt;/span&gt; for writing test case. They follow following steps:&lt;br /&gt; 1) Create a story on the basis of Requirements&lt;br /&gt; 2) Create test case&lt;br /&gt; 3) Develop the code using test case.&lt;br /&gt;In this i found absence of design. In think in the design of test case we should create some kind of design. This will help us to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;refactor&lt;/span&gt; our design quickly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-3275253297747132516?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/3275253297747132516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=3275253297747132516' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/3275253297747132516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/3275253297747132516'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2007/02/extreme-programming.html' title='Extreme Programming'/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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-3342788524792878045.post-4484290787121290696</id><published>2007-02-12T20:34:00.000-08:00</published><updated>2007-02-09T01:07:05.616-08:00</updated><title type='text'>Google Web Toolkit</title><content type='html'>On &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;Saturday&lt;/span&gt; i attended &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;GeekNight&lt;/span&gt; which was held at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Thoughtworks&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Pune&lt;/span&gt;. In that &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Sriram&lt;/span&gt; gives us very good presentation on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;GWT&lt;/span&gt;. Browser compatibility and history system are two most important features i liked about &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;GWT&lt;/span&gt;. Using &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;GWT&lt;/span&gt; you can create very rich &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;UI&lt;/span&gt; and this looks somewhat &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_9"&gt;similar&lt;/span&gt; on IE or Mozilla.&lt;br /&gt;     But i think world is going so crazy on AJAX &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_10"&gt;stuff&lt;/span&gt;. Posting all the application on the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_11"&gt;Internet&lt;/span&gt; is more &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_12"&gt;tedious&lt;/span&gt; job that what some people thinks. &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_13"&gt;Browser&lt;/span&gt; limitations comes in the way to make have desktop like &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;UI&lt;/span&gt; on the web. If you populate more things into the browser then it will become so &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_15"&gt;heavy&lt;/span&gt; and slow. &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_16"&gt;Instead&lt;/span&gt; of that have a application running on the desktop and make the facility to automatically update if there are any changes. In this way application can use web services to improve and update it's &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_17"&gt;functionality&lt;/span&gt; , also application will be much more faster and rich  than  web &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_18"&gt;application&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-4484290787121290696?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/4484290787121290696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=4484290787121290696' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/4484290787121290696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/4484290787121290696'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2007/02/google-web-toolkit.html' title='Google Web Toolkit'/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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-3342788524792878045.post-7104728346974313531</id><published>2007-02-09T00:42:00.000-08:00</published><updated>2007-02-08T20:26:47.057-08:00</updated><title type='text'>Google Web Toolkit (Freeeeeeeeeeeee)</title><content type='html'>&lt;p class="MsoNormal"&gt;Today I found out that Google web toolkit became open source. Google launched GWT 1.3. This GWT version will remain as beta version. Google web toolkit is an implementation of &lt;st1:place st="on"&gt;&lt;st1:city st="on"&gt;AJAX&lt;/st1:City&gt;&lt;/st1:place&gt;(Asynchronous Java Script and XML). GWT aims at providing desktop like look and feel for desktop application. Instead of taking service from server each time, it fits some intelligence in client so that it can handle some light weight requests. GWT is a framework which transforms our Java code into the Java script and HTML. So on Java compatible browser we can run our code and simply get our &lt;st1:city st="on"&gt;&lt;st1:place st="on"&gt;AJAX&lt;/st1:place&gt;&lt;/st1:City&gt; application running. &lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;            &lt;/span&gt;There is many other tool which implements &lt;st1:city st="on"&gt;&lt;st1:place st="on"&gt;AJAX&lt;/st1:place&gt;&lt;/st1:City&gt; technology, but GWT is one of the prominent in open source community. Also GWT provide Eclipse plug-in so that we can use our favorite Java IDE. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-7104728346974313531?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/7104728346974313531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=7104728346974313531' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/7104728346974313531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/7104728346974313531'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2007/02/google-web-toolkit-freeeeeeeeeeeee.html' title='Google Web Toolkit (Freeeeeeeeeeeee)'/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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-3342788524792878045.post-4212241105730689474</id><published>2007-01-25T02:34:00.000-08:00</published><updated>2007-01-25T02:42:20.161-08:00</updated><title type='text'>Extreme Programming</title><content type='html'>Today i learnt new software design concept called 'Extreme Programming". This is new evolving technique of generating software focusing on user's &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;requirement&lt;/span&gt;. One of &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;approach&lt;/span&gt; in the extreme programming is known as "test driven development" &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;approach&lt;/span&gt;.This &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;approach&lt;/span&gt; tells you that as soon as you write some code, you should write test case (Unit test) for same and test it.By doing this you can reduce the number of defects found in later phase of software development.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3342788524792878045-4212241105730689474?l=sushantsirsikar.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sushantsirsikar.blogspot.com/feeds/4212241105730689474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3342788524792878045&amp;postID=4212241105730689474' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/4212241105730689474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3342788524792878045/posts/default/4212241105730689474'/><link rel='alternate' type='text/html' href='http://sushantsirsikar.blogspot.com/2007/01/extreme-programming.html' title='Extreme Programming'/><author><name>Sushant Sirsikar</name><uri>http://www.blogger.com/profile/11184226962572793589</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></feed>
