contents looking back techwave ’99 · 2015-01-28 · page 1 september/october 1999 price: us$...

39
Page 1 SEPTEMBER/OCTOBER 1999 PRICE: US$ 7.50 VOL. 6 / ISSUE 5 JOURNAL FOR PEOPLE INTERESTED IN CLIENT/SERVER AND INTERNET APPLICATION DEVELOPMENT WITH THE SYBASE TOOLSET LOOKING BACK AT TECHWAVE ’99 by Ken Howe Having attended three previous Sybase conferences (Powersoft ’96 in Orlando, Powersoft ’97 in Nashville and ISUG 98 in Hamburg), I thought I’d start out with a little recap before plunging into Techwave ’99 and com- pare this conference to the previous three. At Orlando ’96 PowerBuilder 5.0 was the current PowerBuilder release and Distributed Power-Builder was the theme. PowerBuilder 6 was demonstrated with its new view technology, but overall the people I talked to were getting tired of PowerBuilder and watching all the other tool vendors catch up with it. At Nashville ’97 I felt there was no underlying theme. The Jaguar people were there with the “Jaguar is great, what PowerBuilder? Never heard of it mate!” slogan. Back then we had PowerDynamo, Net Impact Studio and PowerBuilder 6 but no real underlying message. Sybase where still having digestion problems with Powersoft. At Hamburg ’98 I felt that the ISUG conference was a poor shadow of the full PowerBuilder Conference of North America; all the information was second or third hand and there was nothing new to show. Net Impact Studio had grown up a bit, but everyone was holding their breath for the next major releases. Techwave ’99 was the combination of the ISUG Europe conference, ISUG North America conference, Powersoft Conference and the Middleware Technical summit. The conference was held at the Disney World resort in Orlando and it was great to be back at Disney where the people really know how to manage a large crowd. The facilities at the Disney hotels are excellent, I stayed in the Beach Resort and Yacht Club and the hotel was great. The break- fast was pretty standard conference fare, such as bagels, muffins fruit and cereals. The lunch provided was the best conference food I had eaten at a Sybase conference, or any other conference, with both Quality and Quantity being at the right level. Every evening after the last ses- sion there was normally free food and drinks in the ex- hibit hall or at various parties held around the resort. For those people trying to attend on a budget you do not have Contents Editorial: Looking Back at TechWave ‘99 by Ken Howe EASy Does IT: Transaction Management in EAServer 3.0 by Bill Heys on Page 3 PFC Place: PBVM and PFC by Boris Gasin on Page 9 Distributed Ways: Accessing Jaguar Compo- nents from COM Clients by Sean Flynn on Page 12 PowerJ Way: Enterprise Java Development and Deployment by Greg Burns on Page 15 Know HOW: HOW and Jaguar: write once run anywhere… really by Bernie Metzger on Page19 Parser Power: Helping you to Understand your Applications by Olivier Bonsignour on Page 22 Impressum on Page 25 Product Review: WizTom Translation Software reviewed by Arthur Hefti on Page 27 Little Helpers: Bubble Help by Cary Hakes reviewed by Arthur Hefti on Page 30 User Group Section on Page 32

Upload: others

Post on 14-May-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1

SEPTEMBER/OCTOBER 1999 PRICE: US$ 7.50 VOL. 6 / ISSUE 5

JOURNAL FOR PEOPLE INTERESTED IN CLIENT/SERVER AND INTERNET

APPLICATION DEVELOPMENT WITH THE SYBASE TOOLSET

LOOKING BACK AT TECHWAVE ’99by Ken Howe

Having attended three previous Sybase conferences(Powersoft ’96 in Orlando, Powersoft ’97 in Nashvilleand ISUG 98 in Hamburg), I thought I’d start out with alittle recap before plunging into Techwave ’99 and com-pare this conference to the previous three.

At Orlando ’96 PowerBuilder 5.0 was the currentPowerBuilder release and Distributed Power-Builder wasthe theme. PowerBuilder 6 was demonstrated with its newview technology, but overall the people I talked to weregetting tired of PowerBuilder and watching all the othertool vendors catch up with it.

At Nashville ’97 I felt there was no underlying theme.The Jaguar people were there with the “Jaguar is great,what PowerBuilder? Never heard of it mate!” slogan. Backthen we had PowerDynamo, Net Impact Studio andPowerBuilder 6 but no real underlying message. Sybasewhere still having digestion problems with Powersoft.

At Hamburg ’98 I felt that the ISUG conference was apoor shadow of the full PowerBuilder Conference of NorthAmerica; all the information was second or third handand there was nothing new to show. Net Impact Studiohad grown up a bit, but everyone was holding their breathfor the next major releases.

Techwave ’99 was the combination of the ISUG Europeconference, ISUG North America conference, PowersoftConference and the Middleware Technical summit. Theconference was held at the Disney World resort in Orlandoand it was great to be back at Disney where the peoplereally know how to manage a large crowd. The facilitiesat the Disney hotels are excellent, I stayed in the BeachResort and Yacht Club and the hotel was great. The break-fast was pretty standard conference fare, such as bagels,muffins fruit and cereals. The lunch provided was thebest conference food I had eaten at a Sybase conference,or any other conference, with both Quality and Quantitybeing at the right level. Every evening after the last ses-sion there was normally free food and drinks in the ex-hibit hall or at various parties held around the resort. Forthose people trying to attend on a budget you do not have

Contents

Editorial: Looking Back at TechWave ‘99by Ken Howe

EASy Does IT: Transaction Management inEAServer 3.0by Bill Heys on Page 3

PFC Place: PBVM and PFCby Boris Gasin on Page 9

Distributed Ways: Accessing Jaguar Compo-nents from COM Clientsby Sean Flynn on Page 12

PowerJ Way: Enterprise Java Developmentand Deploymentby Greg Burns on Page 15

Know HOW: HOW and Jaguar: write oncerun anywhere… reallyby Bernie Metzger on Page19

Parser Power: Helping you to Understandyour Applicationsby Olivier Bonsignour on Page 22

Impressumon Page 25

Product Review: WizTom Translation Softwarereviewed by Arthur Hefti on Page 27

Little Helpers: Bubble Help by Cary Hakesreviewed by Arthur Hefti on Page 30

User Group Sectionon Page 32

Page 2

to expense an evening meal! The best party by far wasthe Star Trek party, great atmosphere, food, music,freebees and of course enough beer to float a large ship.My ears where ringing for days afterwards!

So that’s the appetizers and desert dealt with, onto themain course!

The opening session started with the usual lights, lasersand effects that always leave you feeling some what letdown when the effects stop and the speaking starts. Themain thrust of the presentation was that Sybase is back,they are making more money than you can “shake a stickat” and that they are once again a financially viable com-pany. This is good news for us because it means peopleare buying Sybase products again and that the marketwill hopefully expand...

I attended the Wednesday Developer Session where someof the new PowerBuilder 8 (slated for mid-next year) fea-tures were shown, such as the interface integration be-tween PowerBuilder and PowerSite. This level of toolintegration was a dream for Microsoft and Sybase seemto be pulling it off. The web enablement of an existingapplication was demonstrated, but by this point in theconference I had already attended many sessions and sowas not as impressed as I could have been. But I thinkthe main thing that struck me about the session was thenumber of people on the tech desk. At previous confer-ences there was always a group of people: one did thePowerBuilder, one did the Jaguar, one did the PowerSite,and another pulled it all together. At this session therewas one person who did it ALL! This is a testament to thelevel of integration that Sybase have achieved with theirproducts, that finally Sybase have digested Powersoft andthat all the Sybase development teams are now pulling inthe same direction!

The training sessions I attended where mainly dictatedby the project that I am about to start at work, which is aredevelopment of a PowerBuilder 6.5 Client Server ap-plication into N-Tier with both thin and rich clients run-ning the same business logic hosted in a TransactionServer. Therefore I attended a lot of sessions dealing withEAServer and the Web DataWindow. For those peoplewho have not attended a conference before, there are AMand PM sessions. The AM sessions are normally fullSybase courses that you can attend outside of the confer-ence, but condensed with no hands on sessions. This isgreat way to attend one or two Sybase courses very cheaply.If you compare the cost of attending the courses at a train-ing center to the conference, it is a very cost effective wayof receiving training. For me the best sessions are thePM sessions, and there are always five sessions that Iwant to attend which are running at the same time! ThePM sessions are short and to the point covering a specifictopic. They are normally presented by the top expert inthe field for the topic at hand. For example, I attendedthe Web DataWindow session given by Jeff Calow, theguy who actually wrote the Web DataWindow. This is

also a great opportunity to ask difficult questions to anexpert for which you very rarely get the answer “I’ll haveto get back to you”!

The exhibit hall was different than in previous years, al-though it was about the same size as normal and the free-bies were as good as ever. However, I still felt there wassomething missing. I realized that it was because I didnot recognize many of the vendors at the show. Thinkingabout this after the show made me realise that this is prob-ably because those well known vendors are exactly that(well known), and if most people already know who youare and what products you have then there is no need toattend, but if you are a new vendor to the Sybase marketthen you need to be at the show. Maybe this is also a goodexpansion sign.

The Sybase stand was excellent with some nice technol-ogy being shown. The new Training Web Site is greatand even has the training schedule for Europe! Sybaseusually launch North America and then 12 months lateradd support for other parts of the world. The freebee beanieanimals where well received back at the office althoughthe frog has taken up bungee jumping from an elasticband rope! Sys-Con Radio were in the exhibit hall inter-viewing people from all levels of the PowerBuilder com-munity and you can listen to my interview on their website.

Overall, the underlying theme of the conference wasEAServer and the integration of the Sybase tools. Theconference had a buzz about it with most people excitedabout the new tools and the direction Sybase is headed.This is something I had not experienced at any of theprevious Sybase conferences.

If you have never attended the conference before then Istrongly recommend you start working on your boss now;you can easily write a one page cost justification based onthe AM training sessions alone.

And lastly, the conference was a great opportunity to putfaces to a lot of the names you see in the PowerBuildercommunity. It was great to see y’all and I hope you enjoyyour PBDR.COM T-shirts! The conference is once againback at Disney World next year, so see you all there!

Ken Howehttp://www.pbdr.com

From the editors: We’re very pleased to welcome thePBUGs of Albany NY, Oregon, Oklahoma, and Torontoto the growing family of PowerTimes subscribers. Theirsubscriptions are generously sponsored by Client ServerGroup, Inc. and Metacorp Strategies International forOregon, Rattan Consulting for Oklahoma andSoftApproach for Toronto. More details on these usergroups can be found in the user group section.

Page 3

IntroductionTransaction management is one of the most importantelements of good application architecture and design. Inthis article, I will describe Transaction Management withEnterprise Application Server and show how this willaffect your component and application design.

Transaction Management Topics• Introducing Transactions• Transaction Management in Traditional Client/

Server Applications• Transaction Management in Jaguar• Component Transaction Properties• TransactionServer Object• Transaction State Primitives• Stateful vs. Stateless Components• Component Deactivation• Connection Management• Transaction Co-ordinators• Component Design• Summary

Introducing TransactionsA transaction is comprised of one or more SQL state-ments grouped together into an atomic unit of work thatmust succeed or fail as a whole. By grouping multipleSQL requests into a single unit of work, it is possible toensure database consistency. Proper transaction manage-ment ensures that all databases updated by an applica-tion are always left in a consistent state.

Databases use transactions to implement isolation. Allchanges made by one user within a transaction should beisolated from changes made by other users running si-multaneously.

Proper transaction design and management is necessaryto maximize the concurrency of an application. Withoutproper transaction management, updates made by one usermay cause long-duration locks to be placed on large num-bers of rows in the database. Until these locks are re-leased, other users will be unable to access or update theserows, and may even be put into extended wait periods. Toincrease concurrency, one must minimize the scope andduration of transactions, while at the same time beingcareful to maintain database consistency.

Transaction Management in Traditional Cli-ent/Server ApplicationsIn traditional client/server 2-tier applications, transac-tion management is the responsibility of the client appli-cation. When an application connects to the database, anew database transaction is started. The current transac-tion ends and a new transaction begins when the applica-tion sends a COMMIT or ROLLBACK request to thedatabase.

To support transaction management, a database uses acombination of logging and locking. All changes madeto a database are written to a log file. When a row isdeleted, an image of the deleted row is written to the log.When a row is changed, an image of the row beforechanges are applied is written to the log. When a newrow is inserted, the primary key of the new row is writtento the log.

All database updates made by an application remain in apending state until the outcome of the transaction isknown. To ensure proper isolation, the database placeslocks on updated rows (or pages). These locks preventother applications from reading or updating a row whileit is in an update pending state.

