PowerTimes

24
Page 1 INTERNATIONAL JOURNAL FOR INQUISITIVE APPLICATION DEVELOPERS JANUARY - MAY 2001 SUBSCRIPTIONS ARE FREE VOL. 8 / ISSUE 1 About the author Daniel Will-Harris started out as a comedy writer in Hollywood, then discovered computers and for better or worse, was never quite the same. Daniel created and edited www.efuse.com, the friendly place to learn how to build a better web site. His opt-in e-mail FuseLetter combines autobiography, fiction and web tips into an entertaining mix. To subscribe to his free newsletter (the FuseLetter) go to http://www.fuseletter.com. His site, www.will-harris.com features the EsperFonto system (in use by Bitstream, Hewlett Packard and Corel), the web's only interactive typeface selection system. Daniel's written seven books, and is currently writing a book called "Wallet Reading: your personality in your pocket." Continued on page 2 When I was a kid, I just wanted to be normal—like everybody else. But I wasn’t normal, as kids around me constantly pointed out. My hair was curly when everyone else’s was straight. I was “husky” (the nice word for it) when all the other kids were skinny. I liked Broadway musicals when other kids listened to heavy metal. I didn’t play baseball, I played Legos. Before second grade started, I insisted on a Beatles hair- cut. My mom obliged, and when I walked into school (I can still remember it clearly) I looked around and real- ized to my horror that no one else had a haircut like mine. The rest of the boys mostly had crew cuts (which I called “toothbrush hair”). They all looked like “Dick” in the “Dick and Jane books,” and there I was—a mop-top fab four, age seven. I was, in short, different. And I didn’t like it. I spent many years trying to fit in. Trying to be like everybody else. No one was fooled, not even me. And then, since I was a lemon, I finally started to make lemonade. I stopped try- ing to be “normal” and started to enjoy being an indi- vidual. I wore different clothes (interesting things from the thrift shop, and anything else that I liked). I worked unusual jobs. As a teenager, I was the Nurseryland Bee. I stood on the sidewalk dressed in a big bee costume and tried to attract customers driving by in cars. What I mostly did was cause traffic accidents, scare adults (kids weren’t scared) and almost pass out from the heat. I bought an unusual car, an AMC Pacer (which is still on my driveway, only now as a kind of non-kinetic sculp- ture). I thought (and still think) it’s beautiful. I put ec- centric and fun things in my house. Next to my computer monitor is a stuffed toy elephant hanging like King Kong on the top of an aluminum model of the Chrysler build- ing (and I don’t care who knows it!). I didn’t do any of this just to be different, I did it because this is what I liked, and I wasn’t afraid to show it. When I started to write computer books, I decided they shouldn’t be like other computer books - high-tech and boring. Mine were funny and looked elegant. They were different and they sold well. What I learned from all of this was that being different makes your work stand out. While that’s terrifying as a kid, as an adult, it can be a big advantage. A study by the J. Walter Thompson advertising agency concluded, “ We see that the most popular products are those which seem unique in terms of style or functional- ity. ” Look at the hottest selling car today, the Chrysler PT Cruiser. It couldn’t be more different than most cars on the road, and it’s precisely that difference that makes it sell so well - there’s a two-year waiting list for one. GUEST EDITORIAL: BEING DIFFERENT by Daniel Will-Harris

description

DataWindow Linkage andthe LUW in the Jaguar CTS environment

Transcript of PowerTimes

Page 1

INTERNATIONAL JOURNAL FOR INQUISITIVE APPLICATION DEVELOPERS JANUARY - MAY 2001 SUBSCRIPTIONS ARE FREE VOL. 8 / ISSUE 1

About the author

Daniel Will-Harrisstarted out as a comedywriter in Hollywood,

then discovered computers and for better or worse, wasnever quite the same.

Daniel created and edited www.efuse.com, the friendlyplace to learn how to build a better web site. His opt-ine-mail FuseLetter combines autobiography, fiction andweb tips into an entertaining mix.

To subscribe to his free newsletter (the FuseLetter) goto http://www.fuseletter.com.

His site, www.will-harris.com features the EsperFontosystem (in use by Bitstream, Hewlett Packard and Corel),the web's only interactive typeface selection system.

Daniel's written seven books, and is currently writing abook called "Wallet Reading: your personality in yourpocket."

Continued on page 2

When I was a kid, I just wanted to be normal—likeeverybody else. But I wasn’t normal, as kids around meconstantly pointed out. My hair was curly when everyoneelse’s was straight. I was “husky” (the nice word for it)when all the other kids were skinny. I liked Broadwaymusicals when other kids listened to heavy metal. I didn’tplay baseball, I played Legos.

Before second grade started, I insisted on a Beatles hair-cut. My mom obliged, and when I walked into school (Ican still remember it clearly) I looked around and real-ized to my horror that no one else had a haircut like mine.The rest of the boys mostly had crew cuts (which I called“toothbrush hair”). They all looked like “Dick” in the“Dick and Jane books,” and there I was—a mop-top fabfour, age seven.

I was, in short, different. And I didn’t like it. I spent many

years trying to fit in. Trying to be like everybody else. Noone was fooled, not even me. And then, since I was alemon, I finally started to make lemonade. I stopped try-ing to be “normal” and started to enjoy being an indi-vidual.

I wore different clothes (interesting things from the thriftshop, and anything else that I liked). I worked unusualjobs. As a teenager, I was the Nurseryland Bee. I stood onthe sidewalk dressed in a big bee costume and tried toattract customers driving by in cars. What I mostly didwas cause traffic accidents, scare adults (kids weren’tscared) and almost pass out from the heat.

I bought an unusual car, an AMC Pacer (which is still onmy driveway, only now as a kind of non-kinetic sculp-ture). I thought (and still think) it’s beautiful. I put ec-centric and fun things in my house. Next to my computermonitor is a stuffed toy elephant hanging like King Kongon the top of an aluminum model of the Chrysler build-ing (and I don’t care who knows it!). I didn’t do any ofthis just to be different, I did it because this is what Iliked, and I wasn’t afraid to show it.

When I started to write computer books, I decided theyshouldn’t be like other computer books - high-tech andboring. Mine were funny and looked elegant. They weredifferent and they sold well.

What I learned from all of this was that being differentmakes your work stand out. While that’s terrifying as akid, as an adult, it can be a big advantage.

A study by the J. Walter Thompson advertising agencyconcluded, “We see that the most popular products arethose which seem unique in terms of style or functional-ity.” Look at the hottest selling car today, the Chrysler PTCruiser. It couldn’t be more different than most cars onthe road, and it’s precisely that difference that makes itsell so well - there’s a two-year waiting list for one.

GUEST EDITORIAL: BEING DIFFERENT

by Daniel Will-Harris

Page 2

PowerTimes

PowerTimes is an international developer’s journalpublished several times a year. It is targeted towardsclient/server and web application developers.

Contact addresses:Editor: Rolf André Klaedtke

Bächlistrasse 21CH-8280 Kreuzlingen / SwitzerlandFax: ++41 - (0)71 - 670 01 71e-mail: [email protected]

Co-Editor: Mark A. LansingEichmatt 17CH-6343 Rotkreuz / SwitzerlandFax: ++41 - (0)41 - 790 74 79e-mail: [email protected]

On the web: http://www.powertimes.com

Back issuesBack issues are available on our website athttp://www.powertimes.com as Adobe Acrobat files.

Editorial Board in alphabetical order:Don DraperBoris GasinRolf André KlaedtkeMark LansingAlan Walsh

SubscriptionsSubscription are available for free: just go to our websiteat http://www.powertimes.com and register on ourmailing list. Each time a new issue is available, mail-ing list members will be notified and receive the pass-word for the issue.

DisclaimerArticles or opinions published in PowerTimes do notnecessarily reflect the opinion of the editorial board.They reflect the opinion of the submitter. We assumethat the copyright of all submitted articles is owned byor granted to the submitter. We must decline everyresponsability regarding technical correctness or truthof submitted articles and opinions.

While being different may mean that some people maynot like you, being boring means no one will. If you’redifferent, chances are more will.

The same is true for web sites. Most sites tend to look sosimilar it’s as hard to tell them apart as it is to tell aToyota Camry from a Nissan Sentra (and where do theyget those names?).

Lately I’ve worked for some people who, despite beingadults, are still afraid to be different. These people rangefrom late 20s to late 40s, and they’re still acting likethey’re 14 - as if being different is the worst thing in theworld. They point to other sites and want to look just likethem.

I say, “If you’re just a copy of them, why should anyonechoose you instead of them?” I think, “Grow up!”.

So when you work on your site, don’t try to look andsound like everybody else. Don’t be afraid to be different.Turn your differences into advantages. It can and willwork for you.

Daniel Will-Harrishttp://www.FuseLetter.com,http://www.eFuse.com

What’s InsideEditorial: Being Differentby Daniel Will-Harris

Impressumon Page 2

Future Visions: Surviving on the Network Edgeby Barry Morris on Page 3

Getting Technical: DataWindow Linkage andthe LUW in the Jaguar CTS environmentby Vladimir Uzlaner on Page 9

