Technology and Community

Jim O'Neil

Subscribe to Jim O'Neil: eMailAlertsEmail Alerts
Get Jim O'Neil: homepageHomepage mobileMobile rssRSS facebookFacebook twitterTwitter linkedinLinkedIn

PowerBuilder: Article

EAServer Problem Analysis & Troubleshooting

Part Art, Part Science Part 1

If that list of profiles is forwarded to service a request from an EAServer client outside the firewall, the instantiation will fail because these private Internet addresses aren't reachable from the client. When using firewalls that do network-address translation from publicly accessible IP addresses to private IP addresses, you must configure your clients' host file to do reverse-address translation or use the ORBProxyHost and ORBProxyPort parameters when initializing the client ORB.

Assuming that the server on which the component is to be instantiated is indeed reachable, let's look at how EAServer loads the component implementation for a PowerBuilder component. Understanding the four main steps of this process, as outlined here, can help identify the source of the errors if the instantiation fails:

  1. EAServer determines the implementation model via the component's property. For PowerBuilder components, this value is always pb.
  2. EAServer next determines the PowerBuilder version in which the component was implemented by examining the property. If the property isn't specified, the component is assumed to have been built using PowerBuilder 7.
  3. If it hasn't been loaded already, EAServer initializes the PowerBuilder VM. Each component instance is allocated a unique session in the one instance of the PowerBuilder VM hosted by the EAServer process.
  4. Finally, the PowerBuilder VM determines what PBDs to load for the component by consulting the and properties. The library list can contain two kinds of entries:
  • PBDs or PBLs prefaced by a $ are loaded from an EAServer repository subdirectory of that component named Cn, where n is the value of the pb.cookie property (and increases for each deployment from PowerBuilder).
  • PBDs or PBLs with explicit or relative paths not prefaced by the $ are located according to normal pathing rules for the host operating system. To use this approach, you must manually change the librarylist property in Jaguar Manager; furthermore, if you redeploy the component from PowerBuilder later, your changes will be overwritten.
When these steps fail, it's usually a problem in the EAServer configuration. The error in the EAServer log will provide insight into the actual cause of the failure. The client application, on the other hand, will experience the generic CORBA::OBJECT_NOT_EXIST or CORBA::TRANSACTION_ROLLEDBACK exceptions.

Invoking Component Methods
Assuming that everything has been error-free so far, the next step is the actual method invocation. Although the success of the method execution depends largely on whether the developer correctly implemented it, there are at least two circumstances in which a method invocation might fail before it even gets into the PowerBuilder component's code.

Failed invocations can occur in the development cycle when obsolete proxy objects are used. Whenever you modify the component interface on EAServer, you must be sure to regenerate the proxies for those interfaces on PowerBuilder. The PowerBuilder proxies are merely remote wrappers for the component's functionality that the client application currently thinks is available. Any attempt to call a method that doesn't exist (or no longer exists) results in a CORBA::TRANSACTION_ ROLLEDBACK or CORBA::BAD_OPERATION exception.

In a production environment, an instantiation can fail when valid component references become invalid because, say, the EAServer on which the instance was hosted has failed. If you have configured the component for failover (by setting the property) and the component is marked as being automatically demarcated/ deactivated (the property is false), successive attempts to access the component automatically fail over to the other EAServer instances returned in the original list of profiles derived from the lookup request. If failover isn't configured or there are no remaining servers in the cluster that can host the requested component, a CORBA::OBJECT_NOT_EXIST or CORBA::COMM_FAILURE exception will occur when the client invokes the method on that component.

This article is based on PowerBuilder 9 Internet and Distributed Application Development by various authors (ISBN 0672324997), published by Sams Publishing.

More Stories By Jim O'Neil

Jim is a Technology Evangelist for Microsoft who covers the Northeast District, namely, New England and upstate New York. He is focused on engaging with the development community in the area through user groups, code camps, BarCamps, Microsoft-sponsored events, etc., and just in general serve as ambassador for Microsoft. Since 2009, Jim has been focusing on software development scenarios using cloud computing and Windows Azure. You can follow Jim on Twitter at @jimoneil

Comments (0)

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.