When a transaction is committed, all database changesmade by the application since the start of the transactionare made permanent, and all update locks are released.The current transaction ends and a new transaction be-gins.

When a transaction is rolled back, all database changesmade since the start of the transaction are removed fromthe database. Using the log, the database is returned to itsstate when the transaction was started, and all updatelocks are released. The current transaction ends and anew transaction begins.

Transaction Management in JaguarResponsibility for transaction management in Jaguar shiftsfrom the client application to the Jaguar TransactionManager. Jaguar changes how transactions are managedand controlled. Rather than being scripted, transactionmanagement becomes a deployment-time componentproperty. The Jaguar Transaction Manager allows you to

TRANSACTION MANAGEMENT IN EASERVER 3.0By William B. Heys

Page 4

group database updates performed by multiple compo-nents into a single atomic unit of work.

Components utilizing Jaguar’s transaction managementparticipate in implicit transactions. Rather than directlycontrolling the outcome of a transaction using COMMITor ROLLBACK database commands, a component voteson the outcome of a transaction by invoking transactionstate primitives.

If a component does not participate in implicit transac-tions, it can explicitly manage its own transaction by is-suing COMMIT and ROLLBACK database commands.

Component Transaction PropertiesJaguar components have a transaction support propertygoverning how the component participates in Jaguar trans-actions. The transaction support property has one of thefollowing values:

• Transaction Not Supported• Supports Transaction• Requires Transaction• Requires New Transaction

Transactions currently running within an implicit Jag-uar-managed transaction are characterized as transac-tional components. Components that are not currentlyrunning within an implicit transaction are non-transac-tional.

When a component specifies a transaction is not sup-ported, it never runs in an implicit transaction managedby Jaguar, and must manage its own transactions explic-itly.

A component that supports a transaction may or may notparticipate in an implicit transaction. If the component isinvoked by a transactional component, it will participatein the invoking component’s transaction. If the compo-nent is invoked directly by the client or by another non-transactional component, it will not be part of a transac-tion.

A component that requires a transaction will always par-ticipate in an implicit transaction. If the component isinvoked by a transactional component, it will participatein the invoking component’s transaction. If the compo-nent is invoked directly by the client or by a non-transac-tional component, it will start a new transaction.

When a component requires a new transaction, it willalways start a new transaction regardless of how it is in-voked. If the component is invoked by another transac-tional component, the invoking component’s transactionwill be separate from the invoked component’s transac-tion.

TransactionServer ObjectPowerBuilder provides a special transaction service con-text object called TransactionServer. To use Jaguar’s im-

plicit transaction management, components must createa TransactionServer object. First declare an instance vari-able of type TransactionServer:

Protected:TransactionServer its_transactionserver

Next, create the TransactionServer object in the activateevent of the component using the GetContextService func-tion:

this.GetContextService &“TransactionServer”, &its_transactionserver)

The TransactionServer object should be destroyed in thecomponent’s deactivate event.

Transaction State PrimitivesComponents participate in implicit transaction manage-ment by invoking transaction state primitives, which aremethods of the Transaction Server object. These primi-tives are:

• CompleteWork• RollbackWork• ContinueWork• DisableCommit• InTransaction• IsRollbackOnly

Each of these transaction primitives has correspondingmethods of the TransactionServer object. In PowerBuilder,these methods are:

• SetComplete• SetAbort• EnableCommit• DisableCommit• IsInTransaction• IsTransactionAborted

Transaction state primitives serve two functions. First,they are used are used by a component in place of SQLCOMMIT and ROLLBACK requests to vote on the suc-cess or failure of the transaction. Second they indicatewhether the component should be deactivated or remainbound to the client.

The first two state primitives, CompleteWork(SetComplete) and RollbackWork (SetAbort), vote on thesuccess or failure of the transaction and cause the com-ponent to be deactivated.

The second two state primitives, ContinueWork(EnableCommit) and DisableCommit (DisableCommit)are only used by a component to vote on the success orfailure of the transaction, but do not cause the compo-nent to be deactivated.

The last two state primitives allow a component to querythe state of its transaction. To determine whether the cur-rent method is running within a transaction, it calls theInTransaction primitive (IsInTransaction). To determinewhether the transaction has already been aborted, it in-

GET YOUR WEB APPLICATIONS

ROLLING, WITHOUT ALL THOSE

PESKY IN-BETWEEN STEPS.

©1999 Sybase, Inc. All rights reserved. All trademarks are the property of their respective owners.

Introducing PowerBuilder 7.0 and Enterprise Application Server 3.0. Togetherthey offer the fastest, easiest way to assemble, test, and deploy scalable, thinclient applications for the Web. You not only take advantage of a highly productive development environment that leverages your existing skill setsand technology. You’ll also deploy more scalable, more secure applicationsfrom Web to N-tier architectures. It all adds up to the most powerful wayto take your business to the Web. For details on EAServer and PowerBuildercall 1-800-8-SYBASE, or visit www.sybase.com/sdn.

,-

,

,

Page 6

vokes the IsRollbackOnly primitive(IsTransactionAborted).

Individual components can only vote for the success orfailure of a transaction. The transaction does not end un-til the root component of the transaction is deactivated.At that time, the votes issued by participating compo-nents are counted. If any no vote is received, the transac-tion is aborted and databases changes are rolled back. Ifonly yes votes are received, the transaction succeeds anddatabase changes are committed.

Stateful vs. Stateless ComponentsA stateful component maintains information about a cli-ent across method invocations. Typically stateful compo-nents remain bound to a client and store state informa-tion in properties or instance variables. While bound to aparticular client, a stateful component cannot be sharedor used by any other client.

Stateless components are deactivated and unbound froma client following each method call. Because statelesscomponents do not store information in properties or in-stance variables across method invocations, they can bereleased reused by other clients more quickly.

There are many disadvantages to stateful components.Stateful components have longer lifetimes and requiremore resources than stateless components. More instancesof a stateful component must be created to support a givennumber of clients.

Stateful components also tend to cause an increase ofnetwork traffic. A client may invoke several methods onthe same component instance to change or retrieve infor-mation saved in its instance variables. For example, witha stateful component, a client may call one method toretrieve data from the database into a datastore in thecomponent. Without releasing the component, the clientwill subsequently invoke additional methods to bring thisdata from the datastore back to the client. In order tomake the component stateless, the data must be retrievedand returned in a single method invocation.

Applications built with stateless components will be morescalable than applications built with stateful components.Stateless components are better able to take advantage ofserver clusters, load balancing, and the automatic failoverfeatures of Jaguar.

Component DeactivationStateless components can support early deactivation. Suchcomponents are automatically deactivated when a methodreturns. To enable early deactivation a component mustbe stateless and must set the deployment-time propertyfor automatic demarcation/deactivation to true.

A stateful component must tell Jaguar when it can bedeactivated. If the component participated in implicit

transactions, the component invokes transaction primi-tives SetComplete or SetAbort to cause deactivation. If acomponent must remain bound to a client, it alternativelyinvokes the transaction primitives EnableCommit orDisableCommit. Stateless components are also deactivatedwhen a method returns after invoking the SetCompleteor SetAbort methods.

Connection ManagementJaguar can maintain connection caches which are poolsof database connections. Rather than physically connectand disconnect from a database, a component can requesta connection from the connection manager. If a connec-tion is available in the pool, it will be reused. Otherwise,a new physical connection is created.

When such a connection is released by a component, it isreturned to the pool, but not physically disconnected fromthe database. The connection is now available for reuse.

Connection caching improves performance by reducingthe total number of physical database connections. Con-nection caching is also necessary if you want Jaguar tomanage transactions.

Transaction Co-ordinatorsJaguar supports two transaction co-ordinators. The de-fault transaction co-ordinator is Jaguar’s Shared Connec-tion co-ordinator. With the Shared Connection co-ordinator, a component must use a database connectioncache. By using a connection cache, Jaguar ensures allcomponents participating in the same implicit transac-tion also use the same physical database connection.

Jaguar also supports Microsoft’s Distributed TransactionCo-ordinator (DTC). The DTC supports transactionsspanning multiple database connections using 2-phasecommit. In order to use DTC, you must be using Win-dows NT, ODBC, and a DTC-compliant database. At thecurrent time, only Microsoft SQL Server is DTC-compli-ant.

In the future, Jaguar will support additional transactionco-ordinators. The Java Transaction Server (JTS) and theCORBA Object Transaction Server (OTS) will be sup-ported. In addition, Jaguar will support Transarc Encina’s2-phase commit process.

Component DesignWhen illustrating transaction management, almost eve-ryone seems to use the ATM example. In this example, acustomer wishes to transfer some money from one ac-count to another. Let’s say the customer wants to transfer$100.00 from his checking account to his savings account.The application probably needs a method to withdrawmoney from one account and another method to depositmoney to the second account. A third method would cre-ate an audit trail of the transfer transaction.

Page 7

An initial design might involve two classes. The firstwould be an account class with two methods, Withdraw() and Deposit (). The second would be a log class withone method, Log ().

If this was a two-tier client/server application, the appli-cation might instantiate two instances of the account class(one for the checking account and one for the savingsaccount) and one instance of the log class. Psuedocodefor this transaction might look something like this: Integer ll_rc Decimal ld_amount Connect using SQLCA; ld_amount = 100.00 li_rc = AccountFrom.Withdraw (ld_amount) IF li_rc > 0 THEN li_rc = AccountTo. Deposit (ld_amount) END IF IF li_rc > 0 THEN li_rc = Log.Log (AccountFrom.Nbr, &

AccountTo.Nbr, ld_amount) END IF IF li_rc > 0 THEN Commit Using SQLCA; ELSE Rollback Using SQLCA; END IF Disconnect Using SQLCA;

Next, we deploy these components to Jaguar. Since wewant one transaction to encompass all three methods,Withdraw (), Deposit (), and Log (), we deploy both com-ponents with transaction support. Start by setting bothcomponents to Requires Transaction. What happens whenthe client application instantiates two account componentsand one log component? Each will start and run in itsown transaction. Whenever a component is instantiatedby the client, it cannot participate in the same transac-tion with other components instantiated by the client.

To solve this problem, create a third component for thecustomer. This component would have one method, Trans-fer. The customer component should be deployed to Jag-uar with the Requires Transaction setting.

The client application instantiates only the customer com-ponent. The customer component becomes the root in-stance of a single Jaguar transaction. The customer com-ponent becomes like a container object and instantiatesthe two account components and the log component. Sincethe customer component is running in a transaction whenit creates the account and log components, they run withinthe customer’s transaction.

The client application calls the customer component’sTransfer method, passing the transfer amount, and twoaccount numbers. The transfer method, in turn, calls theWithdraw method for the first account and the Depositmethod for the second account and finally the Log methodfor the log component. All three method invocations willbe part of a single atomic transaction.

A benefit of implementing the Log method in its owncomponent is flexibility in the design of the transaction.

To separate the Log method from the transaction involv-ing the Withdraw and Deposit methods, simply changethe log component’s transaction support from RequiresTransaction to Requires New Transaction. The Withdrawand Deposit methods remain as part of one transactionwhile the log method becomes a second separate transac-tion.

SummaryWith Enterprise Application Server components, trans-action management is very different from traditional cli-ent/server applications. Because of these differences, youwill want to design your components differently whenyou deploy them to Jaguar. Since transaction support isnow set at the component level with a deployment-timeproperty, rather than controlled in scripts, you will prob-ably want to design smaller, simpler, more granular com-ponents.

Most of us probably were not aware of the benefits ofstateless components when we designed business objectsfor 2-tier client/server applications or DistributedPowerBuilder. Designs incorporating stateless compo-nents and connection caches can take advantage of in-stance pooling, early deactivation, and implicit transac-tion management resulting in more flexible, scaleable,higher performing applications.

?Bill Heys (CPD, CPI) is a Senior Consultant atWhittman-Hart, Inc. in Lexington, MA. Bill spokeat the Sybase TechWave conference in Orlando andwill be speaking at German PowerBuilder UserGroup conference in Stuttgart on October 18 and atthe Swiss Sybase and PowerBuilder User Groupmeeting in Zurich on October 21. You may writeBill at [email protected].

Name

Company

Function Department

Phone Fax

E-Mail

For More Information Fax back this reply, or call our sales team.

Phone: 041 760 5071 Fax: 041 760 1707

SYAP AG, Dorfstrasse 38, Baar CH-6340.Phone: 041 760 5072 Fax: 041 760 1707 Web Site: www.syap.ch

Page 9