Product Overview: Optimizing Software Devel-opment Projectsby Jean Aeschbach on Page 17

I love you - not reallyby Rolf André Klaedtke on Page 21

Look what’s out thereWebsites introduced by Daniel Will-Harris on Page 23

PowerTimes: What’s coming on the website andin the journalbe the editors on Page 24

Page 3

PowerTimes

IntroductionWith almost incomprehensible speed, the Internet hasgone from a medium for serving up static marketing mes-sages to a ubiquitous computing platform. And with thepace of change accelerating, the next few years will seean ever more profound evolution:

• Within the next few years, commercial Web sites aswe know them will no longer exist. As organizationsincreasingly are driven to conduct business on theInternet, their Web sites will evolve into enterpriseportals. Ultimately, all organizations will use an en-terprise portal to establish their Internet presence.

• As they evolve their portal strategies, organizationswill learn that today’s standalone application andintegration servers are not designed to support en-terprise portals and the applications that they con-tain. Instead, organizations will turn to portal serv-ers to build their on-line businesses. Applicationserver vendors who do not respond to this evolutionwill be gone.

• The demands of conducting business on-line and thedistributed architecture of the Internet will force or-ganizations to re-engineer their applications. In placeof traditional applications, organizations will deploywhat Gartner Group calls e-services, and services-based application architectures will dominate.

• Services-based applications will require an e-busi-ness platform that does not exist today. As organiza-tions increasingly do business over the Internet, or-ganizational boundary lines will blur. This blurringwill occur most quickly among those organizationsthat gravitate to these new, entirely standards-basede-business platforms. Proprietary platforms will in-creasingly isolate their users at great competitive costto them.

No More Web SitesIt should be obvious to anyone reading this article thatWeb sites, as we know them, even straight-ahead, high-volume e-commerce sites, do not represent an effectiveor credible e-business strategy. The reason behind thedemise of the Web site lies at the network edge.

…an explosion of accesstechnologies shows no sign of

slowing…

About the author

Barry Morris is the CEO ofIONA Technologies(www.iona.com). Mr. Morrisjoined IONA in November of

1994 and has served in a number of executive and man-agement roles since that time including IONA’s ChiefOperating Officer, Senior Vice President of ProductDevelopment, and Vice President of Business Devel-opment. Mr. Morris is a graduate of New College, Ox-ford University. You may contact him at [email protected]

FUTURE VISIONS: SURVIVING ON THE NETWORK EDGE

by Barry Morris

Inside, organizations have spent years evolving their in-formation system infrastructure. For most organizations,this infrastructure includes one or more operating plat-forms, typically involving some combination of main-frame, UNIX and Windows environments. The infrastruc-ture also typically includes a variety of applications de-signed to automate business processes. Depending on anorganization’s sophistication and technical prescience,these applications interoperate to a greater or lesser de-gree. Finally, the infrastructure contains content, com-prising both structured application data and unstructuredtext, HTML pages, and other material.

Outside, an explosion of access technologies shows nosign of slowing. Broadband technologies provide an ever-growing pipe to end users, which spurs their appetite foraccess, which drives the growth in pipe capacity, and soon. A growing variety of appliances, some user-drivenand some automated, places ever-greater demands on or-ganizations to furnish information in multiple formatssimultaneously. And the growth in wireless access tech-nology in particular means that appliances/users can de-mand information wherever they are, whenever they wantit.

Infrastructure and access meet at the network edge, whereorganizations are increasingly driven to deliver perva-sive, personalized content and commerce. Outside thenetwork edge are billions of Internet devices. Inside thenetwork edge is the enterprise’s very competitive machin-ery. Whatever organizations erect at the network edgemust be extremely scalable, highly reliable and available,very secure, and online all the time.

Clearly, we are not describing a Web site here. We are, infact, describing an entirely new use of the Internet, de-signed to meet the unique demands placed on an organi-zation at the network edge. The name for this new phe-nomenon is an enterprise portal.

Page 4

PowerTimes

Properly architected, enterpriseportals create enormous

opportunities for organizationaleffectiveness and agility.

An enterprise portal is an Internet site owned and oper-ated by an organization in support of its business opera-tions. The enterprise portal is a single point of contactand community between the enterprise and all of itsstakeholders and prospects. Like the popular consumerportals, an enterprise portal organizes a variety of infor-mation, using indexes and visual presentation.

An existing company’s Web presence is as important toits brand identity, customer perception, and overall per-formance as its storefronts, direct selling process, part-ner programs, and other channels. Most enterprise Websites now contain huge amounts of information, managedby dozens of servers. Enterprise portals will help compa-nies better organize all of this information, in part byallowing stakeholders to create custom views of it.

In addition to information, though, an enterprise portalalso organizes tools, applications, and transactions pro-vided by the enterprise to its employees, customers, andother stakeholders. Enterprise portals support customizedviews of these applications, data, and transactions, as wellas access to those resources, along with external resourcessuch as news sites and procurement sites.

Enterprise portals are also the platform for active deliv-ery of information and commercial transactions to cus-tomers, partners, prospects, investors, and otherstakeholders. A customer’s view of the portal will con-tain different resources and data than an employee’s view,but both will be provided by a common architecture.

Access, delivery and personalization are the bedrock ofthe architecture. However, enterprise portals will alsosupport linkage between and integration of informationand processes in both the online and off-line worlds, andprovision of new services and products.

Linkage is the interconnection of different applications,data, and transactions to support a user action. For ex-ample, linking ordering, inventory status, and creditchecking into a single user action will require coordina-tion of three different systems in the typical enterprise.To accomplish this linkage, the enterprise portal must beable to maintain the user’s context, including security,transmit the right instructions and values to each system,and ensure that each operation is in the proper sequence.

For a true e-business to succeedits applications have to readilyintegrate and interoperate with

other applications…

Integration, on the other hand, requires that the portal beable to integrate data from different places and make itwork together. For example, a customer care applicationmay pull information from multiple sources, filter thatinformation, and then present it in a single customerscreen.

Properly architected, enterprise portals create enormousopportunities for organizational effectiveness and agil-ity. They make it possible for companies to explore en-tirely new business models, new products, and new waysof connecting with entities that matter. At the same time,poor design, disjointed processes, system outages, andbotched interactions can destroy these potential benefitsof enterprise portals. Enterprise portals will either dis-tinguish their owners from the mass of Internet commercesites or damage franchises and brand names built up foryears. Success will require careful design, robust infra-structure, and an architecture that can sustain valuethrough rapid changes to portal content and organizationover time.

With enterprise portals becoming the new standard defi-nition of e-business, anything less ambitious will becomeirrelevant. Organizations that cannot provide this levelof service and connectedness to its stakeholders will fail.

No More Application ServersIf enterprise portals are the inevitable vehicles by whichorganizations expose their enterprises to the Internet atthe network edge, how will these portals be built and howwill they be supported? It is clear to us that applicationservers, the application platform of choice today, are in-sufficient as a portal platform. Instead, organizations willadopt what Gartner Group calls portal servers.

Application servers were to late 1990’s computing whatdatabase servers were to the early 1990’s. Just as data-base servers liberated developers from many of the pro-grammatic responsibilities associated with data storageand management, so too did application servers make iteasier to programmatically isolate business logic into aseparate application tier. Application servers, componentsand the Java programming language proved to be highlycomplementary, and each of the three phenomena con-tributed to the others’ popularity.

Page 5

PowerTimesApplication servers are useful for function-rich Web sites,and even for low-end consumer portals, because they pro-vide a rich container for new application logic. However,enterprise portals are far more demanding than this.

For example, enterprise portals require extensive inte-gration of existing enterprise applications on mainframe,UNIX and Windows NT platforms. This integration needsto be non-intrusive, standards-based, both synchronousand asynchronous in nature, and driven by a flexible busi-ness process modeling and workflow mechanism. Addi-tionally, enterprise portals require extremely feature-richWeb-facing capabilities. Portal implementers will needfeatures such as personalization, access control and man-agement and content management, and they will want tobe able to expose portal content to a variety of client de-vices.

Application servers are good at supporting business logic.They are not good at application integration or contentmanagement or any of a number of other important en-terprise portal functions.

As a growing number of organizations realize the impor-tance of back-end integration to their portal strategies,application server vendors have begun to bolt integrationcapabilities onto their standard application server offer-ings. We believe that this is a misguided approach to por-tal construction that in the end will not allow developersto maintain pace with the nature of Internet applicationdevelopment, because it ignores the fundamental changein application architecture that we believe is imminent.

We believe that application servers will evolve to becomewhat the Gartner Group calls portal servers. Portal serv-ers provide organizations with all of the development,deployment and management functions they need to buildeffective enterprise portals. Portal servers offer not onlyan application platform, but also an integration platformand a Web-facing platform. In other words, they providethe combined functionality that organizations need tobuild and deploy enterprise portals.

Portal servers are more than a loose collection of applica-tion server, integration server and Web development tech-nologies. Portal servers are designed from scratch to sup-ply what Gartner Group calls “front-end to back-end in-tegration via composite-applications-oriented solutions.”

