660 likes | 774 Views
Georg Heeg Objektorientierte Systeme Baroper Str. 337 44227 Dortmund Germany Tel: +49-231-97599-0 Fax: +49-231-97599-20. Georg Heeg Objektorientierte Systeme Mühlenstr. 19 06366 Köthen Germany Tel: +49-3496-214 328 Fax: +49-3496-214 712. Georg Heeg AG Objektorientierte Systeme
E N D
Georg HeegObjektorientierte Systeme Baroper Str. 33744227 DortmundGermany Tel: +49-231-97599-0 Fax: +49-231-97599-20 Georg HeegObjektorientierte Systeme Mühlenstr. 1906366 KöthenGermany Tel: +49-3496-214 328 Fax: +49-3496-214 712 Georg Heeg AGObjektorientierte Systeme Riedtlistr. 88006 ZurichSwitzerland Tel: +41-1-356 3311 Fax: +41-1-356 3312 Email: georg@heeg.de http://www.heeg.de
Georg HeegPorting and Gardening VisualWorks Applications to 5i ESUG Essen, 31 August 2001
Contents • Georg Heeg - the company • Porting goals • What’s new in 5i? • Consequences for the development process • Migration process • Tools for the port • Coming from Envy • A new development process
About Us... • Founded 1987, headquarter in Dortmund,since 1996 in Zurich, since 1999 in Koethen/Anhalt • Consulting- and training company in Smalltalk • Hotline support, maintenance, bug-fixes for VisualWorks and visual Smalltalk • VM-laboratory for VisualWorks • Porting service of old VisualWorks applications to 5i • Technology-partner of Corporate Mission: Make Sophisticated Projectsa Success for the Customer!
VM-Laboratory for VisualWorks • Since 1987 VM source code licensee of Xerox PARC, ParcPlace Systems, ParcPlace-Digitalk, ObjectShare, Cincom • PCS-Cadmus (MUNIX) • Atari Mega ST • OS/2 • Sinix Z • SNI RM 200 - 600 Reliant Unix • MIPS-ABI • SGI Irix • RS/6000 AIX Power2 and Power PC • Compaq Tru64 Unix • Power-Mac • Mac OS X (in preparation)
Georg Heeg in Koethen • Since 1999 in the Johann Sebastian Bach city • Qualified computer scientists in Saxony-Anhalt • Hot specialty: • Porting of VisualWorks applications to 5i • Enhancement of code quality of ported applications • Customers in • Frankfurt/Main • Zurich • Munich • ... • I.e. no local customers
Contents • Georg Heeg - the company • Porting goals • What’s new in 5i? • Consequences for the development process • Migration process • Tools for the port • Coming from Envy • A new development process
Goal • A manageable application • Embedded in VisualWorks 5i concepts • Embedded in StORE • Ready for the next years
The Main Steps Are • Investigate the structure of the existing application • Propose a set of name spaces • Investigate system changes • Reorganize application • Test the port
Other Activities • Gardening • Cut off dry branches • Pull weeds • Specific activities to move from Envy to StORE
Contents • Georg Heeg - the company • Porting goals • What’s new in 5i? • Consequences for the development process • Migration process • Tools for the port • Coming from Envy • A new development process
New Concepts in VisualWorks 5i • Name Spaces • Shared Variables • Reference Bindings • StORE • XML • Runtime Packager • Microsoft SQL-Server/PostgresSQL • Parcel-Format • Byte-Codes
Example for a Name Space Smalltalk defineNameSpace: #ENVY private: false imports: ' private Smalltalk.* ' category: 'For ENVY'
Template to Define Name Spaces Smalltalk.Heeg defineNameSpace: #NameOfPool private: false imports: ' OtherNameSpace.* private Smalltalk.* ' category: #'As yet unclassified'
Old and New Class Definitions Magnitude subclass: #Date instanceVariableNames: 'day year ' classVariableNames: 'DaysInMonth FirstDayOfMonth MonthNames SecondsInDay WeekDayNames ' poolDictionaries: '' category: 'Magnitude-General' Date class instanceVariableNames: '' Smalltalk.Core defineClass: #Date superclass: #{Core.Magnitude} indexedType: #none private: false instanceVariableNames: 'day year ' classInstanceVariableNames: '' imports: '' category: 'Magnitude-General' Core.Date defineSharedVariable: #DaysInMonth private: false constant: false category: 'As yet unclassified' initializer: nil
Template to Define Classes Smalltalk.Heeg defineClass: #NameOfClass superclass: #{NameOfSuperclass} indexedType: #objects private: false instanceVariableNames: 'instVarName1 instVarName2' classInstanceVariableNames: '' imports: '' category: #'As yet unclassified'
Template to Define Shared Variables Heeg.ExampleClass defineSharedVariable: #NameOfBinding private: false constant: false category: 'OOP' initializer: 'Array new: 5'
Name-Spaces Object Collection KeyedCollection GeneralNameSpace NameSpace NameSpaceOfClass
References Object () GeneralBindingReference BindingReference NameSpaceImport GeneralNameSpaceImport SpecificNameSpaceImport QualifiedName LiteralBindingReference
Creating a Reference #{Core.Integer} (LiteralBindingReference pathString: 'Core.Integer') method: thisContext method (LiteralBindingReference simpleName: #Integer) method: thisContext method BindingReference simpleName: #Integer in: Core BindingReference pathString: 'Core.Integer'
Bindings Object () Magnitude () LookupKey ('key') VariableBinding ('value' 'usage' 'category') InitializedVariableBinding ('method')
Using a Reference #{Core.Integer} binding #{Core.Integer} value #{Heeg.TestClass.MyStatic} binding value: 27 #{Heeg.TestClass.MyStatic} isDefined #{Heeg.TestClass.MyStatic} bindingOrNil #{Heeg.TestClass.MyStatic} valueOrDo: [nil] #{Heeg.MyGlobal} ifDefinedDo: ['Hurra'] elseDo: ['Ooo']
StORE • StORE organizes Smalltalk sources in • Bundles and • Packages • StORE stores versions of bundles and packages in Oracle, SQL-Server, PostgresSQL • StORE is an optimistic team tool
Pundles (Bundles und Packages) Object Store.DBObject Store.DBRecord Store.Record Store.Pundle Store.Bundle Store.Package
Store.Pundle • blessingLevel • commentID • propertiesID • properties • commentStr
Store.Bundle • contents
Store.Package • namespaces • classes • metaclasses • methods • binFile • data
Contents • Georg Heeg - the company • Porting goals • What’s new in 5i? • Consequences for the development process • Migration process • Tools for the port • Coming from Envy • A new development process
Consequences for theSoftware Development Process • Name spaces allow a clear scope of names • Bundles and packages allow organization and overview over the sources of a system and other applications
Contents • Georg Heeg - the company • Porting goals • What’s new in 5i? • Consequences for the development process • Migration process • Tools for the port • Coming from Envy • A new development process
Migration process • Check old application • Build customer specific 5i base • Test • Port applications • Test
Check old application • Formal check of old application • Partitioning of old application
Formal check of old application • Consistency checks (Undeclared) • Standard metrics (SmallLint)
Partitioning of Old Application • Changed system methods • Additional methods in system classes • Shrink wrap components • Modules • Determine a sequence of modules
Build Customer Specific 5i Base • Preparation of VisualWorks 5i base image • Defining the name tree • Critical investigation of system changes • Integration of system changes into 5i base image • Test the system
Preparation of VisualWorks 5i Base Image • Start with VisualWorks 5i.3 distribution • Load parcel StORE for Oracle (or another database) • Prepare database according to description • Require help from your company’s DBA • Load parcels DLLCC and LensRuntime • These are weak prerequisites for BOSS which is a prerequisite for StORE • Move all definitions from As yet unclassified to a new package called Base NameSpaces and Statics • Move As yet unclassified out of bundle VisualWorks Base • Put Base NameSpaces and Statics into bundle VisualWorks Base
Pubishing the base • Log in the database as “special” user like BaseSystem • Publish everything (no need for binary) with blessing level “Released” • Bundle Base VisualWorks • Bundle StoreBase • All other packages • Load all other parcels you need for the base • UIPainter requires almost all of Advanced Tools • Publish them, possibly binary, with blessing level “Released” • Save the image and use it as your base for any further development
Name SpaceRegistration • Company name space under Root.Smalltalk • Registration in http://www.cincomsmalltalk.com:8080/CincomSmalltalkWiki/VW+NameSpace+Reservations
Critical Investigation of System Changes • Process • FileOut all classes of the old base image • Remove all methods with same code as new image • Compare the others class by class, method by method to a new image • Decisions • Not needed • Can be taken • All callers need to be changed • Has to be adapted • Use GH Change List
Build an image with all changes needed • Cover all system changes • Move changes needed for a specific applications into that application • Was almost impossible with Envy • Build a new base image • Test it • Write unit tests • Use the image for standard work • Organize what you have done in packages and bundles • Publish everything (possibly binary) • Save the image as new corporate base
Filesystem Porting Applications to 5i StORE PackageApp 1 App1 App2 App3 PackageApp 2 App4 Package 3 PackageApp 4 as Parcel Database
Observe and Weed • Observe the process of reading .st files with the change list • Weed out what is not needed • Cut dry branches • Rename • Move to appropriate name spaces • Move into appropriate parcels and packages