CuriosityRecently, while surfing the web, I stumbled upon a sitewith step-by-step instructions on how to disassembleFurbies. Remember Furbies? Those fuzzy toys every kidwanted last Christmas? The web is full of individuals withcolourful personalities and this one could not resist thetemptation of seeing what made the loveable creaturestick. While that specific site got a little strange, it didremind me of an incident from my past. One Mondaywhen my office-mate and I came back to work we discov-ered two brand new shiny telephones. It only took us afew minutes to figure out how to take the faceplate offand that’s when the light bulb went on. In no time I wason the lookout while my accomplice was switching thephone buttons in our neighbour’s office. We could hardlycontain ourselves giggling in anticipation, so after he camein we gave him 10 minutes and then peeked into the door-way. What we saw was our friend Bob examining whatseemed like a hundred little phone pieces spread overhis desk. “Hey guys check-out the gate array they are us-ing” he said as we realised our clever stunt went com-pletely unnoticed. It seems our friend had taken the wholephone apart before realising anything was wrong withthe button arrangement. Now where was I going withthis? Ahh, the PBVM. Bear with me… we’re taking thescenic route...

While my friend may have been a little peculiar, he wasone of the best hardware engineers I have had the pleas-ure to work with. In hardware or software we often dealwith “black boxes”. Knowing what’s inside is not requiredbut those driven by curiosity may discover that it oftenpays to go for extra credit and break the black boxesopen.

PBVMThe PowerBuilder Virtual Machine (PBVM) was alsoknown in its early days as the runtime engine. In version5 it was represented by the pbrte050.dll. In later versionsthe pbrte dll was combined with a few others to composethe pbvmxx.dll While Java made the runtime enginefamous, the idea of a runtime engine, virtual machine ora “soft CPU” was not new and predates PowerBuilder aswell as most PowerBuilder developers. The VM was theanswer to the dissimilarities among hardware platforms.The goal of the VM is to provide a layer of abstractionand deliver platform independence. Prior to VMs, thecompilers had to be completely rewritten when the un-

derlying hardware was changed. As the new processorsstarted to change faster and faster the task became un-manageable. The solution was to compile to an interme-diate low level language. A translation engine would thenbe written for each supported hardware platform, whichwould interpret the instructions and translate them to CPUinstructions. In PowerBuilder the intermediate languageis pseudo code or p-code. PBVM is a stack-based engine.

Today there are many interpreted languages. Some, suchas Java and Powerscript, are pre-compiled. Others, suchas HTML, are fully interpreted. As a matter of fact, a partof the DataWindow engine is a fully interpreted system.The DataWindow engine interprets the computed fieldand other conditional expressions in real time. There arepros and cons to each approach, which become clear whencomparing the DataWindow engine and the PowerBuilderVM. One of the frequently asked questions inPowerBuilder Powerscript newsgroups is “How can I placean equation into a string variable, solve it and place theresult in another variable?” The answer is that inPowerscript you cannot. Powerscript is a strongly typedlanguage. The compiler needs to validate that the typesof all the variables in an equation are compatible withspecified operators and assignments. But more impor-tantly the compiler needs to translate the Powerscriptequation into corresponding p-code instructions. Theequation contained in a string is not compiled and there-fore cannot be evaluated by the VM at runtime. In con-trast, the DataWindow engine can and does evaluate ex-pressions at runtime. But the gains made in flexibilityare lost in performance. In absence of compileroptimisations, the DataWindow has to do a lot more workto perform the same operation. For example, the com-piler makes all the decisions regarding data types up-front. The operations are then translated to p-codes deal-ing with a specific data type. This decision doesn’t haveto be made again at runtime, making the execution faster.

There are many other VM related performance enhance-ments. Some of them may impose limitations on thePowerBuilder development environment, executable de-ployment, and specifically PFC. One such limitation hasto do with the extension layer and inability to share PFCPBLs among different applications. In the next section ofthe article we will examine the causes of this limitation,but first an experiment.

PBVM AND PFCby Boris Gasin

Page 10

The ExperimentFor the sake of this article, let’s assume a very importantperson has asked me to create a Personal ManagementSystem application. I have started with the genericPowerBuilder application shell – genapp (shame on mefor not using PFC). The application contains three PBLs.See Figure 1 below.

Figure 1, Library Structure

As any self-respecting programmer would do, the firstthing I did was to add some gratuitous graphics to the“Help / About” ancestor window – w_genapp_about. Butinstead of hardcoding the bitmap I created two instancevariables :

string is_title = “My Sweetheart”string is_picture = “monica.bmp”

The instance variables are assigned to the window titleand the picture control in the window open event.

this.title = is_titlep_sweetie.picturename = is_picture

Next I copied all the PBLs into a separate directory andmodified the instance variables:

string is_title = “My Sweetheart”string is_picture = “hillary.bmp”

I ended up with two almost identical versions of the sameapplication. The only difference was in thew_genapp_about ancestor window. The descendantw_about which was actually opened from the menu re-mained empty. The exported code for the w_about win-dow shows only standard PowerBuilder generated shellcode.

$PBExportHeader$w_about.srwforwardglobal type w_about from w_genapp_aboutend type

end forward

global type w_about from w_genapp_aboutend typeglobal w_about w_about

on w_about.createcall super::createend on

on w_about.destroycall super::destroyend on

Now here comes the interesting part. I compiled bothapplications and ran each one. So far so good, Monicaversion displayed monica.bmp and Hillary displayedhillary.bmp. I then mixed the PBDs. I took app.exe andancestor.pbd from the “Hillary” application and thedescendant.pbd from the “Monica” app. Which bitmapwould you expect to see when running this hybrid appli-cation? Although the instance variables as well as thecode assigning the bitmap to the picture control reside inthe ancestor.pbl it was the descendant.pbd which carriedthe information unique to each application. In other wordswhen I took the descendant.pbd from “Monica” applica-tion I saw the monica.bmp in the about window. It seemsthat after the compilation the descendant.pbd or specifi-cally w_about carried information specific to each appli-cation. This is especially interesting since descendant.pblcontains an empty object! If you want to try this experi-ment for your self the source code is available on thePowerTimes website.

As you can imagine a mix-up such as this would not belooked upon favourably by my imaginary client, so I hadto get to the bottom of this. It turns out the cause of thisbehaviour lies within the performance-related enhance-ments to the PowerBuilder compiler and VM. InPowerBuilder 3.0 there was a significant performancepenalty for using 3 or more inheritance levels. Each ob-ject in the inheritance chain was loaded separately fromthe PBL. The final object was then constructed at runtime.In version 4.0 the performance improved, but some ofyou may have noticed that the PBL and PBD size grew.The solution to this issue was to perform more work atcompile time and less at runtime. Starting from PB ver-sion 4 when an object is compiled a separate instanceimage is created. An instance image contains all the in-formation needed to instantiate the object. It is preparedahead of time and stored in the PBL. The object inherit-ance is “flattened out”. The instance image for each ob-ject in the inheritance chain contains all the informationabout its ancestors. The object loading becomes a lot moreefficient. All that the VM has to do at runtime is copy theinstance image into memory. However, keep in mind thatoften the compile time enhancements are done at the costof flexibility. The instance image enhancement introducesfragile superclass behaviour. For similar reasons that thePowerscript cannot be evaluated at runtime, you can nolonger swap PBDs between different applications, even ifthe source code in corresponding PBLs is identical.

Page 11

PBVM and PFCHow does this translate to PFC? In the previous examplewe saw how an instance image of the descendant objectcan be affected by its ancestors. In PFC the inheritancejumps back and forth between the extension and PFC lay-ers – see figure 2 below.

Figure 2, PFC Inheritance Structure

In this case the instance image of the PFC objects, suchas pfc_w_about may be affected by changes in the exten-sion layer.

Another performance-intensive VM operation is dealingwith polymorphic functions. The rules of function over-loading and overriding can get pretty hairy. Resolvingthese rules at runtime to determine the correct target func-tion can prove costly. V-table is a dispatch table. It con-tains the addresses of the functions implemented withinthe object. When a PowerBuilder object is saved a v-tableis generated with the locations of all the functions withinthis object.

Have you ever changed the function arguments once thefunction has been defined? Do you remember the warn-ing message?

“Changing the function arguments requires that you re-generate all objects that call this function. Continue?”

The warning message has to do with PowerBuilder at-tempting to keep the references to the object v-table insync. So far we have dealt mostly with inheritance re-lated optimisations. Well v-tables play a big part inoptimisations of objects related by association. When anobject calls a function on another object during the com-pilation an offset to the function v-table is saved. Thiscreated a web of dependencies between objects and makesPFC PBLs specific to a single application.

ConclusionPowerBuilder VM performance enhancements shift manyof the tasks from the VM itself, or real time execution, tothe compiler. This decision strikes a balance between per-formance and flexibility. Having a general idea about theseperformance enhancements and their affects on runtimeenvironment can save you many frustrating hours.

A lot of information in this article was gathered at thePM session presentations of the ’98 and ’99 conferences.If you get a chance, attend the PowerBuilder VM Inter-nals session at the next conference or any other presenta-tion held by David Guy, Jeff Calow or Jim Ducharme. Allof these developers have worked on PB VM first-handand have a wealth of information to share.

?Boris Gasin is a ChiefTechnology Officer atDynamic TechnologyGroup, a New Jerseybased consulting com-pany specialising inInternet and Client-Server technologies.Boris is a member ofTeam Sybase and is athree time winner of the

Team MVP award. Boris is a co-author ofPowerBuilder Foundation Class Professional Ref-erence published by McGraw-Hill, ISBN # 0-07-913267-7 and a contributing author of thePowerBuilder 6.0 Secrets of the Masters by SYS-Con Publishing. He can be reached via email [email protected].

Page 12

methods at runtime. The registry file contains entries forproxy objects, which correspond to the components inJaguar, so that they can be instantiated using the stand-ard COM mechanisms.

Proxy GenerationBefore starting this procedure, two programs must be inyour NT search path before running the Jaguar manager.The first is called uuidgen.exe which is included as partof the Jaguar installation. The second is called midl.exewhich is available as part of Microsoft development tools,such as Visual Studio and Win32 SDK. If these programsare not in your path the Jaguar Manager will throw anuninformative exception when you attempt to generatethe COM proxy. Also the Jaguar manager must be run-ning on NT to complete this process although the remoteJaguar server may be running on UNIX.

To generate the TLB/REG files you must first select thepackage in the Jaguar Manager. The generation is per-formed at a package level with all of the components be-ing generated into the TLB/REG files. Select File/Gener-ate TLB/REG menu item. The dialog in Figure 2 is shownbelow. The output directory specifies the location in whichthe TLB/REG files will be located. The proxy server lo-cation specifies the location will be of JAGPROXY.DLLon the client machine. Note that this location can be over-ridden when the proxy is installed on the client machine.The register check box specifies whether the registrationinformation should be automatically loaded on the cur-rent machine after generating the files. This would nor-mally be done during development when testing on a sin-gle machine. The MIDL specifies whether to save theMIDL file, which is used during the generation of thetype library. This is sometimes useful when trying to de-bug if the generation fails. Finally select the generatebutton to create the files. A message box is displayed uponsuccessful generation.

Note that if you are testing Jaguar locally the OS willlock the type library file once the component is invokedvia the COM proxy. This can prevent the COM proxygeneration from working because the type library file can-not be overwritten. To get around this you can specify adifferent output directory or reboot the machine.

IntroductionJaguar supports access from COM clients through theuse of a COM proxy generator. This facilitates muchbroader access to components hosted in Jaguar includingaccess from any client that supports COM, such as VisualBasic (VB) and Visual Basic for Applications (VBA). Thisis also an important consideration when comparing Jag-uar to Microsoft Transaction Server (MTS). In this arti-cle we will examine mechanics of creating COM proxyobjects and contrast their invocation performance as com-pared to components hosted natively in Jaguar and inMTS.

ArchitectureFigure 1 depicts the architecture used to support COMclients with Jaguar. From the client perspective, each com-ponent in the Jaguar server is registered as a separateCOM component. The program that is actually invoked(e.g. the in process server) when the COM component isactivated is JAGPROXY.DLL. This program in turn con-nects to the Jaguar server using Internet Inter-ORB Pro-tocol (IIOP) and routes client method invocations to thecorresponding server component.

One of the unique features of this architecture is that theJaguar server can be running on Unix, which providesmuch greater scalability than NT, and still be accessedfrom COM clients.

Jaguar ManagerThe Jaguar Manager provides a facility to generate thefiles needed to install the client COM proxy. The actualfiles generated are a “type library” file (.TLB) and a reg-istry file (.REG). The type library file contains proxy in-terface metadata, which can be used to perform drag-and-drop development on the COM client. TheJAGPROXY.DLL program also uses the type library fileto perform argument type checking prior to invoking