No More ApplicationsApplications today, whether they are intended formainframes or J2EE application servers, tend to bearchitected as distinct, single systems. While these appli-cations may be designed to interact with other systems -and may even be built in accordance with one of today’sstandard distributed application architectures - they none-theless are islands. And integrating these islands is a dif-ficult and expensive undertaking.

…developers of services-basedapplications will focus far more

often on interactions.

For a true e-business to succeed its applications have toreadily integrate and interoperate with other applicationson other platforms and other environments, becomingwhat Gartner Group calls composite applications. Thisis the very definition of e-business computing. Today’sapplication architectures do not easily meet these crite-ria. This suggests to us that applications have to be builtin an entirely different way going forward, if organiza-tions hope to leverage the benefits of enterprise portalsand the larger Internet on which they operate.

If today’s applications are largely custom built and sel-dom designed to interoperate with other systems, the nextgeneration of applications will be designed from theground up to interact and collaborate with other systems.What will make this possible is a new approach to appli-cation development that relies on a services-based appli-cation architecture. More than ever before, organizationswill build applications using components. These compo-nents will present themselves as a collection of services,operating in a context in which discovering and invok-ing services is done in a standardized fashion.

These services will be entirely independent of underlyingsystem APIs and component models. Of course, these serv-ices will be location, language and platform independ-ent. They will reside and interconnect on the Internet-standard transport, HTTP. They will communicate usingan RPC-like technology, which we believe will beSOAP *.

Services-based architectures are nothing new to organi-zations that employ CORBA (Common Object RequestBroker Architecture), the Object Management Group’sstandard for platform- and language-independent appli-cation inter-operability. However, the typical CORBAdeveloper is a software engineer writing C++ applica-tions. For mainstream business application developers,services-based architectures represent a very differentapproach to application design and implementation.

Microsoft, with its .NET strategy, is popularizing serv-ices-based application architectures among business ap-plication developers. These architectures are at the heartof Microsoft’s strategy, which envisions “constellationsof computers, devices, and services that work together todeliver broader, richer solutions [where] computers, de-vices, and services will be able to collaborate directly witheach other, and businesses will be able to offer their prod-ucts and services in a way that lets customers embed themin their own electronic fabric.”

* Editor’s note: SOAP and other terms: see later in thisarticle

Page 6

PowerTimesApplications built around what Gartner Group calls e-services and what Microsoft calls Web services will fea-ture business services – that involve both new functional-ity and recapture existing application functionality – andfront-end services – providing portal access to a varietyof users at a variety of clients.

Expect that these applications will involve an enormousvariety of data. Today’s business application developersare often concerned with database-centric transactions,and even today many application server vendors respondto this concern by focusing attention on their OLTP capa-bilities. But enterprise portal users will need access tomore than database data. With exposing the entire enter-prise to a heterogeneous audience as their fundamentaldesign goal, enterprise portals will support applicationsthat are concerned substantially with mixed and oftenunstructured data. Accordingly, developers of services-based applications will focus far more often on interac-tions. Certainly, these interactions may subsume tradi-tional transactions, but they will also involve unstruc-tured data and business logic.

Expect that these applications and their services will in-volve transactions and interactions that transcend ma-chine, application space, and even enterprise boundaries.SOAP will provide the standard communications proto-col for these services and, indeed, for Internet-wide com-puting in general.

Expect that these services-based applications will haveto accommodate a variety of client devices and, on eachdevice, a variety of customized and personalized inter-faces. Users will increasingly anticipate that their uniqueneeds will be met by each application’s front-end serv-ices.

Finally, expect too that a vast collection of standardizedservices will be provided by one or more standard e-busi-ness platforms.

No More Operating SystemsThese new services-based applications will require anunderlying e-business infrastructure designed to supportsuch applications and the enterprise portals that containthem. Whereas once the terms infrastructure and operat-ing system were largely synonymous, the coming e-busi-ness infrastructure is entirely operating system independ-ent. In fact, operating systems have already become lessimportant, and as enterprise portals increasingly driveend-users’ computing experiences, operating systems willbecome entirely irrelevant.

The Internet represents the triumph of computing stand-ards. The e-business platform will be entirely standardsbased, with support for:

• XML (Extensible Markup Language), the now well-

known extensible language that is both human- andmachine-readable, that supports content modeling,content management and application data storage andmanipulation, and that easily interoperates with ex-isting Internet technologies.

• SOAP (Simple Object Access Protocol), authored byMicrosoft, IBM, IONA and others, provides an opennetwork protocol supporting invocation of applica-tion functionality across the Internet. XML providesthe language by which these method calls are de-fined and managed, and the standard firewall-safeInternet protocol HTTP provides the vehicle. SOAPopens the door to the device-, platform- and language-neutral service-based application architectures thatwill change the way applications are designed anddeployed.

• UDDI (Universal Description, Discovery and Inte-gration), proposed by IBM, Microsoft and Ariba,begins to solve the problems inherent in bringingtogether e-businesses, each with its unique businessprocesses, unique collection of business automationtechnology, and unique services made available tocustomers and potential customers. UDDI providesa universally available, standard means for uniqueentities to describe and promote themselves on thesevarious dimensions.

• J2EE (Java 2 Platform, Enterprise Edition), SunMicrosystems’ specification for large-scale distrib-uted Java systems, is intended to provide a standard-ized, services-rich platform for building enterpriseJava applications.

• .NET, Microsoft’s vision for the future of the Internet,provides a device- and platform-neutral architectureon which application services can be built and de-ployed across the Internet and made available to anopen-ended variety of client devices.

Because Internet applications demand it, the e-businessplatform will be tremendously scalable. It must be con-structed on technology that can scale quickly, both involume and in functionality. Accordingly, it cannot bedevice dependent, nor can it require system shutdowns inorder to scale.

Given that it must support composite applications, withtheir substantial back-end services and concomitant ap-plication integration, the e-business platform must pro-vide support for synchronous and asynchronous transac-tional event/message paradigms.

With composite applications running on top of it, the e-business platform must provide a service-based, location-transparent architecture for systems and application com-ponents. And because developers from a number of back-grounds and disciplines, using a number of programming

Page 7

PowerTimeslanguages, will be relying on the e-business platform tosolve an enormous variety of programming challenges, itmust provide programming personalities for native XML,EJB/J2EE, mainframe (i.e., CICS, IMS, COBOL and PL/1), CORBA and COM/DCOM.

Enterprise portal applications will, from organization toorganization, present a dizzying variety of services andfunctionality to a diverse population of end-users. Devel-opers will, from project to project, need some applicationfeatures and services and not others. The e-business plat-form must allow for this, and provide pluggable qualitiesof service, including security, distributed transactions,management, load-balancing, fault tolerance, and so on.

Business application developers using XML and Java, whohave no particular .NET- or CORBA-like experience, willparticularly appreciate the e-business platform. With itsability to expose existing back-end applications and otherenterprise resources as services, it will ease the transitionfor mainstream developers into the world of services-basedarchitectures and portals.

No More Status QuoThe Internet changes everything. We see all around usevidence that organizations are rapidly gravitating toenterprise portals. These portals will be the vehicle bywhich organizations expose their enterprise processes totheir customers and partners at the network edge, usingthe Internet and its technology standards. Enterprise por-tals will be built and deployed in a new kind of container,a portal server. Portal servers will provide developers withbusiness logic, application integration, and portal accessand control development and deployment environments.Executing in these environments will be composite ap-plications that conform to a services-based architecture.In these applications, both new components and existingapplications will present themselves according the serv-ices they can provide, and developers will work to as-semble the services they require to meet a particular com-posite application need. And finally, underlying all of thiswill be an XML-native e-business platform, providing astandards-based infrastructure and a set of enterprise serv-ices for all of the layers and devices above it.

Editor’s Note: This article was first published in the EAIJournal. We are thankful to IONA Technologies for al-lowing us to republish this article.

Page 8

PowerTimes

Page 9

PowerTimes

About the author

Vladimir Uzlaner is anindependent contractor,specialized in

PowerBuilder applications. He has over 6 years experi-ence in PowerBuilder, including PFC, OLE 2 and Dis-tributed environments. You can contact him [email protected]

Getting Technical: DataWindow Linkage andthe LUW in the Jaguar CTS environment

by Vladimir Uzlaner

IntroductionI would like to discuss a very serious issue in this article.I haven’t met strict direction in how to resolve this prob-lem, neither in the industry journals, nor in the docu-mentation, (at least not properly emphasized.)

The issue relates to DataWindow linkage, and what diffi-culty a developer may face because of DataWindow syn-chronization and related matters required in the develop-ment of a PowerBuilder application for the Jaguar dis-tributed environment.

It is recommended to use stateless components againststatefull ones. But the major problem for stateless com-ponents is that after every method invocation the compo-nent is destroyed and the transaction is completed (oraborted). So if we have on the client side manyDataWindows that we want to update in one logical unitof work (LUW), we can’t do it using stateless compo-nents in a straightforward manner.

As far as I know there are three methods to solve thisproblem:

1. Using a stateless component, passing to itsof_Update() function as many blobs for as manyDataWindows we want to update in one LUW.

2. Using a statefull component with its lifetime onlyfor the period of the database transaction.

3. Using one huge DataWindow object which sharesall linked DataWindows. In a stateless componentwe are updating this DataWindow in one transac-tion

Note that DataWindow synchronization worked only in anon-Web client. I have a feeling, that most projects thatare built upon Jaguar are Internet-based. Such applica-tions are not required to update many DataWindows in asingle transaction. (Actually, I have heard that program-mers use the third method with a shared DataWindowfor such situations). That’s why, I believe, not much at-

tention has been paid to this problem. Unfortunately Ihave faced this issue on my last two projects. Actually ona recent project, parts of modules were moved to produc-tion and I received complaints of having to spend thewhole day restoring data that become inconsistent afterJaguar failed in the middle of a set of transactions. Badnews!

In the end, I used the first two methods to resolve thisproblem, so I will cover the details of these in this article.

Using a Stateless Component With ManyBlobsThis section covers using stateless components with threemajor points related to this. Later I am going to coverusing statefull components for updating linkedDataWindows in one transaction.

It is recommended that developers create stateless com-ponents for multi-user, high-volume applications. Suchcomponents are destroyed (actually deactivated, andpooled) after every method invocation. In this case, if agiven component is transactional, all transactions aregoing to be completed. To state this in a more direct fash-ion, even for Jaguar novices, this means that if you up-date many database tables and you are going to do it inone transaction, you must do it in a single function.

Well, you can do this in one public function from whichyou can call as many private/protected functions as youneed. Because Jaguar sees only public functions, and onlysees such functions after invocation, the component islosing its state.

This is the first axiom.

The next problem is what to do if you have a linkagechain between a parent DataWindow and childDataWindow(s). Normal treatment of any DataWindowis DataWindow synchronization, whereby you pass to thecomponent’s method a blob where you store yourDataWindow with all its workings. You can ask – if Imay only use one public function for updating, should Ipass to it all the blobs from all linked DataWindows?

The only answer I see is YES. If you have twentyDataWindows in linkage, you have to pass twenty blobsto this single function. You could keep all of them in anarray and pass this array, but you do need to do it all atonce - remember to pass by reference! This is the maindrawback of using stateless components when updatinglinked DataWindows in one transaction.

Page 10

PowerTimesThis is the second axiom.

Another problem I had to resolve was in what order toupdate DataWindows from parent/child chains. First Ihave to update child DataWindows (only the ‘Delete’ part)and then the parent DataWindows (‘Update’/’Insert’ part).For more information you can go to the following linkand check the PFC code for the linkage service:

http://www.pfcguide.com/extensions/ext_0006.asp

For those of you who are interested in the idea only andnot in the details, you can skip the example below and gostraight to the section on page 15 which covers using astatefull component.

ExampleFirst, create a DataStore object that we will use on theJaguar side for interaction with database. Inherit this froma standard nonvisual object, say, n_ds_non_pfc. We willadd some common functionality and a protected instancevariable:

Protected:string is_UpdatesAllowed=”IUD”// I-Inserts U-Updates D-Deletes

of_SetUpdatesAllowed(string as_arg)//function to set this variable to desired value(‘D’, ‘U’ or ‘I’):is_UpdatesAllowed = as_arg

In the SQLPreview event add the following code:

The SQLPreview event is fired just before PowerBuildersends a SQL statement to database. This is the only placewhere we can check which statement (INSERT, UPDATEor DELETE) PowerBuilder is sending to the database.We’ll use it in our code to first DELETE rows in anychild DataWindows and then to UPDATE/INSERT rowsin the parent DataWindows.

Client-side DataWindow LinkageAs an example, consider a screen where we have‘d_master’ for a parent DataWindow control object and“d_detail” for a child DataWindow control object. Thelatter is the parent DataWindow for another childDataWindow control with “d_detail_items” as the dataobject. So we have two layers of linkage:

‘d_master’ -> “d_detail” -> “d_detail_items”

Suppose the user creates a new purchase order (PO), addsordered items for this PO and creates PO notes for everyitem and then clicks

‘Save’. Or the user retrieves a PO, deletes some items,adds new ones, adds notes and

then clicks ‘Save’. In the clicked event of the ‘Save’ but-ton we call a remote of_Update() function of the compo-nent in_bo_jag, declared as an instance variable :

n_bo_jagin_bo_jag

Then call CreateInstance(in_bo_jag) somewhere in thepostopen() event of the Window).

Before calling the remote of_Update() method we haveto GetChanges() to a blob for every DataWindow. Thefull cb_save clicked event is below (I removed all errorchecking and other stuff to save space):

Continued on page 10

Listing 1, n_ds_non_pfc.SQLPreview() event

//Check the arguments.if IsNull(sqltype) or IsNull(sqlsyntax) or IsNull(buffer) then return

// Only perform the requested SQL (insert, update, delete) statements.if (sqltype = PreviewSelect!) or & (sqltype = PreviewInsert! And Pos(is_UpdatesAllowed,”I”)>0) or & (sqltype = PreviewUpdate! And Pos(is_UpdatesAllowed,”U”)>0) or & (sqltype = PreviewDelete! And Pos(is_UpdatesAllowed,”D”)>0) then // Allow the continuation of the SQL statament.else // Stop this SQL statement from being executed. // return 2 - Skip this request and execute the next request. return 2end if

Page 11

PowerTimes

As you can see we get every DataWindow object to sepa-rate Blob and then pass to of_Update()three blobs. I alsowill show you a trick on how to resolve a kind of bugwhen the Identity column (it is for Sybase users) is notreturned to the inserted row from Jaguar, even if youchecked the ‘Identity Column’ check box in theDataWindow painter.

The calls to SetChanges() are going to unload blobs with‘ResetUpdated’ on the Jaguar-side DataWindows to ourDataWindow controls. ResetUpdate() does the same thing,but is faster.

To all remote functions we pass a user id to show in anerror message on the Jaguar side to whom these errorsbelong. It doesn’t mean I use global variable in the Jag-uar environment, I just call gnv_app.of_get_userid()method on the client side, get UserID and pass it to aremote function.

New <Identity Column> number is getting a new sys-tem-generated value as an identity column, but becauseof a bug, after DataWindow synchronization this value isnot shown on the client screen. Even if you set the prop-erly ‘Identity Column’ in DataWindow painter (actuallyit is part of a more common problem: if you SetItem()between GetChanges() and Update() functions, thesechanges are made in the database, but not on the client

DataWindow after SetChanges()). So, I am passing it fromJaguar to the client through the il_gen_num parameterand then calling SetItem() on the Client Side.

Server-side DataWindow LinkageAt last let’s see how our of_Update() function in then_bo_jag object looks. It’s big, but don’t be frightened:

(Editor’s note: code starts on next page. For your con-venience, the code will be available for download fromour website at http://www.powertimes.com. Look underResources.)

Listing 2, cb_save.clicked() event

Long ll_rowString ls_errorBlob lblob_master, lblob_detail, lblob_detail_itemsLong ll_rtn

ll_row = dw_master.GetRow()

dw_master.GetChanges(lblob_master)dw_detail.GetChanges(lblob_detail)dw_detail_items.GetChanges(lblob_detail_items)

ll_rtn = in_bo_jag.of_Update( ls_error, lblob_master, lblob_detail, lblob_detail_items, & gnv_app.of_get_userid(), il_gen_num)ll_po_notes_row = dw_detail.GetRow()If ll_rtn < 0 then <Error Message > ReturnElse// dw_master.SetChanges(lblob_master)// dw_detail.SetChanges(lblob_detail)// dw_detail_items.SetChanges(lblob_detail_items) dw_master.ResetUpdate() dw_detail.ResetUpdate() dw_detail_items.ResetUpdate()

if ll_row > 0 then dw_master.SetFocus() dw_master.SetColumn(“gen_number”) il_gen_num = Long( String( ll_rtn)) dw_master.SetItem(ll_row, “gen_number”, il_gen_num) dw_master.SetItemStatus(ll_row, “gen_number”, Primary!, NotModified!) end ifEnd If

Page 12

PowerTimes/*******************************************************Object : n_bo_jagFunction : of_updateAccess : PublicDesc. : Update data through appropriate DataWindow object, passed as parameterArg’s : String as_error ( by ref ) Store Error Message

Blob ablob_master ( by ref ) - for d_master synchronizationBlob ablob_detail ( by ref ) - for d_detail synchronizationBlob ablob_detail_items ( by ref ) - for d_detail_items synchronization.String as_user - current user for statisticLong al_gen_num. If there was no changes in the dw_master DataWindow, we can’t getpo number from their blob, so we pass it as a parameter

Returns : Long*******************************************************/

// We need update all DataWindows in one transaction. Because we use stateless components,// after every method invocation, all transaction will be completed and component will lose// the state.// That’s why we need make all updating and completing transaction in one function call// (this function).// So we need to pass in this function blobs for all our DataWindows.// If some of DataWindows was not changed, SetChanges() function return -1 !? So before// dealing with a// DataWindow I check if this DataWindow was changed( Len( ablob_...) <> 0//// PFC Linkage service like situation:// When we are going to update chain of related DataWindows, the sequence of updating is// very important.// - If we insert row in the Master DataWindow we must first update Master DataWindow and// then Detail DataWindow,// or user will get Database Error Message like: “Row in Parent table is not found”// - If we delete row from the Master DataWindow we must first update Detail DataWindow and// then - Master DataWindow,// or user will get message like: “Cannot delete record, because records in Child Table is// found”. Actually we can avoid this// message if, in the DataWindow update property set ‘Cascade Delete’, but this ‘decision’ is// very dangerous and not recommended.// We use here the same logic as PFC Linkage service does:// 1. Update Detail DataWindow, ‘Delete’ part only. We pass to the of_Update_Linkage_DW()// function ‘D’ parameter. It is// mean that before issuing SQL statement for ids_data, the SQLPreview() event is fired.// There we check if ‘Delete’ statement// is passed and is_UpdatesAllowed = ‘D’, then go ahead, if “Update” or “Insert” statement// are issued, then stop.// 2. The same manner we completely Update MasterDataWindow( ‘Update’, ‘Insert’ and// ‘Delete’ statements).// 3. At last we update Detail DataWindow ‘Update’ and ‘Insert’ parts only//// In Purchase Order case we have more complicated situation: “dw_master” - Master DataWindow,// “dw_detail” detail DataWindow of this Master, and dw_detail_items - the Detail of dw_detail.// In this case the order of updating like that:// 1. Update dw_detail_items Detail DataWindow, ‘Delete’ part only.// 2. Update dw_detail Detail DataWindow, ‘Delete’ part only.// 3. Update dw_master MasterDataWindow( ‘Update’, ‘Insert’ and ‘Delete’ statements).// 4. Update dw_detail MasterMasterDataWindow( ‘Update’ and ‘Insert’ statements).// 5. Update dw_detail_items Detail DataWindow, ‘Update’ and ‘Insert’ parts only.//// It is important to keep of_Update_Linked_DW() function is private. In this case the n_bo_jag// component won’t loose the state and it won’t close transaction! Remember we have to// close Transaction// ourselves in the end of this function, if all updating were successful.

Long ll_testlong ll_ind, ll_countstring ls_product_id, ls_serial_numlong ll_manuf_idDateTime ldt_todayboolean lb_transaction_good = TRUEdwItemStatus l_statDouble ll_rc

Continued on page 12

Page 13

PowerTimesil_gen_num = al_gen_num

// Updating the ‘Detail Items’ DataWindow, ‘Delete’ partif Len( ablob_detail_items ) <> 0 then

// check if there were changes in d_detail_items DataWindowif this.of_Update_Linked_DW( “d_detail_items”, ‘D’, as_user, ablob_detail_items, &

as_error) < 0 thenlb_transaction_good = FALSEGOTO Quit

end ifEnd if

// Updating the ‘Detail’ DataWindow, ‘Delete’ partif Len( ablob_detail ) <> 0 then

// check if there were changes in d_detail DataWindowif this.of_Update_Linked_DW(“d_detail”, ‘D’, as_user, ablob_detail, as_error) < 0 then

lb_transaction_good = FALSEGOTO Quit

end ifEnd if

// Updating the ‘Master’ DataWindow, all partsif Len( ablob_master ) <> 0 then

// check if there were changes in d_master DataWindowif this.of_Update_Linked_DW( “d_master”, ‘UID’,as_user, ablob_master, as_error) < 0 then

lb_transaction_good = FALSEGOTO Quit

Else// Because of DW Synchronization - Identity column problem, store it in il_gen_num,// then we will get it from of_GetIdentityColumnValue() function.if ids_data.RowCount() > 0 then

il_gen_num = ids_data.GetItemNumber( 1, “gen_number” )ll_rc = ids_data.GetChanges(ablob_master)

// Probably here we are loosing Identity Column Valueend if

End if

// Updating the ‘Detail’ DataWindow, Update/Insertif Len( ablob_detail ) <> 0 then

// check if there were changes in d_detail DataWindowif this.of_Update_Linked_DW(“d_detail”, ‘UI’, as_user, ablob_detail, as_error) < 0 then

lb_transaction_good = FALSEGOTO Quit

elsell_rc = ids_data.GetChanges(ablob_po_item)

end ifEnd if

// Updating the ‘Detail Items’ DataWindow, ‘Update’ and ‘Insert’ partsif Len( ablob_detail_items ) <> 0 then

// check if there were changes in d_detail_items DataWindowif this.of_Update_Linked_DW( “d_detail_items”, ‘UI’, as_user, ablob_detail_items, &

as_error) < 0 thenlb_transaction_good = FALSEGOTO Quit

elsell_rc = ids_data.GetChanges(ablob_detail_items)

end ifEnd if

Quit: if lb_transaction_good thenIf ib_distributed Then

its_jag.SetComplete()Else

Commit Using itrans;if itrans.SQLCode <> 0 then

Continued on page 13

Page 14

PowerTimes

Sorry for using GOTO, but I am not a follower of strong principles. In our situation only the code wins, because incase of an error we can’t just leave the function, we have to do some standard procedure. In the application I use aregime (indicated by ib_distributed variable), by which the program can run in a distributed Jaguar environment orlocally on the client machine. If anybody is interested in such a technique, please, let me know.

il_gen_num is an instance variable:

Private:long il_gen_num

And now the protected of_update_linked_dw() function:

as_error = “SQL Error during committing the transaction~n “ + &String( itrans.SQLDBCode ) + “: “ + itrans.SQLErrText

ll_rc = -1end if

End Ifll_rc = il_gen_num

ElseIf ib_distributed Then

its_jag.SetAbort()iel_jag.log ( as_user + “:” + Classname() + “. of_update(). Error :” + as_error )

ElseRollback Using itrans;

End Ifll_rc = -1RETURN ll_rc

End If

if il_gen_num > 0 thenreturn il_gen_num

elseRETURN ll_rc

end if

Listing 3, n_bo_jag.of_Update() function

//********************************************************************************//// Object: n_bo_jag inherited from n_bo_ancestor// Function: of_update_linked_dw// Access: protected// Argument s:string as_dw_name// string as_updates// string as_user// ref blob ablob_notes// ref string as_error// Returns: integer//********************************************************************************

long ll_rc, ll_ind, ll_count …string ls_product …

ids_data.DataObject = as_dw_nameids_data.SetTransObject( itrans )ll_rc = ids_data.SetChanges( ablob_dw )If ll_rc = 1 Then

ids_data.of_SetUpdatesAllowed( as_updates)if Pos( as_updates, ‘I’) > 0 then // if you try insert row

ll_count = ids_data.RowCount()FOR ll_ind = 1 TO ll_count

ids_data.SetItem( ll_ind, “last_update_userid”, as_user)ids_data.SetItem( ll_ind, “last_update_dt”, DateTime( Today(), Now()))

NEXTend if

Continued on page 14

Page 15

PowerTimes

In some places I use double data type instead of long,because we had a Sybase Identity Column Gaps prob-lem and we got very big values there. Anyway it wasn’tworking because of a bug: when you pass a parameterwith double data type to a function, this function stilltreats this parameter as a long. To resolve this problemwe had to clean the Gap, reduce the identity column lengthfrom numeric(18) to numeric(7) and update the BurningSet Factor. But that is another story.

We have to call ids_data.ResetUpdate() only on the finalUpdate/Insert stage.

To sum up, this method of using stateless components isreasonable to use when you have 2-3 DataWindow linked,otherwise it’s better to use a more elegant method withstatefull components.

Using Statefull componentsAnother idea on how to update linked DataWindows inone transaction is to use a statefull component, let’s callit n_update.

I know some people who will stop reading this part afterseeing the words ‘statefull component’. Statefull compo-nents are considered “Jaguar’s resource eaters”. But thisis not true - if we handle them in right way.

Let’s look closer on the n_update function. Statefull com-ponents consume Jaguar resources until they are destroyed.A statefull component’s behavior will be exactly the sameas a stateless one, if after every remote function call wedestroy the instance of that component.

It is dangerous to create an instance of a statefull compo-nent somewhere in the window’s Open() event and de-stroy it in the Close() event. In this case, the componentwill hold Jaguar’s resources until the user finishes theirdata entry or comes back from lunch.

The lifetime of the n_update component will be from whenthe user clicks the Save button until Jaguar issuesSetAbort() or SetComplete(). It will take approximatelythe same time as if we use a stateless component, passing1-8 blobs to the only of_Update() function. This differ-ence will hit Jaguar very hard.

CHOOSE CASE as_dw_nameCASE “d_detail”

if Pos( as_updates , ‘I’) > 0 then // if you try insert rowFOR ll_ind = 1 TO ll_count// Copy common field from Parent DW to Child DW:ids_data.SetItem( ll_ind, “gen_number”, il_gen_num)NEXT

end ifif as_updates <> ‘D’ then // if you are not deleting the rows//Update Product table

< Here is some logic for updating related to this transaction tables>