ACCESSING JAGUAR COMPONENTS FROM COM CLIENTSby Sean Flynn

IIOP

Figure 1, Jaguar ActiveX Client Support.

Component

Jaguar ServerActiveX Client

ActiveX Proxy Component

Page 13

Client Proxy InstallationCOM client access to Jaguar requires the installation ofthe Jaguar ActiveX proxy automation server (APAS). Ad-ditionally the generated TLB/REG files for each compo-nent to be accessed from the client must also be installed.

APAS is installed on the client machine by running theJAGCLIENT.EXE program, which is included as part ofthe Jaguar server installation, on the client machine. Af-ter installing APAS, each component’s TLB/REG filesmust be copied to the client machine. Next the REG filesneed to be modified as they contain the specific locationof the TLB file and the JAGPROXY.DLL program. If thedirectory of the TLB file on the client is the same as thedirectory that it was generated into on the server, and thedirectory of JAGPROXY.DLL specified during the proxygeneration is the same directory as it was installed ontothe client then the REG file can be loaded directly on theclient without modification. Otherwise the REG file mustbe modified to correct the directory locations. This canbe accomplished by editing the REG file or using a batchprogram (JAGREG.BAT) included as part of the APASinstallation.

Component InvocationComponent invocation using a Jaguar COM proxy is thesame as the normal COM invocation with a few addedsteps.

lole_jag = create oleobjectlole_jag.ConnectToNewObject &

(“benchmark.n_server_jag”)lole_jag.UserName = “JagAdmin”lole_jag.Password = “”lole_jag.Host = “localhost:9000”lole_jag.Name = “benchmark/n_server_jag”lole_jag.Initialize()

li_rc = lole_jag.TestFunction(lblb_arg)

lole_jag.DisconnectObject()destroy lole_jag

The proxy generation automatically adds the UserName,Password, Host and Name connection properties and theInitialize method to the component interface. The Ini-tialize method instantiates the component on the Jaguarserver using the connection properties. After calling Ini-tialize method the all of the component properties andmethods can be accessed in the same was as any otherCOM component.

Invocation PerformanceIn order to estimate the overhead incurred in accessingJaguar components from the COM proxy a simple servercomponent and client application were developed inPowerBuilder. The application tests method invocationswith no arguments, ten arguments (half by reference) andblob arguments. Testing with blob arguments is impor-tant as this is a common way of passing data to and fromthe server components. Note that these tests are arbitraryand quite limited in scope (e.g. tested on my laptop anddesktop on my home LAN). Before deriving any resultsfrom these benchmarks I would highly suggest develop-ing your own benchmark suite that closely emulates yourconfiguration. The results will vary considerably depend-ing on various factors, including client and server devel-opment tools used and network and machine configura-tions. Also note that the methods used in these tests pur-posely do not contain any code whereas in real life thetime to execute the code within component methods usu-ally is significantly longer than the actual method invo-cation time.

The native tests were done with the component createdwithin the clients process space (e.g. standard NVO cre-ate) which, of course, was significantly faster than therest of the distributed tests. The Jaguar tests were doneusing the native Jaguar proxy interface fromPowerBuilder. The Jaguar/COM tests were done usingthe Jaguar client COM proxy automation server. The MTStests were done using standard DCOM interface by in-stalling the exported package from MTS on the client.

These results show there is a several millisecond over-head in using the COM proxy interface, which in theoverall scheme of things is not significant. Rememberthe time spent executing the logic within a method willtypically be 10 to 100 times longer than the invocationtimes represented here.

Interestingly the MTS component invocations were no-ticeably slower than the Jaguar/COM tests. I have notidentified why this is occurring. I suspect this may be dueto the NT security checking that occurs as part of normalDCOM processing. I attempted to disable all of the com-ponent security checking but I believe, based on theseresults, a certain level of security checking is still hap-pening.

As I noted earlier, I have posted the code used to generatethese test results on the PowerTimes web site. I am inter-ested in finding the results of testing done by others. Pleasesend me your results and I will discuss them in a futurecolumn.

Remote Debugging and Vendor SupportAnother significant area of consideration is the ability tosupport remote debugging. Jaguar supports remote de-bugging for components developed using PowerBuilderand PowerJ. Likewise MTS supports remote debugging

Figure 2, COM Client Proxy Generation.

Page 14

?Sean Flynn is a Managing Partner at Infinity SystemsGroup, a Boston area consulting and training companyspecialising in distributed systems design and develop-ment. Sean was the principal developer of the RivertonOpenFrame distributed business object framework. Seanis a CPD Professional, member of the CPD Review Com-mittee and sits on the PowerBuilder Customer AdvisoryBoard. Sean can be reached at [email protected] orby voice at 001-978-287-5332.

0

25

50

75

Milli

seco

nds

Native 0.35 0.43 0.39

Jaguar 8.11 8.62 8.56

Jaguar/COM 14.41 15.49 15.06

MTS 65.07 67.65 66.58

No Args 10 ArgsBlob Args

for components developed using Microsoft Visual Studiodevelopment tools. Having remote debugging supportmakes an enormous difference in developer productivity.This factor alone will influence many organisations touse one vendors development tools over another basedupon which server is being used.

Another area of consideration is vendor support. Eachdevelopment tool vendor will naturally provide enhancedsupport for their own servers and are less likely to sup-port advanced features of the competitor server. Likewise,product support in the form of documentation, educationand technical support is significantly better within a sin-gle vendors tools and servers.

SummaryJaguar provides a robust component server with accessfrom a variety of client types including COM. Use of theclient side COM proxy facilitates the use of single net-work protocol allowing the component servers to operateon a variety of platforms. This flexibility provides a su-perior server to MTS for organisations using Sybase de-velopment tools. Organisations using a mixed vendorenvironment will find increased issues and reduced de-velopment productivity.

Page 15

IntroductionWith this summer’s release of EAStudio 3.0, includingEAServer 3.0 and PowerJ 3.0, Sybase has delivered apowerful set of products for the Enterprise Java devel-oper. Together these two products form a blockbuster so-lution for the creation of scalable Java applications.

Enterprise Application Server provides a highly scalableexecution environment for distributed business logic com-ponents. EAServer has the unique ability to runPowerBuilder non-visual objects, COM components, C/C++ components as well as Java components. Many de-velopers are interested in leveraging their existing in-vestment in PowerBuilder or COM to create componentsfor EAServer, however, there is also a growing interestin the use of Java as a development language for middle-tier components. Industry analysts like Java as a languagefor distributed component development for several rea-sons:

1. Components written in Java will be able to run onany server platform that supports Java.

2. Java is known as a “safe” language to program inbecause it restricts programmers from using point-ers and provides automatic garbage collection - theseattributes make a Java component less likely to crasha server than a similar C or C++ component.

3. The features described above also make Java a veryproductive development language to program in.Experts estimate that Java programmers are 30% to40% more productive than C++ developers.

With PowerJ 3.0 Java developers can harness all ofPowerJ’s rapid application development features to buildcomponents for EAServer 3.0 and then deploy them toEAServer without leaving the PowerJ environment. Oneof the breakthrough features for PowerJ 3.0 is a deploy-ment wizard that guides users through the process of de-ploying a component to EAServer. Developers usingEAServer and PowerJ are amazed at how quickly theycan build real, distributed Java applications today.

Improved ScalabilityHow does EAServer improve the scalability of my Javaapplications? By creating client applications that makeuse of components running in EAServer, system archi-tects are able to improve application performance due tothe following features:

• Instance PoolingInstance pooling and connection caching are two

EAServer features that can greatly improve thescalability of your application. Instance pooling pro-vides a mechanism for re-using a single instance ofa component for many different clients - instancepooling will reduce the number of expensive objectinstantiations that your application will have to make.Once a given client has finished with an objectEAServer will put it in the instance pool so that itcan be re-used by the next client instead of simplydestroying it.

• Connection CachingConnection pooling provides a similar scalability ad-vantage for database connections. To use connectioncaching in EAServer you configure a cache to makeuse of a JDBC connection to your database and thenfrom your components you simply refer to this con-nection cache whenever you need a database con-nection. When a component is done with a databaseconnection it doesn’t close it, instead it simply placesthe connection back into the connection cache. Us-ing connection caches can allow a limited number ofopen database connections to service a much highernumber of active clients.

• Plus More…EAServer is based on a multi-threaded kernal thathas been in use in the Sybase Open Server productfor more than 7 years and is used in thousands ofSybase deployments in various industries. EAServer’stested and proven code makes it possible to get ex-tremely high throughput from your distributed com-ponents once they have been deployed to EAServer.EAServer also provides advanced features such asload balancing, high-availability and failover thatmake it possible for multiple EAServer machines tobe configured into a cluster that appears as a singleserver to client applications. The benefits of the clus-ter are that it can intelligently delegate incoming re-quests to the different servers to improve scalabilityand it can also prevent the client from being inter-rupted if one of the nodes in the cluster should fail.So even if a hardware failure crashes one of theEAServers all client requests will continue uninter-rupted.

PowerJ 3.0 - the Right Development Tool forEAServerPowerJ 3.0 provides many features that make it the rightchoice for developing EAServer components and clients.

ENTERPRISE JAVA DEVELOPMENT AND DEPLOYMENT by Greg Burns

Page 16

We’ve already briefly mentioned the new deploymentwizard in PowerJ for deploying components into EAServerbut PowerJ also has many other EAServer-related fea-tures including the transaction object, the EAServer proxywizard and Visual Classes.

Transaction ObjectPowerJ’s transaction object can be configured to use anEAServer connection cache as a source for databaes com-munication. Right from the PowerJ environment devel-opers can browse existing connection caches in EAServerand even create their own new ones. Once a PowerJ trans-action object has been configured to use a connectioncache it can be linked to other pre-built database compo-nents all of which will be able to take advantage of theimproved scalability features of connection caching.

Proxy WizardPowerJ 3.0 also provides a great new feature known asthe EAServer proxy wizard. The proxy wizard allowsPowerJ developers to browse into EAServer to see all ofthe components that have been deployed to the server.Any component can be selected in the wizard and PowerJwill generate a Java proxy for that component and placeit on the PowerJ component palette. Once a proxy hasbeen placed on the component palette it can be placed onany PowerJ form and used as if it was a client-side Javacomponent. Even PowerJ’s drag-and-drop programmingfeatures work with these EAServer proxies making itseamless to use EAServer components from Java clientscreated in PowerJ.

Visual ClassesVisual Classes have been around since the first release ofPowerJ but they have never been more popular than they

Figure 1, Transaction properties dialog

Figure 2, Jaguar component wizard

are today. A Visual class provides a visual, design-timerepresentation of a class that will not be visible at run-time. For example, an EAServer component will not bevisible at run-time but PowerJ users can still drag anddrop components like the PowerJ transaction object ontheir EAServer components because PowerJ provides avisual representation of these non-visual classes. Visualclasses extend PowerJ’s high productivity to the develop-ment of server-side components.

The DataWindow for JavaOne of the most exciting new technologies for Java de-velopers is the DataWindow for Java in PowerJ 3.0. Thisnew JavaBeans component makes it possible to bring thehigh productivity of a 4GL environment to the world ofJava development. PowerBuilder developers will be happyto see that the DataWindow objects that they created forPowerBuilder can now be leveraged for their Java appli-cation development. The DataWindow for Java compo-nent is also well suited for the world of Distributed JavaComputing. A non-visual JavaBeans component calledthe DataStore can be used inside Java components thatare created for EAServer. Client-side Java applets andapplications can synchronize themselves with componentsrunning inside of EAServer. In this way users can realizethe performance benefits of EAServer for database ac-cess and performance while still having a rich Java userinterface.

The Web DataWindowAnother new technology in EAServer 3.0 and PowerJ 3.0is the Web DataWindow. The Web DataWindow makes itpossible to have pure thin-client DataWindows consist-ing only of HTML and JavaScript. Like the DataWindowfor Java component, the Web DataWindow can reuse ex-isting DataWindow objects that were created forPowerBuilder – of course users can create brand newDataWindow objects for the Web DataWindow as well.The Web DataWindow works by invoking a componentin EAServer to generate pure HTML and JavaScript

Page 17

DataWindows on demand as they are requested by a Webbrowser. The Web DataWindow is for users that don’twant any Java on their client but that still want a Web-based client application. With PowerJ and EAServer cus-tomers can create the right-sized Web client for their ap-plication with the right combination of Java and HTML.

What’s Next?Up next on the schedule for EAServer and PowerJ is anew release of both products that will have full supportfor the current Enterprise JavaBeans (EJB) standards. Thisrelease, which is currently in beta, will be shipping in thevery near future. EJBs bring a very clear and well-de-fined standard to the world of distributed Java develop-ment. An EJB is a server-side Java component, EJBs needto run inside of an EJB container. In its next releaseEAServer will become an EJB-container capable of host-ing all EJB components.

ConclusionFor developers that are serious about creating EnterpriseJava applications today, the right tools are available now

?Greg Burns is a Technical Evangelist with theInternet Applications Division atSybase. Greg hasbeen with Sybase for 3 years and has been involvedwith PowerJ 3.0 right from the beginning. Greg is aregular contributor to the Sybase Developer Network(www.sybase.com/sdn) and a regular speaker forSybase at conferences and seminars.

from Sybase. PowerJ and EAServer offer functionalityfor Java developers that has previously not been avail-able in the market. Whether you’re interested in develop-ing an end-to-end Java application or just wanting to cre-ate Java components for the middle-tier of your Enter-prise, PowerJ and EAServer will help you get the job donefast. PowerJ also offers full support for HTML client de-velopment so customers can use the technology that bestsuits the needs of their application.

PowerTimes is a leading development journal for Sybase tools.Published in Switzerland, thousands of developers around the world already enjoy this publication.

If you want to find out more, or download a free copy, visit our web site - you won’t regret it.

CYRANO ClientPack

Comprehensive Automated Software Qualitysolution for PowerBuilder developments

Key Features of CYRANO ClientPack• Delivers a complete suite of integrated tools for managing and control-

ling quality in PowerBuilder development

• Provides the only tool for defining and maintaining standards inPowerBuilder applications

• Optimizes development, simplifies maintenance and checks com-pliance to standards in PowerBuilder applications

• Offers the industry’s leading MS Windows multiplatform test plan-ning, and defect tracking tool set

• Integrates all of the key components needed for building and runningautomated regression test suites.

• Analyzes in detail the API and SQL calls of the transactions in PC based client/serverapplications

• Identifies where changes are needed in a PowerBuilder regression test suite as your application isupdated, developed and maintained.

• Measures how much of a PowerBuilder application’s functionality and objects are being tested.

Key Benefits of CYRANO ClientPack• Allows development teams to start working on building quality much sooner

than would be possible with more traditional development methods

• Provides an almost instant return on investment without the need forextensive product or methodology training

• Improves communication between team members saving expensive traveland meeting costs discussing routine project progress

• Simplifies the maintenance of PowerBuilder applications and regressionstest suites

• Accelerates and secures migration to latest versions of PowerBuilder• Shortens the PowerBuilder development learning curve

CYRANO Worldwide Headquarters38, rue du Général Foy75008 PARISTél : +33 (0) 1 44 90 85 70Fax : +33 (0) 1 44 90 85 79

http://www.cyrano.com

Page 19

IntroductionWith version 3.01 HOW it will be possible to deploy yourHOW objects to a Jaguar Transaction Server. While de-ploying to Jaguar has become easier over time, it can stillbe a bit tedious if you have lots of objects to deploy. Withthis new version, Riverton has made the process mucheasier and straight forward.

The goal has been to make it easy to deploy your bothyour business layer and your data access layer to a mid-dle tier to facilitate access from a number of applicationclients including PowerBuilder and also web applications.This provides a service centric development approach inwhich applications are developed as a set of services af-ter which a GUI is placed is placed on top. Your client nolonger manages the transactions but rather calls transac-tional methods, passing all the parameters necessary forthe methods to either succeed or fail. This approach pro-vides real re-usability by a number of applications.

The SSO – A Demonstration ObjectTo demonstrate this technology, Riverton has created anew type of object, the SSO or System Service Object anda set of supporting objects in two PBLs:

HOW_SVR.pbl andHOW_SVRE.pbl.

The SSO acts as your traffic cop to the transaction server.

The SSO is really only provided as a demonstration or‘tutorial’ for using Jaguar. I will show you how to con-nect with the SSO, but keep in mind that this only dem-onstrates using Jaguar for data access. In ‘real life’ youwould not use the SSO, but would, instead, create prox-ies for your own data access and business objects. Use theSSO as a learning tool.

To make this work you will need to think about presenta-tion vs. business objects. Of course, you should have beendoing this for a while, but in order to make this deploy-ment work you really need to get serious about it.

You will need to separate your objects into two sets ofPBLs:1. Presentation and client side PBLs and2. Server side PBLs.

The Server PBLs will contain the SSO, your BEOs, DLKsand DataWindow objects. The client side PBLs will con-tain your visual presentations, calls to your business ob-

jects through the SSO and a proxy for the server SSO.Normally you should have the proxy in a separate PBL.This will make it possible for you to run your applicationeasily in client/server mode and client/Jaguar mode. WhileJaguar does provide some rather swift remote debuggingfeatures, it is usually easier to start the development on asingle platform.

First let’s create the server side of things. Create a PBLwith just an application object. We’ll call it SSOJag.pbl.The library list of this application should includeSSOJag.pbl, your business object PBLs, HOW_SVR.pbland HOW_SVRE.pbl. Open n_cst_sso in theHOW_SRVE.pbl and add a line to the constructor eventwhich will point to the server’s .INI file. It should looksomething like this:

this.GetBCMMGR().SetIni.File(“C:\jagserver\jaguar.ini”)

This .INI file should look like the .INI file you use toconnect to the database when you run in two tier mode.

Deploying the Objects to JaguarYou will need to deploy your server side components toJaguar. To do this you will need a Jaguar ComponentProject, which, when run, will deploy the objects. Onceyou have created the project, you can use it over and overagain as you modify the objects within the PBLs. How-ever, if you add PBLs or delete any, you will need to modifythe project. First you will need to start the Jaguar serveron your machine. (normally you would run this on a servermachine, but running it locally makes the learning easier).To get started, select ‘NEW’ from the PowerBuilder 7tool bar and go to the Project tab. Select the Jaguar Com-ponent Wizard. You will then see a list of the PBLs inyour library path. Select SSOJag as the PBL you wish touse. On the next screen you can select the default projectname or create your own and click NEXT. Now you willneed to tell Jaguar which object will be the main compo-nent. Select n_cst_sso_jaguar in the HOW_SRVE.pblYou will see other objects with similar names, but don’tuse them. The next screen is a login screen. If your serveris not on the same machine, you will need to supply theappropriate login and machine information. If you arerunning everything on the same machine, enter ‘localhost’for the server, ‘9000’ for the port, ‘jagadmin’ for the userand no password.

You will then be prompted for a package name. Anything

HOW AND JAGUAR: WRITE ONCE RUN ANYWHERE… REALLYby Bernie Metzger

Page 20

will do, so let’s use SSOJAG. In the next few screensmake the following choices:• Standard Component• “Supported” for instance pooling• “Supports Transaction”• Check Auto Demarcation/Deactivation• Leave all the interface options unchecked• Check the box to enable Remote Debugging• Check ‘Consolidated PBD’• Check ‘Include Unreferenced Objects’

After you click the finish button, your project will be cre-ated in the ssojag.pbl. Go the library painter and doubleclick on the project and click the run button to deploy theobjects.

Creating the ProxyAt this point you may be exhausted by the effort, but holdon, we are almost there!. The next step will be to createthe proxy and client side .INI so the client can find theJaguar Transaction Server. Change your application tothe client side app and create a new Project ‘Jaguar ProxyWizard’. Save the project in the separate ‘proxy.pbl’. Youwill then need to select a project name and log into theJaguar server as we did when we created the Jaguar com-ponents. Once you have logged in, you will see a windowwith all the Jaguar components. Among these you shouldfind SSOJAG. If you don’t, something went wrong whenyou created the server components. Once you get to theFinish, you will have a project with which you can createthe client side proxy. As long as the methods in the SSO,or other objects you deploy, don’t change, you will notneed to recreate this proxy.

Building the .INI FileThe .INI file will need a section so thatofr_n_cst_database can find the server. It should havea section that looks something like this:

[n_cst_database]Configuration = Distributed PBThinClient=FALSEDriver = “jaguar”UserID=”jagadmin”PassWord=Server=”localhost”Location=”iiop://localhost:9000”Application=”SSOJAG”ConnectString=””ConnectionOptions=””TraceOptions=””

Debugging HintsWhen you build things for the first time, it will be mucheasier to do things in two tier mode. However, once youstart working with the server, you will need to use remotedebugging. This is quite easy to use. To start a remotedebugging session, set your application to the server ap-plication and set the break points. Then click on the ‘re-mote debug’ icon. Once you do this, you will see a loginscreen like the one you used when you created the proxy

and components. Log on to the server. Start a second PBsession and set your application to the client side appli-cation. When you start it up and it makes its first call tothe server (and hits the line with the breakpoint) you willsee the debugging session for the remote session stop.You can then step and debug as you normally do. Theneat thing about this is that your remote debugging ses-sion does not have to be on the same machine, or in thesame city as the server as long as you can get a connec-tion to it!

More to come on Jaguar next time… .

?Bernhard Metzger is a CPD, Professional and presi-dent of KEV Systems, Inc. a Riverton Partner lo-cated in Newton, MA. When he is not PowerBuildinghe is playing his Viola in a local orchestra. Berniecan be reached at [email protected]. or by voiceat 001 - (800) 376-5755.

Riverton can be reached through their Web pageat www.riverton.com

a Client/Server and Internet development and consulting company

�����

Catsoft Development GmbH, Amdenerstr. 28a, CH-8872 WeesenTel: ++41 55 616 51 11, Fax ++41 616 51 14

Web: www.catsoft.ch, E-Mail: [email protected], Compuserve: CATsoftCH

�������� �� ��� �� ��� � �������

����������- Custom made Soft-

ware in any BusinessArea

�� � ��- For Sybase AG and

SQL AG

������ ��- On various Power-

Builder Topics

����������- Custom made Web Sites + Easy to maintain + Fast Development + Public Hosting available

������- ColdFusion- HomeSite- ScriptBuilder

����������- Custom made Web

Sites for Intranet andInternet usage

������- SilverStream Reseller

����������� �� ����������������� ����� � ������

Page 22

IntroductionIT professionals are under constant pressure these daysto react swiftly to strategic demands. However, they oftenfind themselves trapped in an IT gridlock, unable to maketheir applications evolve to fit business needs because theylack the information they need to adapt their complexapplications.

Some IT professionals count on developer knowledge ofthe application for this information. This approach issomewhat unrealistic when the number of objects thatcomprise a normal application is clearly analyzed. Theaverage quantities of objects found in traditional, well-balanced distributed (client/server or e-business) appli-cations are substantial. Moreover, the number of possiblerelationships between them is tremendous. For a typicalPowerBuilder/Sybase application, the figures are shownbelow:

SQL Objects: 3329 PB Objects: 14142109 Functional Procs 193 User Objects752 Elementary Procs 345 Windows251 Tables 766 Data Windows217 Triggers 62 Functions

39 Structures7 Menus1 Application

As you can see, the sheer volume of information that adeveloper is expected to remember renders this approachuntenable. Add to this the fact that these objects are con-stantly being modified and it soon becomes clear thathuman error is all too likely a possibility. Furthermore,given the high rate of developer turnover today, IT de-partments risk losing their information source about anapplication from one day to the next.

Others attempt to overcome the lack of information byrelying on documentation. However, such documentationis never up to date despite the best of efforts and thereforeis not a reliable source of information.

The final option is to dig the information out of the sourcecode manually - an extremely tedious and time-consum-ing job. What’s more, it must be re-done every time amodification is made. Thus, very few developers attemptit.

This is unfortunate, if understandable, because it’s theonly approach that yields accurate information. In part,

this is due to the dynamic nature of the application. Afterthe initial conceptual phase, most developers take the fast-est and easiest route when making changes by going di-rectly to the code itself, without reporting them in thespecifications. This means that the only way to discoverthese modifications is to look at the code. It is also truebecause the conceptual part of the application may havebeen constructed using several different programs, so thatthe only way to have a complete understanding of theapplication is by examining the source code.

It is evident that none of the three options given hereprovide a satisfactory way to overcome this lack of infor-mation. Thus, a gridlock situation arises. Without a clearunderstanding of all of the inter-relationships betweenall the client and server objects in an application, makingchanges becomes a risky business. The slightest modifi-cation of the database or management rules of a complexapplication could have unpredictable and devastating re-sults on the rest of the application. Rather than incur ca-tastrophe, developers often avoid making necessarychanges, placing them in a gridlock situation. In this way,applications are quickly rendered obsolete. At best, thereremains an inevitable gap between strategic demand andstrategic applications because IT departments are unableto make their application evolve.