CASE “d_detail_items”if Pos( as_updates , ‘I’) > 0 then // if you try insert row

FOR ll_ind = 1 TO ll_count // Copy common field from Parent DW// to Child DW:

ids_data.SetItem( ll_ind, “gen_number”, il_gen_num)NEXT

end ifEND CHOOSE

ll_rc = ids_data.Update( TRUE, FALSE)If ll_rc = 1 Then

// Don’t drop the update flags, if you process ‘Delete’ part onlyif as_updates <> ‘D’ then

ids_data.ResetUpdate()as_error = “”

Elseas_error = as_user + “ : SQL Error for “ + as_dw_name + “: “+ &String( ids_data.of_get_sqldbcode() ) + “:” + &

ids_data.of_get_sqlerrtext()return -1

End IfElseas_error = as_user + “ : Error setting changes for “ + as_dw_name + &

“~n”+ this.of_SetChangesMsg( ll_rc )End If

return ll_rc

Listing 4, n_bo_jag.of_update_linked_dw() function:

Page 16

PowerTimesSo, I propose to create two functions in the n_update com-ponent:

1. of_Update( <DataObject name>, blob, …)Here we call the ids_datastore.Update() function. If it isfails, call SetAbort() function. In this case the whole trans-action will be aborted and n_update destroyed immedi-ately.

2. of_Commit().Here we call SetComplete(), the transaction is commit-ted and n_update is destroyed immediately.

Actually you can create these two functions from yourof_Update() that you use in the stateless component byjust moving the last part of code with SetComplete() tothe of_Commit function.

On the client side we have next schema (if you use PFC,if not – the schema is similar). When the user clicks theSave button, the pfc_save() event is fired on a windowinherited from w_main. This event triggers the follow-ing events:

w_main.pfc_BeginTrans()Here we’ll call CreateInstance( n_update). It’s better toput this code in w_main.

u_dw.pfc_Update()Will be in a loop for all DataWindows that have an up-date pending. For every DataWindow in this event we’llcall the remote functioninv_update.of_update(this.DataObject,lblob_1, …)

w_main.pfc_EndTrans()Here we’ll call the remote functioninv_update.of_Commit(). Again it’s better to put this inw_main.

In this case will need declare an instance variablen_update inv_update in w_main and copy the proxy ofn_update to pfe_main.pbl.

Setting Link Order for UpdatingDataWindowsAs you know we need to set an update order, becausewhen the user creates a new record in the Master andthen in the Detail DataWindows, we have to update theMaster DataWindow first and then the Detail. But if theuser deletes a record from the Master DataWindow wehave to update the Detail DataWindow first and then theMaster. It will allow the user to update DataWindows inour forms in any order and save all the changes in one‘Save button’ click.

In this second method we can’t set the order for updatinglinked DataWindows as we did in the case of a statelesscomponent with one function and many blobs. In thatcase we could do it because we had one function and we

could do there what we wanted. Now every DataWindowis being updated from the pfc_update() event and to setthe right updating order we have two choices:

1. use the PFC linkage service or2. use w_main.of_SetUpdateObjects() function

I was able to adapt PFC’s 2-tier DataWindow Linkageservice to a 3-tier version. I had to drop this approachbecause we used Stored Procedures for updatingDataWindows. In this case we couldn’t use a trick thatPFC uses in the u_dw.SQLPreview() event to filter outINSERT, DELETE or UPDATE statements according tothe order of updating.

But we could use the functionw_main.of_SetUpdateObjects() for this purpose:

lpo_objs[1] = dw_1lpo_objs[2] = dw_2lpo_objs[3] = dw_3lpo_objs[4] = dw_4

return this.of_SetUpdateObjects(lpo_objs)

The order that DataWindows are defined in the lpo_objs[]array is the order they will be updated in.

To summarise: this approach will allow you to easily up-grade any of your application to a 3-tier model. It is verysimple, it allows Jaguar to handle DataWindow updatingon a one by one basis and not in a single 8 blob hit.

Page 17

PowerTimes

About the author

Jean Aeschbach is a seniorproduct manager for

StarTeam with Datasign AG in Basel/Switzerland.

He can be reached at [email protected].

PRODUCT OVERVIEW: OPTIMIZING SOFTWARE

DEVELOPMENT PROJECTS

by Jean Aeschbach

Introduction“High speed – high change” is today for many softwaredevelopment projects the name of the game, especially inthe E-Business area. In order to keep pace in such a highdemanding environment and to stay away from chaos, itis highly recommended to use well-known project man-agement principles combined with best-of-breed tools.

StarTeam from Starbase Corporation is a project oriented,collaboration toolset including configuration manage-ment, change management, task management and teamcommunication. It has been designed for ease of use andis based on the Internet as the underlying communica-tion infrastructure.

Also, the flexibility of the StarTeam model allows you tofinally manage all of your information assets, source codeas well as documentation, graphics and multimedia,through a single coherent system. StarTeam is thus idealfor all types of businesses and will help you optimise yoursoftware development projects.

StarTeam OverviewThe StarTeam product line is comprised of the StarTeamVirtualTeam Server and its clients: StarTeam, StarDisk,Universal Edition, and Web Connect. When theadministrator sets up the StarTeam VirtualTeam Server,he configures the server using the database of choice:Microsoft Access, Microsoft SQL Server, IBM DB2,Informix, Sybase SQL Server or Oracle.

Users can be located at one site or widely dispersed acrossthe globe. Users access the StarTeam VirtualTeam Servervia one of the clients:StarTeam, StarTeam Web Edition, Universal Edition,StarDisk or one of the supported IDEs.

StarTeam, a Windows application, provides an intuitiveGUI that displays the project, views, folders, files, etc.The tabbed panes make navigation and deployment easy,whether you’re working on bug fixes (change requests),product discussions (topics), work assignments (tasks)or developing code (files).

StarTeam integrates with many popular IDEs, forexample, Allaire Coldfusion, IBM VisualAge, InpriseDelphi, Microsoft Developer Studio, Oracle Developer,Rational Rose, Sybase PowerBuilder and Webgain VisualCafé.

It interoperates with PVCS and SourceSafe allowing you

Figure 1, StarTeam Architectural Overview

VSSArchive

StarTeam ClientWindows Interface

StarTeam ClientWindows Interface

StarDiskWindows Explorer Interface

StarDiskWindows Explorer Interface

StarTeam UniversalJava based Interface

StarTeam UniversalJava based Interface

IDE / SCC InterfaceIDE / SCC Interface

Custom ApplicationsCOM/Java using StarTeam SDKCustom Applications

COM/Java using StarTeam SDK

StarTeam Web EditionWeb Browser

StarTeam Web EditionWeb Browser

Oracle, SQLServer, Sybase,

DB2, ….

optional

ODBCDatabase

optional

Virtual TeamServer

PVCSArchive

Clients Projects RepositoryTCP/IP

StarTeamArchive

Page 18

PowerTimesto convert existing SCM projects to StarTeam. It also offersa command-line interface.

StarTeam Web Edition users access project repositoriesvia a standard web browser. It allows users to check filesin and out of a StarTeam, PVCS or VSS repository, aswell as, create, edit and report on change requests andtasks and participate in team discussions.

The Universal Edition makes the graphical user interfaceavailable on platforms that support Java version 1.1 orhigher. This allows Unix or Mac users to access theStarTeam repository.

StarDisk allows users to access file revisions over TCP/IP networks through a virtual StarDisk drive. StarDisk’sintegration with Windows Explorer provides transparentaccess to some of the benefits of StarTeam.

Customized clients can also be created using StarTeam’sSDK.

Basic StarTeam ConceptsIn the following paragraphs a more technical descriptionof the capabilities of StarTeam is given. Be aware thatthe mentioned concepts are valid for all processes suchas code development (files), bug fixes (change requests),product discussions (topics) and work assignments ( tasks)under a single integrated environment.

RepositoryThe backbone of the StarTeam system is the StarTeamrepository, which is supported by the StarTeamVirtualTeam Server. This repository is an object-orienteddata store that supports object versioning, linking andconfigurations. Any object (file, change request, topic,task), known as a StarTeam item, stored in the repositoryhas its history recorded so that a prior state of the itemmay be retrieved and restored. StarTeam items may belinked to any other item in the repository so that therelationships between the various information assets canbe maintained and used in your work processes.Configurations containing many items can be created,maintained and restored through the services of theStarTeam repository.

ProjectsStarTeam uses projects, views and folders to organize theitems stored in the StarTeam repository. A StarTeamproject is best thought of as a collection of closely relatedviews. Each view represents a configuration of items fromthe repository and can support a different line ofdevelopment on the same code base. Folders cluster itemsinto groups. For example, you might want to check outall the files in a folder to work on a particular feature ofyour product. However, there are no restrictions on itemsfound in different projects. The items in a repository canbe moved or shared between any views, regardless of the

Figure 2, StarTeam Windows GUI

Page 19

PowerTimesprojects the items and views are found in.Projects provide an additional layer of organization, butthey allow you provide a hierarchical structure for theviews as well as assign rights at the project level. Howprojects are used is largely up to you.