The only solution to this problem is to develop an analy-sis technology that makes it possible to obtain accurateinformation hidden in the source code without the tedi-ous work, and give the developers the data they need tounderstand their applications. This will let them exploitthe information to break the IT gridlock definitively, al-lowing for evolution of their applications. This kind oftool is called a parser.

What is a Parser?Analyzing applications means analyzing their inner work-ings and structure. A piece of software is essentially acollection of statements written in some programminglanguage, that is then translated into machine-readableformat by a compiler and executed. As for natural lan-guages, analyzing and understanding a programming lan-guage means understanding the syntactic and semanticstructure of such a language.

Because the programming language must be rigid enoughfor a compiler to understand, it must adhere to certain

HELPING YOU TO UNDERSTAND YOUR APPLICATIONSby Olivier Bonsignour

Page 23

syntactic rules. While this restriction does not limit thevariety of legal statements one can produce, it does meanthat each statement must follow certain syntactic patterns.To take an example from English, the following two sen-tences mean two completely different things, but followthe same basic structure:1. My article is about parsing technology.2. A parser is a syntactic and semantic analyzer.

In essence we have a subject, verb and object. A moredetailed description might tell us that the subject andobject are both made up of an article and a noun. Theseare the syntactical properties of a sentence, as opposed tothe semantics or “meaning”. The syntax is not concernedwith the fact that my article is about parsers, or that parsersanalyze languages; it is simply concerned with structure.

Similarly, a computer program can be seen as the struc-tured arrangement of a finite set of programming con-structs (i.e.: function, expression, identifier, etc.). Beforea compiler can generate object code for a piece of source,it must first translate the source into a more formal rep-resentation based on its syntax, boiling the program downto its bare essentials. This intermediate structure is knownas the Abstract Syntax Tree (AST). The AST captures theessence of the program in a format that can be under-stood and manipulated by a machine.

1. Statement: x = y + 2;2. Abstract Syntax Tree:

assign ~ /\ / \ / \x add ~ /\ / \ / \ y 2

Figure 1, Abstract Syntax Tree example

In figure 1, you’ll find a statement and what its corre-sponding AST might look like:

Taking this logic further, one can see that a tree, startingfrom such high-level notions as “program” all the waydown to such things as “integer constant”, can describean entire program very neatly.

The tree notation gives us a formal way to describe anypiece of code, and can be used to refer to many differentregions of code that may look different, but are in factstructurally equivalent. The tree also provides us with anice malleable representation of the code.

But such information about the structure of the code is

not sufficient to understand the essence of the program.As we saw it before, two sentences with the same syntaxmay have two opposite meanings. That’s what is calledthe semantics, i.e. the meaning. Understanding the exactdirection of a program requires a fine knowledge of thelanguage. To perform an accurate analysis of a program-ming language you must be able to break down thou-sands of subtleties specific to each language.

Therefore, the accuracy of an analysis technology obvi-ously relies on the ability to take into account all the com-plexity of the vocabulary and grammar of the language tobe analyzed, but also all the complexity, in semantic terms,of all that has been written. The language analysis soft-ware that performs such syntactic and semantic analysisof a programming language is called a parser.

What Do We Have to Overcome?To obtain accurate information means that you have todevelop one analyzer for each language you want toanalyze. Only with such attention to the specifics of thelanguage is it possible to guarantee an analysis that is100% accurate. A quick examination of some of thesefactors reveals why:

• An exhaustive understanding of the grammar is fun-damental to a good analysis.

To obtain correct results, you have to ensure that theproduct takes into account all pertinent instructions,without taking into account incorrect instructions andthereby falsifying the results of the analysis. If incor-rect information were taken into account, the syn-tactical analyzer would allow the programmer to pro-duce language constructions that are not within thelanguage norms of the program.

However, you also have to be careful not to make thegrammar too limited because that would mean lim-iting the program language, thereby reducing theability of the programmer to express himself.

Checking for the possibility that a grammar does nottake into account enough of a language is relativelyeasy. It suffices to verify that the syntactic analyzercan recognize all the cases that can theoretically beimagined for a language. Therein lies the principaldifficulty. No documentation that lists all such pos-sible cases exists, particularly for complex languages.The languages are also likely to evolve because theyare commonly used.

On the other hand, making sure a grammar does nottake too much into account is no easy task becauseengineers would have to test point by point so thatanything that does not conform exactly to the rulesis rejected. Since the number of ways a developercould write a non-conform statement is infinite, thecomplexity of the work involved is clear.

Page 24

For example: “A=1++2” would be recognized, al-though only A=1+2" or “A=1+(+2)” are valid.

Thus, to perform an accurate syntactic analysis of aprogramming you must have an exhaustive knowl-edge of all grammar specificity and developments.

• A subtle understanding of the ambiguity of the lan-guage itself.

A language and its associated grammar are consid-ered ambiguous when a program can legitimately beinterpreted in several different ways. It therefore fol-lows that the simple reading of a program does notallow you to predict its behaviour. The following SQLServer stored procedure is a good example:

« create procedure P asbeginif (@@error = 0) return

(select -6)end ».

This T-SQL code can be interpreted as a procedurethat doesn’t really do anything (the select located afterthe insert is never executed because it is dead code).In this case, it would send back a result of 0. Or itmay be interpreted as a procedure that the sends backa value of -6 for the subquery.

Even reading the T-SQL documentation doesn’t givea clear answer. This is what it tells us:

“… The return keyword exits from a batch uncondi-tionally. It can be used at any point in a batch orprocedure. When used in procedures, return can ac-cept an optional argument to return a status to acaller. Statements after return are not executed… ”

A try must be made manually to see how SQL Serverwill react. These ambiguities are especially irritat-ing because the grammar recognizes a language thatconforms to reality, while at the same time under-standing it in a way that is diametrically opposed tothe meaning intended by the developer.

As you can see from the above example, catastrophe canarise if the author of the grammar or its associateddebugger does not anticipate these types of problems.These are just a few of the possible difficulties involvedin analyzer development. Proper investment of time andresources is required to build an effective analyzer. Thatis why a dedicated approach to analysis is the only validway to obtain the information that users need to maketheir applications evolve.

A Parser? Why and For What?Having information and being able to really understandand use it are often two different things. Parsers are only

a means to obtain information. You can use thisinformation for several purposes. Below are only a fewexamples:

Build the Information System of your InformationSystem• You get and keep the IT knowledge in-house instead

of disssipating it each time a developer leaves theteam or the company: By parsing all the programsconstituting your application (T-SQL code,PowerScript code, … ) and feeding a repository, youcreate an automatic Information System dedicatedto IT professionnals and produce up-to-datedocumentation in minutes.

• You ease communication within the developmentteam and facilitate workteam integration: all detailedinformation about the inner workings of yourapplication is easily accessible to every developer inthe team. Developers access critical informationwithout having to read hundreds and hundreds ofsource code lines.

“Map Out” applications• You obtain a clear understanding of your entire ap-

plication: because parsers can identify every “object”in an application and its interdependencies, you candevelop a tool that use this information to build amap of your application, allowing you to explore itscomplex inner workings.

• You get a flexible working environment that makesthe day-to-day work of developers easier. With easy-to-navigate facilities and graphical representationsof their applications, IT teams stop wasting time withtedious time-consuming tasks.

Analyze the impact of change requests on client andserver objects• You improve IT quality and flexibility: as develop-

ers can understand the consequences of their actionbefore they make the modification, they can imple-ment changes that answer user demands quickly andaccurately.

• It also helps DBAs to make accurate time and man-power estimates necessary for the implementation.

Give intelligence to development tools• Developers obtain a “software assistant”: by integrat-

ing a parser in a development tool, you can provideadvice and comment to the developer as he writeshis code.

• Parsers can contribute to better quality code throughcareful code verification: once again, they check syn-tax and semantics, analyzing each line of code. Thecursor can be automatically positioned on the errorline.

Page 25

ConclusionWe can see that parsers are powerful tools with a lot ofpotential uses. Using such parsers, CAST software getsthe best out of the information gathered on an applica-tion’s inner structure to help IT professionals master theincreasing complexity of their applications all alongthe life cycle and adapt them to the ever-changing needsof end-users:

• CAST AppViewer: a “ live roadmap ” of existingIT applications.It offers IT professionals a graphical representationof all the elements of an application and theirinterdependencies, along with powerful navigationfacilities. IT teams can obtain overall or finer-grainedviews that give them a complete understanding oftheir application structure.

• CAST Impact Analyzer: change impact analysis.It provides instant ability to forecast modificationdemands. It quickly locates all application functionspotentially impacted, displays them in a comprehen-sive graphical view and pinpoints the lines of codethat need to be modified.

• … and a complete CASE to complement and fed-erate major RDBMS and 3/4GLs.With CAST DB-Builder, SQL-Builder and ReleaseBuilder, CAST offers a complete and integratedCASE dedicated to Oracle, Sybase and Microsoft SQLServer. IT professionals can design and deploydatabases as well as develop, debug and test SQL-related programs, while obtaining direct interfacewith major 3/4GLs.

CAST products are available for Microsoft and Sybase T-SQL, Oracle PL/SQL, 3/4 GLs such as Visual Basic,PowerBuilder and Intranet scripting languages.

?Founded in 1990 in Paris, CAST provides softwarefor IT professionals who are confronted with thegrowing inner complexity of Information Systems,and with the need for their evolution. These soft-ware products help them understand and master Cli-ent/Server and e-business applications and foreseethe consequences of even minor changes to theseapplications. CAST is also known as one of Europe’smost experienced consulting firms for complexRDBMS projects and design of distributed softwarearchitectures. CAST employs more than 150 pro-fessionals world-wide and already registers over 1000corporate customers world-wide.

ImpressumPowerTimes is an international PowerBuilder Journal pub-lished 6 times a year mainly destined to PB User Groupsworldwide. If your User Group does not subscribe toPowerTimes and you would like to receive it, then you cansubscribe to it on an individual basis.

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

Column responsibles:Little Helpers: Arthur Hefti

[email protected]

PFC Place: Boris [email protected]

Know How: Bernie [email protected]

Distributed Ways: Sean [email protected]

COM Knowledge Alan [email protected]

EASy Does IT William B. [email protected]

Subscription rates:Individual: US$ 45 per yearUser Group: US$ 750 per year

For user group subscriptions, the group has the right todistribute PowerTimes to their members in an electronicor printed form at no extra charge ! PowerTimes is pro-duced as an electronic document in Adobe Acrobat for-mat.

Disclaimer:Articles or opinions published in PowerTimes do not necessarilyreflect the opinion of the editorial team. They reflect the opinion ofthe submitter. We assume that the copyright of all submitted arti-cles is owned by or granted to the submitter. We must decline everyresponsability regarding technical correctness or truth of submit-ted articles and opinions.

TToooollooff tthheemmoonntthh

The bridge fromclient/server to Weband distributedapplications

PowerBuilder 7The good news is, the skills you’ve already learnedwill make you successful as you pursue newopportunities on the Internet. PowerBuilder 7.0 isdesigned to take you to the next phase of yourdevelopment career, with all the power andcapability that has made PowerBuilder the numberone choice for serious business applicationdevelopment year after year.

Client-Server Datenbanken Services

PowerGenThe essential tool forgenerating PBapplications.PowerGen's breakthroughtechnology gives youunprecedented flexibility andspeed when you buildingPowerBuilder applications.Recreate your libraries (PBLs)from object source. UsePowerGen to produce all yourPowerBuilder deliverables in asingle step.

PowerDocGet your self someextra sparetime.PowerDoc automates theentire process of generatinghigh quality, technicaldocumentation. With simple,easy-to-understandinstructions, you select thePowerBuilder application todocument, and PowerDocdoes the rest, including thepreparation of Table ofContents and Index.

ImagN’Show what you’vegot.The family of ImagN’ toolkitstakes the headache out ofintegrating graphics images intoyour Windows applications!Display BMP, PCX, DCX, GIF,JPEG, Progressiv JPEG, PIC,Targa, and TIFF images usingImagN’s powerful 16 & 32-bitengines.Super FAST viewing and printengine available as an ActiveXor DLL/VCL.

PB SpyGet an inner sightof what’s going onin your PB 6.5Application.More than a debugger. Theservice-based TreeView andListView controls are now PBSpy objects with MessagePump and other features. Just-in-time debugging has beenbuilt into the Message Serviceand the Action Menu so thatyou can break into the sourcecode.

Am Borsigturm 48D-13507 BerlinGermanyPhone: +49 (0)30 430 323 50Fax: +49 (0)30 430 323 55Email: [email protected]

Page 27

What is WizTom?WizTom is a translation tool that allows you to translatetext on any application without changing the source codeor even having the source code.