You might create a project for each product that yourcompany produces. Or, depending on how you build yourproduct, you might prefer to create a project for each of aproduct’s major components. Using a separate project foreach product components provide flexibility as eachcomponent can easily be labeled, branched, and sentthrough its own promotion model sequence.

ViewsWhen you open a StarTeam project, you must either acceptthe default (or main) view or select an alternate view.The default view for a project typically contains theconfiguration that is used for primary development.Additional views can be derived from, that is created basedupon this view, and can take on different behaviors. Theselected view presents the items found in a particularconfiguration.

Views typically have names such as Baseline, 4.0Maintenance, Special 4.0 for Australia, and 5.0 NewDevelopment. They represent configurations of items andsupport different development baselines on the same codebase. Views can be compared and merged. For example,you might want to merge files from both 4.0 Maintenanceand 5.0 New Development back into the Baseline vieweventually.

You can create and use views that:

• Dynamically show the source code anddocument changes of your project. This is thetypical use of the default (or main) view in aproject when the Current Configuration optionis specified from the View menu’s SelectConfiguration command. This dynamic viewshows all the items as they change and is usedfor collaborative development.

• Reference a subset of items found in the originalview. These are often called reference views. Anychange made in the new view changes the sameitem in the original view. This is because thesubset view contains references to the originalitems in the original view and does not branchwhen changes are made. Typically reference viewhas names such as Development View orDocumentation View, exposing only items ofinterest to, for example, developers or writers.

• Are read-only and based upon a specific stateof the original view. This is typically done forconvenience so that the revisions of items usedin product releases can be easily located. Forexample, a 4.1 Release view might be used to

rebuild 4.1 in the future or to allow a companythat wants to purchase your source code to reviewthat source code after signing a tentativeagreement.

• Permit branching of the items in the new view.This view can be used to modify the items foundin a specific view state without affecting the maindevelopment. This is typically done whencreating and maintaining a maintenancebaseline.

An important feature of a view is that you can reconfigureit to show the items as they existed in that view at anearlier point in time or based on a view label or associatedpromotion state. You roll back a view using the Viewmenu’s Select Configuration command. A rolled-backview is read-only, showing a precise state of the itemsand no longer permitting changes to them.

FoldersEach StarTeam view contains a folder hierarchy used toorganize its items. Folders reflect the logical organizationof the configuration represented by the view. Folderstypically have names such as Source Code, Schedules,and User Manuals. They group the items based on whoneeds to access them or on the closely related nature ofthe set of files in them. While folders can be organizedinto any hierarchy, the structure typically follows thestructure of the working folders that the files are checkedout to.

Folders can also be useful when you need to create differentconfigurations of shared items. You can share folders,files, change requests, tasks, and topics between andwithin views so long as the views use the same serverconfiguration. When a folder is shared, users of both viewscan access its contents, including child folders and theircontents.

Sharing folders can be an important part of setting up aview. For example, suppose all products use the company’sgeneral libraries to some extent. Even though thoselibraries are not maintained by the developers of a givenproduct, the product is based on some revision of thesource code in them and must be compiled with it.Therefore, some of the library folders should be sharedinto the product’s view.

View LabelsAnother feature of a StarTeam view is the view label. Aview label is used to identify static configurationscontaining specific revisions of items in a view. Whenyou create a view label, it stores a time stamp for theview. A view label gives you a static snapshot of thedynamic view that it was created in.

Page 20

PowerTimesBranching ViewsA common operation in software development is to createa new configuration that holds branched items based onsome prior static configuration. This is done whenever auser wishes to perform maintenance on a previous buildof the system but does not want to affect the currentdevelopment. StarTeam supports this through branchedviews.

Merging ViewsOften you will want to merge these independent brancheditems back into the original view or into another view.You can merge items from different views or even thesame view but from different folders. The StarTeam ViewCompare/Merge utility performs a complete comparisonof the folders, files, change requests, tasks and topics.

LinkingThe ability to link any item to any other item is a power-ful StarTeam feature. Many customers use this feature torecord the relationships between items such as require-ment documents (stored in files), specific change descrip-tions (stored in change requests), design discussions(stored in topics) and source code changes (stored in files).Since links can also be pinned (or attached) to specificrevisions of linked items, you have an environment thatprovides complete tracability.

More information on StarTeam including the downloadof the software is available atwww.datasign.ch or www.starbase.com.

Page 21

PowerTimes

About the author

Rolf André Klaedtke is anindependent consultant andsoftware developer with over15 years in the IT industry,

mainly working with IBM midrange systems. He isthe publisher of PowerTimes and has been the presi-dent of the Sybase and PowerBuilder User Group Swit-zerland. In 1996 and 1997 he has been the main or-ganizer of the Swiss PB Conference. Currently he ismainly working in AS/400 and web developmentprojects using Macromedia’s tools. You may write RolfAndré at [email protected].

This Article Is For You If...• you use MS-Outlook as your e-mail client or• you’ve heard about (or worse been the victim of) the

“I love you” or a similar virus or• you’re curious to know what the program

KIX32.EXE on your (Windows NT) system is about?

If not, then read on anyway as it is surely interesting!

A Live Virus AttackSome time ago, while working on site for a client, I hadthe “privilege” to assist in fixing a live virus attack. Oneof the users had inadvertently opened the attachment of amail received from an unknown user that promised a nudepicture of the tennis player Anna Kournikova.

Fortunately for the client, they were well organised andthe user immediately contacted IT staff to let them knowabout his error. Furthermore, on that same day, they hap-pened to have had a network specialist from their Euro-pean IT headquarters on site for some training.

The PC in question was immediately taken off the LANand then observed. The network specialist isolated thevirus and printed its source code, showing us its con-struction. It was not harmful in the sense that it didn’tdestroy any data, but nevertheless it destroyed all net-work mappings on the PC and tried to send itself to alladdresses in the address book. You can imagine the dam-age in a company with thousands of users! Cleaning thesystems alone takes up valuable time that would haveturned this virus attack into a major nightmare even withno data destroyed!

CountermeasuresThe mail received by the user had an attachment with aname in the form “picture.jpg”. Unfortunately, the realfile name was “picture.jpg.vbs” but the extension “vbs”didn’t show up, which seems to be the default on mostsystems. Unfortunately, Windows doesn’t show certainfile extensions, even if you tell it to. So, the user didn’tknow that he was not opening a JPG (picture) file, buthad instead just started a VBS (Visual Basic) script, withthe result described earlier.

To prevent users (and you) from such a – possibly fatal –error, it would help to link the file extension VBS to aninoffensive program like Notepad.exe, so that if a scriptis opened by error, it would not be executed, but displayedin Notepad.

Instead of doing this manually, you could use the scriptpublished at the end of this article.

What is KIX32.EXE ?The script can be executed using a program calledKIX32.EXE, which can be found on the Windows NTServer Resource Kit version 4.0. You can also downloadit for free from the website http://kixtart.org/ where youcan find more information too.

Another source of information is the online article “In-stalling and Using the KiXtart Login Processor Tool” thatcan be found at:http://support.microsoft.com/support/kb/articles/Q175/7/32.ASP.

Here’s a short description partly taken from that article:KiXtart is a login script processor and enhanced batchlanguage for Windows NT. You can do all sorts of thingswith its free-format scripting language like conditionallydisplay information, set environment variables, start pro-grams, connect to network drives and read or edit theWindows registry, etc.

The script following this article does the latter: it editsthe registry to prevent VBS scripts from being executed.Instead, it opens an editor that shows the content of thescript. To let the KiXtart tool do that for you, simply startit by typing in the command

KIX32 vbsfix.kix

vbsfix.kix being the name of the script file attached. Ifyou don’t want to type the script file you can either copyit from this article or download it from the sitewww.powertimes.com under Resources. I have also in-

I LOVE YOU - NOT REALLY

by Rolf André Klaedtke

Page 22

PowerTimescluded a sample text file with a VBS extension(text.txt.vbs). Once you have executed the above com-mand successfully, you can double-click this sample fileand it should open in the editor, otherwise you’ll get anerror message announcing a VBScript compilation error.

Script to attach VBS files to Notepad.exe by default