I tested WizTom Workbench 2.08 with the PowerBuilderExtension and the brand new WizTom Studio 3.0 thatwas still in beta during my tests. This article will de-scribe WizTom and my findings.

The WizTom WorkbenchWizTom Workbench is an environment that allows youto extract text from resources, running applications orPowerBuilder Libraries and then to translate them. It con-sists of different modules:

• Workspace: The workspace keeps together (as iconsin a window) all the documents you need to translatean application.

• Text Module: This module is an edit window withsome word processing features such as search andreplace.

• Thesaurus Module: The thesaurus stores all the in-formation about the application to translate, as wellas the text in the different languages. You will findout more details about the Thesaurus Module laterin the article.

• Script Module: In the script module a sequence oftasks to be carried out can be defined.

• Wizard: WizTom has various wizards that automatethe most important tasks. Again, more details a littlelater.

• Audit Module: This module is a Window that logsWorkBench messages in a file.

The ThesaurusThe thesaurus lies at the heart of the WizTom Workbench.It contains all the information needed to translate an ap-plication. It has 4 main sections:• External data sources: An external data source reads

data from another thesaurus.• Languages: Each language that will be used in the

thesaurus is defined in this section. The first lan-guage is the language the original application is writ-ten in and can’t be changed.

• Private Section: This section contains informationabout the executable that the thesaurus belongs to,some language flags and other information.

• Public Section: On the left side in the public sectionthe resources are listed. On the right side you can seethe text in the resources in a column view showing acolumn for each language.

WIZTOM TRANSLATION SOFTWARE reviewed by Arthur Hefti

Figure 1, WizTom Workbench showing the Thesaurus

Page 28

WizardsThere are wizards for translating a running application,reading the resources from applications, extracting textfrom PowerBuilder Libraries, translating thesaurus’ andmore! Let’s look at one of these in a little more detail.

PowerBuilder ExtractionAs a PowerBuilder programmer I was interested in thePowerBuilder source code extraction. After starting thewizard, it asks for the current language used in the appli-cation, the name of the PBL and the name of the thesau-rus in which to store the data. There’s also the option tonormalize text, that means that in texts like ‘File...’ only‘File’ gets translated and the ‘… ’ are added without trans-lation.

WizTom reads PowerBuilder objects using the ORCAinterface. The objects go through a parser that extractsthe text from these objects. The default parser can beenhanced to meet special needs.

The extracted texts are placed in the public section of athesaurus where the key is the PBL and the class name,the values are all the texts within this class. It’s also pos-sible to translate text with variables in it.

ControllerThe controller is used to change the language of a run-ning application. There are different options for usingthe controller, e.g. visible or invisible, setting the start-ing language, etc.

If you don’t have the source code for an application youmust use the controller. For applications where you havethe source code, WizTom provides an API which allowsyou to include calls to WizTom in your application, forexample through a menu.

The window in Figure 2 is the visible controller windowthat can be resized and moved as you like. By clicking ona flag, the application changes the language on the fly.Pretty neat!

This was done using the provided API. It only needs oneline of code to initialise the thesaurus, one line to set thelanguage and one line to terminate the thesaurus.

Figure 2, Controller window

WizTom StudioWizTom Studio is an integrated translation tool environ-ment. It’s available as an ANSI and Unicode version andcan be used to translate Windows applications and WebSites.

Studio LayoutAfter starting up, it docks itself to the right side of thescreen like the Microsoft Office Shortcut Bar. The widthof the Studio window can be changed but it’s very con-venient when your screen resolution is beyond 1024 x786 (what probably quite a lot of people using PB7 al-ready are using).

Figure 3, WizTom Studio 'bar'

Project HandlingIn the top section of WizTom Studio all running applica-tions are shown with their icons. By simply clicking onan icon a translation project is created or opened and setactive. Additionly you can also manage the projectsthrough the project button. There you can also set differ-ent properties for the current project.

After creating a new project, languages can be addedthrough the Languages button in the Basic Tools win-dow. When adding languages the Object Translation Toolswindow appears, showing the selected languages. Thisallows you to change anytime the language of the appli-cation to be translated.

By running the active project application, all the text au-tomatically gets captured and is available in the transla-tion editor immediately after a window appears.

When changing the text in the translation editor the text

Page 29

?Arthur Hefti is Certified PowerBuilder Instructor andCPD Professional. He owns CATsoft DevelopmentGmbH, a Software Development and Consulting com-pany specialized in custom made Client/Server andInternet/Intranet software. CATsoft is located in Swit-zerland and has offices in Zurich and Weesen. Arthurcan be reached by e-mail at [email protected].

gets changed in the application as well, supposed youshow the language you’re translating.

Control Resizing and MovingNot only can translation can be done, but it’s also possi-ble to resize and move controls in a window. You do thisby simply dragging the Finder Tool icon from the ObjectTranslation Tool and dropping it on the relevant control.

After dropping the Finder Tool the control can be resizedand moved in the window as needed to make fit the trans-lated text.

Figure 4, Finder Tool for resizing controls

Additional ToolsWizTom Studio contains some extra tools to make lifeeasier:• Version Control: It creates a numbered backup of

the current thesaurus.• Thesaurus Editor: This allows working with a the-

saurus like in the WizTom Workbench• Documentation Viewer: It shows documentation

in a browser window of WizTom.

ConclusionWizTom is a great product that allows you to translateapplications without impacting the source code. The re-ally big advantage is that the person that translates theapplication can run it anytime and see the translation di-rectly.

WizTom Workbench comes with good user documenta-tion, making the start with it quite easy. The only draw-back of the product is that you need a Dongle to run it.

As I tested the beta version of WizTom Studio, I had acouple of questions and remarks about it. I sent emails tothe responsible person and got either an answer within24 hours or he called me back to explain or discuss theissue.

Technical Information• How does it work? WizTom intercepts the messages

that an application sends to the screen, translatesthem and sends them back to the screen.

• What happens to text appearing more than once?The text is stored in the thesaurus only once.

• What can be done if the new string is longer thanthe old one? It’s possible to resize and move the con-trols of an application without making any changesto the source code.

• Are non-Latin languages supported? Any code pagecan be used: ANSI, DBCS, UNICODE.

• What is the additional deployment size ofWizTom? Without Controller: 350 KB, with Con-troller 500 K, a thesaurus of 50 Screens in 2 Lan-guages uses 100K in the memory.

• What PowerBuilder Versions are Supported? PB4,PB 5 16&32Bit, PB6 and PB7.

• What is the performance impact? The perform-ance impact is so little that you won’t feel a differ-ence whether the text is being translated or not

• What sort of companies would use it? Mostly soft-ware publishers and large accounts e.g. banks,insurances etc.

More Information on WizArt Software• Web:

http://www.wizart.com• Headquarters-UK

[email protected]: +44 (0)171 407 6989

[email protected]: +1 (305) 716 4206

• France, Switzerland, [email protected]: +33 (0)1 55 27 39 12

For other subsidiaries please see the WizArt Web site.

Page 30

IntroductionBubble Help allows you to show a small yellow windowwith some informational text, known as Bubble Help orTooltips, as soon as the mouse stays on a PowerBuildercontrol or object within a DataWindow for a short time.

DescriptionBubble Help consists of a Non-Visual User Object and aPopup Window. The code is pure PowerBuilder, exceptfor some calls to the windows API.

When the mouse is positioned over a control or an object,for example a column in a DataWindow object, and staysthere for a certain (customizable) time the Bubble Helpappears.

Figure 1, BubbbleHelp example

Technical DetailsBubble Help works with PCF (as an instance defined inthe application object) and non-PFC applications (througha global variable) as well. Each window that wants to useBubble Help simply registers itself in its open event.

Bubble Help uses the values in the tag property of thecontrol to show the text. It can be configured to showeither the whole tag or only the value of the Bubble Helpkey.

Bubble Help works even with User Objects on windowsand nested Tab Pages. There is a limitation on the defaultnesting level. This, like many other features, can be cus-tomized in Bubble Help. And even better: As it comes

with the source code you can customize Bubble Help ex-actly the way you want.

Installation and HelpBubble Help comes in a ZIP file containing a PBL withthe Bubble Help NVO, a window and a small demo ap-plication. As the demo doesn’t require a data source orany additional DLLs, you can unpack the archive andrun it straight away.

On the web site you can find, in addition to the ZIP file,very detailed instructions on how to include Bubble Helpin your application and customize it for your needs.

ConclusionBubble Help is easy to use and gives your application areally professional touch with very little programmingwork .

Pricing and AvailabilityBubble Help is free and can be used in any application.However, if you plan to distribute the source code youshould read the copyright notice in the constructor eventof nvo_bubblehelp.

Bubble Help is available from:

Cary Hakes Consulting, Inchttp://lonestar.texas.net/~chakes/.

BUBBLE HELPby Cary Hakes

reviewed by Arthur Hefti

The Toronto PowerBuilder User Group, in conjunction with Sybase,PPPRRREEESSSEEENNNTTTSSS a FFFUUULLLLLL DDDAAAYYY of PowerBuilder education with technical presentations

on:

PowerJEAServer

PowerBuilder 7/8Web DataWindow

Performance & TuningMoving PowerBuilder To The Web

Building Real-World Distributed Systems

FFFEEEAAATTTUUURRRIIINNNGGG world class instructors Larry Cermak and Carson Hager.

GGGRRREEEAAATTT PPPRRRIIIZZZEEESSS to win, including EA Studio and one of HP’s bestphoto-quality DeskJet printers.

VVVIIISSSIIITTT www.interlog.com/~tpbug/conference to register.

PowerTimes provides this space to the subscribinguser groups to publish their news, announcementsand other communications to their members. Pleasesend your material to the editor or the co-editor ofPowerTimes (addresses under “Impressum”).

If your user group doesn’t subscribe to PowerTimesyet, please contact us to get the very reasonablerates or check out our web site at:

http://www.powertimes.com

Baltimore PowerBuilder User GroupThe Baltimore Area Power-Builder Users Group(BAPBUG) meets the firstWednesday of the even num-bered months at the Social Se-curity Administration OAGbuilding in Woodlawn, Mary-land.

http://www.geocities.com/Sili-conValley/Bay/8680

President: Debbie [email protected]

Vice President: Bill [email protected]

Secretary: Gordon [email protected]

Treasurer: Fred [email protected]

The members of the Baltimore PowerBuilder UserGroup receive PowerTimes thanks to a generoussponsorship from

http://www.ctpartners.com

Specializing in the Sybase, SilverStream andMicrosoft families of products, Corporate Techno-logy Partners offers a full line of client/server andweb application development and training services.Point your browser to http://www.ctpartners.com/asp/tips.asp for frequently updated, cutting edgewhitepapers, and a variety of helpful, technical tipsfrom industry pros. Visit today to see how we canhelp your organization realize the most effectiveemerging technology solution.

• The members of ANYPBUG are dedicated to theadvancement of their skills both professionallyand technically.

• ANYPBUG is a not-for-profit organization esta-blished as a forum to help members realize theirgoals.

• Through regular meetings and events, memberslearn the latest techniques and trends surroun-ding the PowerBuilder product. Members alsohave a chance to view emerging technologiesbefore they become prominent in the work place.

• Membership is free! Several forward thinkingorganizations pay an annual fee to help supportthe activities of ANYPBUG.

Albany New York PowerBuilder User Group

President: Greg [email protected]

Vice President: Ed [email protected]

Treasurer: Danna [email protected]

Secretary: Steve [email protected]

Page 32

ChicagoLand PowerBuilder User GroupThe officers of the CPBUG are:

President Michael Baraz (630) 235-4529Vice-President Peter Vassilatos (312) 856-6720Secretary Jeff Barnes (847) 549-7765Treasurer Nicky Petrila (630) 792-5073

The CPBUG website can be found at:

http://www.cpbug.org

The Secretary of the ChicagoLand PowerBuilderUser Group, Jeff Barnes, can be reached at thefollowing e-mail address: [email protected].

Central Ohio PowerBuilder User GroupThe Central Ohio PowerBuilder Users Group gene-rally meets during the second week of odd numbe-red months. Meetings alternate between memberdemos and product presentations.

Location: Bank One Offices 1111 Schrock Road, Columbus, OH

Refreshments: 6:00 - 6:15pm, Presentation: 6:15

Our mailing address is:Central Ohio PowerBuilder User GroupP.O. Box 363Worthington, OH 43085-0363

Internet: http://www.cmhpbug.com

President: Vince [email protected] - 220 7900

Vice President: Jeff [email protected] - 213 5329

Secretary: Jim [email protected] - 418 1748

Treasurer: Todd [email protected] - 418 1748

Greater Boston PowerBuilder Users Group