; Subroutine : fix for VBS virus files - set edit as default; vbsfixIf EXISTKEY(“HKEY_CLASSES_ROOT\VBEFile”)=0$ShellDefault=READVALUE(“HKEY_CLASSES_ROOT\VBEFile\Shell”,””)If $ShellDefault <> “Edit”$rc=WRITEVALUE(“HKEY_CLASSES_ROOT\VBEFile\Shell”,””,”Edit”,”REG_SZ”)$rc=WRITEVALUE(“HKEY_CLASSES_ROOT\VBEFile\Shell\Edit”,””,”&Edit”,”REG_SZ”)SelectCase $OS_version=”W9X”$rc = WRITEVALUE(“HKEY_CLASSES_ROOT\VBEFile\Shell\Edit\Command”,””,”%windir%\Notepad.exe %1",”REG_SZ”)Case $OS_version=”NT4"$rc = WRITEVALUE(“HKEY_CLASSES_ROOT\VBEFile\Shell\Edit\Command”,””,”%SystemRoot%\System32\Notepad.exe%1",”REG_SZ”)Case $OS_version=”W2K”$rc = WRITEVALUE(“HKEY_CLASSES_ROOT\VBEFile\Shell\Edit\Command”,””,”%%SystemRoot%%\System32\Notepad.exe%1",”REG_EXPAND_SZ”)EndselectEndifEndifIf EXISTKEY(“HKEY_CLASSES_ROOT\VBSFile”)=0$ShellDefault=READVALUE(“HKEY_CLASSES_ROOT\VBSFile\Shell”,””)If $ShellDefault <> “Edit”$rc = WRITEVALUE(“HKEY_CLASSES_ROOT\VBSFile\Shell”,””,”Edit”,”REG_SZ”)$rc = WRITEVALUE(“HKEY_CLASSES_ROOT\VBSFile\Shell\Edit”,””,”&Edit”,”REG_SZ”)SelectCase $OS_version=”W9X”$rc = WRITEVALUE(“HKEY_CLASSES_ROOT\VBSFile\Shell\Edit\Command”,””,”%windir%\Notepad.exe %1",”REG_SZ”)Case $OS_version=”NT4"$rc = WRITEVALUE(“HKEY_CLASSES_ROOT\VBSFile\Shell\Edit\Command”,””,”%SystemRoot%\System32\Notepad.exe%1",”REG_SZ”)Case $OS_version=”W2K”$rc = WRITEVALUE(“HKEY_CLASSES_ROOT\VBSFile\Shell\Edit\Command”,””,”%%SystemRoot%%\System32\Notepad.exe%1",”REG_EXPAND_SZ”)EndselectEndifEndifRETURN

By the way, if you really need to invoke a VB Script, thenyou may still do so by opening it on purpose from theengine intended.

I hope this article helps you to protect your system frompotentially dangerous scripts. Of course, the first thingnot to do is to open mail attachments from unknownsources.

For your convenience, you can download the followingscript from my website at http://www.raksoft.ch under“Resources”.

Page 23

PowerTimes

About the author

Please see on the titlepage for the author’sbio.

We would like to thank Daniel Will-Harris for the per-mission to republish these tips that have been publishedin his newsletter, the FuseLetter. If you’d like to re-ceive this interesting newsletter (it’s free, as isPowerTimes), then go to http://www.fuseletter.com tosign up.

LOOK WHAT’S OUT THERE

Websites introduced by Daniel Will-Harris

The best Clip-Art - for free (and almost free)If you're looking for truly great clip art that doesn't looklike clip art and doesn't cost an arm and a leg, look nofurther than http://www.nvtech.com 's Image Task Force.It's a truly amazing collection of clip art that's so good itdoesn't look like clip, just art.

(Tip: Choosing images of the same style helps you presenta more consistent image--and makes your graphics lookmore professional--as if one artist created them all, andTask Force has a feature that lets you find images withthe same style).

The collection comes with software that lets you organ-ize, search, even edit colors. You can download their ex-cellent image organizer for free--then download sevengroups of free art. Once you do, you will certainly wantto buy the entire package. For a mere $39.95, you getover 35,000 top quality images.

I highly recommend this collection, to designers--and non-designers alike! http://www.nvtech.com

Working with Design Clients (including your-self)As soon as you decide to redesign your site, or someoneelse asks you to redesign theirs, you have just enteredinto a relationship, my friend. And like any relationship,there are problems that crop up.

I recently read some quotes from designers about this re-lationship, and I though they were so right that you mightenjoy reading them, too. Linda Hemenway([email protected]), an instructor of Computerand Information Sciences at Santa Rosa Junior College (http://www.santarosa.edu/~lhemenw ) asked some pro-fessionals to answer questions for her "Business of WebDesign" class. Santa Rosa Junior College's training pro-gram stresses the use of the Web as a platform to deliversolutions to business problems.

The answers are revealing, educational, and worth yourwhile whether you're a designer, or a client.http://gracie.santarosa.edu/web_training/client-des.html

See who links to youWant to find out what sites link to yours? Here are twoeasy ways: On http://www.google.com - in the search box,type LINK: followed by your URL, like thislink:www.efuse.com -- you'll see how many sites link toyou, and the sites themselves.

Fast search: My favorite search engine is http://www.alltheweb.com - to find sites that link to yours here,click on the "Advanced search" link (or go directly to:http://www.alltheweb.com/cgi-bin/advsearch ), then in theboxes below choose: (from the drop down menu) MustInclude then type your web site address (from the dropdown menu) in the link to URL

It's good to use both these sites, because they have differ-ent databases. Google found 1,650 sites that linked toeFuse, while AlltheWeb found 2,101.

Netwhistle.com: It blows when your site goesdownThe more dependent you are on the web, the scarier it getswhen your site isn't working. Unless you're going to sitthere checking your own site, every few minutes, it's hardto tell when it's down.

I just read that "only 4% of dissatisfied customers will tellyou, the other 96% will just go away and never come back."So what about people who try to get to your site, but can't,because it's down. This happens to everyone (I know, it'shappened to me). And the sooner you know about it andtake action, the better.

Now there's a new, free way to monitor your site (and e-mail accounts) once per hour. http://www.netwhistle.comchecks your site 24/7, and sends alerts to either e-mail orpagers when there's a problem.It's a useful way to make sure your site visitors and poten-tial customers can actually get to your web site--and sendyou e-mail.

If you don't even want to wait an hour to hear about aproblem, then you can have it check every 5 to 30 min-utes. The more often it checks, the more it costs, but evenso, the cost is reasonable, from $28.95 to $48.95 a month.If you do business on your site, it's worth it.

So try it now--the one hour alert option is free, and a greatway to find out how reliable your system really is.

Page 24

PowerTimesPOWERTIMES: WHAT’S COMING ON THE WEBSITE

AND IN THE JOURNAL

by the editors

www.PowerTimes.com - what’s newYes, we admit that there has not been going on a lot onour website after the last redesign. We were all very busy- but behind the scene a lot of work has been done.

So, what will be coming ? Look out for the following:

PollsVery soon you’ll be able to share your opinion withothers and see the results online on our site. And you’lleven have the possibility to submit your own ques-tions to the PowerTimes community.

Event CalendarEvent organizers will have the possibility to enter theirevent in our database, which will be searchable bycountry, city, topic, etc. This can be user group meet-ings or technical conferences. That way, site visitorsknow what’s going on in what place. This can be es-pecially helpful if you’re on a trip in a foreign coun-try or city and want to get information about the localevents.

Searchable database of authors and articlesThis has been announced on our website already: you’llhave the possibility to search our database for an au-thor or an article or by keyword.

LinksThere will be a dynamic link section: in fact, the linksare stored in a table which allows for categorizationand searching. We will also add a feature that allowsyou to submit your most interesting links. These willbe reviewed prior to publication to insure that onlyrelevant links will be listed.

Coming articlesCurrently, articles on the following topics have been an-nounced or promised:- Knowledge Management- Active Server Pages- Microsoft’s .NET architecture- A review of PowerBuilder 8

Looking for AuthorsThis has been a constant: we’re allways looking for arti-cles, respectively authors who are willing to write forPowerTimes. Of course, the fact that we unfortunatelycan’t pay for articles plays a certain role - but on the otherhand, we don’t charge for subscriptions either, so it’s notthat we’re keeping all the money for ourselves. Rather,we spend our spare time and money in this project.

Simply put: without authors, there’s no PowerTimes. Eventhousands of subscribers wouldn’t change anything onthat rule.So - if you know something that others may not know butbe interested in - talk to us. We’d like to discuss yourideas and will provide as much help as we can. If youdon’t feel secure or need translation assistance - again,let us know, we are sure to find a way.

Please contact either Rolf André Klaedtke [email protected] or Mark Lansing [email protected] if you are interested in con-tributing something to PowerTimes. We can’t promiseyou fortune, but all the glory will be yours !

Other plansWe have in mind to create a new column called “Intro-ducing...” where we’d like to introduce PowerTimes read-ers to you. In fact, PowerTimes has subscribers all overthe world and we think it would be very interesting toknow a little about other people in other countries.

There will be a form online where readers can providesome information and if picked by the editors, they willsoon be introduced in these pages.

While this doesn’t sound very technical in a technicaljournal, we believe that you will agree with us that hu-man beings are very important and that it can indeed bevery interesting knowing more about them.

Oh, there will also be something technical: in fact, be-sides introducing readers (and why not authors ?) to you,we’ll also ask them to tell us their favorite internet links,technical books or even provide a short technical tip.

Something to win...Last but not least, there will be something to win: we willorganize a prize draw towards the end of the year. Therewill be a prize for one of the readers that we introduce toyou.

Furthermore, you will have the possibility to vote for yourfavorite author/article. The winner will receive a smallrecompensation.

Finally, we will draw a prize among all the authors. Asmentioned earlier we can’t pay for all the articles but we’llpick at least one and will send him a small gift. It willdefinitely be a surprise, but we will let you know on time,don’t worry.