The officers of the User Group are:

President: Dan Murphy

Vice President: Olga I. [email protected]

Treasurer: Karen [email protected]

Secretary: Susan [email protected]

The members of the Greater Boston PowerBuilderUser Group receive PowerTimes thanks to a gene-rous sponsorship from KEVSystems Inc., locatedin Newton, MA.

KEVSystems is a PowerSoft Consulting Partnerand provides system design and integration assi-stance for financial, personnel, and medical sy-stems.

Our staff, made up exclusively of Certified Power-Builder Developers, has over 20 years experiencein securities processing systems and database de-sign. We have worked on systems for trust accoun-ting, shop floor management, personnel, and three-tiered integration.

KEV Systems, Inc.65 Stony Brae Rd.Newton, MA. 02161-1728

Phone: (617) 964 1426 or (800) 376 5755Fax: (617) 527 0090

Page 33

Club Fibonacci - Club des Utilisateurs Sybase FranceLe club francais des utilisateurs PowerBuilder n'e-xiste plus en France. Il a été remplacé par le ClubFibonacci: le club des utilisateurs Sybase, qui estgéré directement par Sybase France.

Les membres du Club Fibonacci reçoivent Power-Times grace au sponsoring généreux de la sociétéNOVALYS.

(The PowerBuilder User Group France doesn't exi-ste anymore. It has been replaced by the "ClubFibonacci" - the Sybase Users Group in France

The members of the Club Fibonacci (France) re-ceive PowerTimes thanks to a generous sponsor-ship from Novalys.).

NOVALYS met en place desoutils, méthodes et normes dedéveloppement pour la réussite devos applications. Les consultants

de Novalys accompagnent et certifient vos projetspour garantir leur réussite technique.

NOVALYS creates, distributes and supportscomplementary tools for PowerBuilder and is thedistributor of HOW from Riverton Software inFrance.

Visit our website at: http://www.novalys.fr.

Novalys SA140 rue Galliéni92100 Boulogne-Billancourt / France

Tel : 01.46.99.66.20 Fax: 01.46.99.08.92

Page 34

PowerBuilder User Group Italia

Vogliamo ricordare a tutti gli utilizzatori di Power-builder di lingua italiana che l'iscrizione al Power-builder User Group Italia e' Gratuita, basta soloregistrarsi sul nostro web e si ha diritto a parteci-pare ai forums in italiano dove scambiare idee suPb con altri utenti.

E-mail: [email protected]: 0331/700189Internet: http://www.telemacus.it/pbug/pbug.htm

The members of the PowerBuilder User GroupItaly receive PowerTimes thanks to a generoussponsorship from Sybase Italia.

L' abbonamento a PowerTimes per gli iscritti delPower Builder User Group Italia e' stato gentil-mente offerto da Sybase Italia.

Page 35

Oregon PowerBuilder User Group

The Oregon PBUG meets every other month,usually from 6-8pm on the first Wednesday ofodd-numbered months (January, March, May, July,September, and November). We meet in downtownPortland (see web site for map and topic informa-tion.)

Web site address:

http://www.teleport.com/~wagnerc/pbug

1999 Officers: President: Jordan Suhrstedt

[email protected] President: Brad Ashton

[email protected]: Frank Calfo

[email protected]: Julie Beranek

[email protected]

The members of the Oregon PowerBuilder UserGroup receive PowerTimes thanks to a generoussponsorship from the following two companies:

• Client Server Group, Inc.• MetaCorp Strategies International

Client Server Group, Inc.,is a leading provider of software development andconsulting services serving the Pacific Northwest.In addition, CSG is a supplier of industry leadingclient/server software products, software develop-ment tools, and related training.

Client Server Group, Inc.5201 SW Westgate DriveSuite 208Portland, OR 97221Phone: (503) 292-0859 Fax: (503) 292-1485http://www.csgpro.com

MetaCorp Strategies Internationalwas founded in 1987 and is an information systemsconsulting firm engaged in all aspects of systemsdesign, development, integration, education, andmanagement. MetaCorp Strategies is headquarte-red in Westport, Connecticut with sales offices inWallingford, West Hartford and Westport,Connecticut, Portland, Oregon and Scottsdale, Ari-zona.

MetaCorp Strategies International10300 SW Greenburg RoadSuite 470Portland, OR 97223Phone: (503) 452-6333 Fax: (503) 452-6337http://www.metacorp.com

New Jersey PowerBuilder User Group

The President of the New Jersey PowerBuilderUser Group, Guy Yasika, can be reached at thefollowing e-mail address: [email protected]

The NJPBUG website can be found at:http://www.njpbug.org

The members of the New Jersey PowerBuilder UserGroup receive PowerTimes thanks to a generoussponsorship from Dynamic Technology Group.

Dynamic Technology Group, Inc.1055 Parsippany Blvd., Suite 501-26Parsippany, NJ 07054

Phone: 973.402.5600Fax: 973.402.5620

http://www.dynamictechgroup.com

Page 36

Ottawa PowerBuilder User GroupThe Ottawa PowerBuilder User's Group iscomposed of Ottawa-area Information Sy-stems professionals who are interested instaying on the leading edge of Power-

Builder and client/server development.

The group meets on the 2nd Wednesday of eachmonth, from September through May. At eachmeeting, a new and interesting topic is presentedand discussion is encouraged. These meetings are agreat place to meet fellow users, discuss issues andideas, and network for future opportunities.

The Ottawa PowerBuilder User Group website canbe found at http://www.opbug.com

President: Carole Hargrave [email protected]

VP Public Relations: Ron Guilbault [email protected]

VP Administration: Bill Stevens [email protected]

Treasurer: Wade Kornik [email protected]

Secretary: Paul Grawal

PowerBuilder User Group NorwayFormålet med vår brukerforening er todelt:1) Den skal være et kompetanseskapendeforum for brukere av Powersoft-produktene2) Den skal være et kontaktpunkt mellom bru-kere og Sybase Norge AS når det gjelder fors-lag til endringer/forbedringer av produkter ogrelaterte tjenester.

De fleste arrangementer i brukergruppens regivil foregå på kveldstid. Arrangementene tarsikte på at man skal kunne utveksle erfaringerog kunnskap gjennom at brukere presenterersine løsninger, tredjepartsleverandører presen-terer sine produkter, konsulenter viser prosjek-ter de har deltatt i etc. Neste års norske bruker-konferanse vil bli arrangert i samarbeid medSybase Brukergruppe Norge.

Brukerforeningen vil også ha noen arrangemen-ter i samarbeid med Sybase Norge AS slik sompresentasjoner av nye releaser o.l. Ønsker dumer informasjon om Powersoft BrukerforeningNorge, ta kontakt med Thomas Revetal (ZemaAS) på tlf. 905 64 568.

Thomas Revetal Zema AS Tlf. 90 56 45 68Stig Melling Avenir ASA Tlf. 23 15 75 00Rune Nerhagen WM-Data Tlf. 22 57 70 00Wenche Fronth Hærens Forsynings Kommando Tlf. 23 09 63 86Øystein Rolfsen De Norske Bokklubbene Tlf. 22 02 20 00Leif Aksel Grøthe Online Consulting Partner AS Tlf. 90 52 74 94

Arrangementer i brukerforeningens regi:25. november Teknisk kveld og julebord for foreningens medlemmer.20. oktober Teknisk kveld. Vi tar for oss et tema, og går i dybden på dette.

Page 37

Oklahoma PowerBuilder User Group

We have regular monthly meeting on the FirstWednesday of every month.

President: Dianna DeMottoPhone: (405)360-3386Email: [email protected]

Vice President: William Walter

Secretary: Scott Chaney

Information on meetings can be found on ourwebsite at:

http://www.okcpbug.iwarp.com

The members of the Oklahoma PowerBuilderUser Group receive PowerTimes thanks to agenerous sponsorship from Rattan Consultingfrom Oklahoma City.

Rattan Consulting is a Business Consulting com-pany.

We specialize in designing and programming cu-stom window based & internet applications. We haveexperience with EA Studio, EA Server, Powerbuil-der, Visual Basic and C /C++. We also have staffspecially trained and experience in Data Warehou-sing.We are a Sybase Premier Partner and sell Sybasesoftware at discounted rates so call us for all yoursoftware needs at (405) 810-8005.

Rattan Consulting4334 NW Expressway Suite 259Oklahoma City, OK 73116

Phone: (405) 810-8005Fax: (405)810-8097Email: [email protected]

Toronto PowerBuilder User Group

President: Paul [email protected](416) 866-5493

Vice President: Ioana Naum

MembershipAdmin.: Debbie Brittain

Assistant: Haibo [email protected]

Assistant: Earl [email protected]

Assitant: Eugene [email protected]

The members of the Toronto PowerBuilder UserGroup receive PowerTimes thanks to a generoussponsorship from SoftApproach Corporation.

SoftApproach Corporation is a software vendor. Itoffers PB Spy, a debugging tool for PFC-basedPowerBuilder applications. It helps you monitoryour application process and view your data easily.Plus it can detect memory leaks.

If you are interested in using PB Spy to promoteyour user group activities, please contact:Paul Bis, President of the Toronto PowerBuilderUser Group at [email protected]

For more information about the product, pleasecheck the following website:

http://www.softapproach.com

St. Louis PowerBuilder User GroupWe meet on the 3rd Tuesday of every other month,beginning in January at Monsanto CorporateHeadquarters (directions on the web page). Themeetings begin at 5:30 pm.

The new website is at http://www.stlpbug.org.

President: Jay [email protected]

Vice President: Allen [email protected]

Secretary: Neal [email protected]

Treasurer: Dave [email protected]

The members of the St. Louis PowerBuilder UserGroup receive PowerTimes thanks to a generoussponsorship from Solutech, Inc. in St. Louis.

Solutech is a company specializing in client/server,web application development, technical training,vendor certified consulting and software solutions.

Solutech maintains strategic partnerships with lea-ding software vendors such as Microsoft, Oracle,Rational, Powersoft and Sybase. These partnershipsgive you a direct link to new product informationand on-going technology developments. Solutech isa local extension of our vendors, bringing you peaceof mind in a constantly changing environment.

Solutech has nine offices and training centers. For acomplete list of our free seminars and vendor certi-fied training classes; or to view the latest companyinformation on Solutech, our locations, and ourservices, please visit us on the web atwww.solutechinc.com.

UK PowerBuilder User GroupAn independent group formedin 1992, PBUG currently has amembership approaching 150companies. Events are heldthree times each year withattendances in the region of200 at each event. The groupis self-funding and receives

excellent technical support from Sybase.

PBUG Council:

Chairman: Warren Clayburn [email protected]

Treasurer: Ian [email protected]

Secretary: David [email protected]

Member: Brick Du [email protected]

The member council runs PBUG, but the day-to-daywork is managed by Pb Associates.

Anne Bocock is responsible for most aspects of thegroup including organising the conferences andputting together PBulletin. Judy Barnett handles allaccounting matters. You can reach Anne and Judyat the PBUG office.

Telephone: 0181 421 3533Fax: 0181 420 1420Email: [email protected]: http://www.pbug.co.uk

Postal address:Suite A8, Kebbell HouseCarpenders ParkWatford, Herts. WD1 5BE

Page 38

Sybase and PowerBuilder User Group Switzerland

President: Rolf André [email protected]

Vice President: Andreas [email protected]

Treasurer: Martin [email protected]

Secretary: Celia [email protected]

Member: Werner [email protected]

At the general assembly and user group meeting onOctober 21, the steering committee has changed.Arthur Hefti has retired after 5 years on duty andWerner Warger has joined the steering committee.Thanks to both of them. More information will beavailable soon at the user group’s website at:

http://www.spbug.ch

The members of the Sybase and PowerBuilder UserGroup Switzerland receive PowerTimes thanks toa generous sponsorship from CATsoftDevelopment GmbH.

CATsoft Development GmbH is a Swiss Client/Server and Internet/Intranet company specializingon PowerBuilder and JAVA development. Wehave experience in PowerBuilder on the Internet(Web.PB), Powersoft's PFC and HOW. We also doCold Fusion and SilverStream.

CATsoft Development GmbHAmdenerstrasse 28aCH-8872 Weesen

Phone: +41-55-616 51 11Fax: +41-55-616 51 14Web: www.catsoft.ch

CATsoft

Page 39

PowerBuilder User Group Germany e.V.PBUGG e.V.c/o Power PeopleLudwin FeitenAm Borsigturm 48D-13507 BerlinTel.: +49 (0)30 4303 2350Fax: +49 (0)30 4303 2355

Besuchen Sie die Homepageder PowerBuilder User GroupGermany:http://www.pbugg.de