Providing support for instance pooling – PB Docs 70

Providing support for instance pooling

Benefits of instance pooling

Jaguar components can optionally support instance pooling. Instance
pooling
allows Jaguar clients to reuse component instances.
By eliminating the resource drain caused by repeated allocation
of component instances, instance pooling and improves the overall
performance of a Jaguar server.

Specifying pooling options in the wizards

When you create a Jaguar component using one of the PowerBuilder
wizards, you have the option to specify one of the following pooling
options for the component:

Pooling option Description
Supported The component is always
pooled
after each client use. When this option is selected, the CanBePooled
event is not triggered for the componentThis option has the effect of setting the component’s
pooling property to True. If the Automatic Demarcation/Deactivation setting
for the component is enabled, instances are pooled after each method
invocation. If the Automatic Demarcation/Deactivation setting
is disabled, instances are pooled when the component calls the SetComplete
(or SetAbort) method of the TransactionServer context object
Not supported By default, the component is not pooled
after each client use. However, you can override the default behavior
by scripting the CanBePooled event. In the CanBePooled event, you
can specify programmatically whether a particular component instance should
be pooled. If you script the CanBePooled event, this event is triggered
after each client useThis option has the effect of setting the component’s
pooling property to False

Controlling the state of a pooled instance

When you create a Jaguar component that supports instance
pooling, that component may need to reset its state after each client
has finished using the pooled instance.

To allow you to control the state of a component, Jaguar triggers
one or more of the following events during the lifecycle of the
component:

Event PBM code
Activate PBM_COMPONENT_ACTIVATE
CanBePooled PBM_COMPONENT_CANBEPOOLED
Deactivate PBM_COMPONENT_DEACTIVATE

When the component’s pooling option is set to Supported
(the pooling property is set to True), you may need to script the
Activate and Deactivate events to reset the state of the pooled
component. This is necessary if the component maintains state in
an instance, shared, or global variable.

When the component’s pooling option is set to Not
Supported (the pooling property is set to False), you can optionally
script the CanBePooled event to specify whether a particular component
instance should be pooled. If you script the CanBePooled event,
you may also need to script the Activate and Deactivate events to
reset the state of the pooled component. If you do not script the
CanBePooled event, the component instance is not pooled.

The Jaguar Component Start and Object wizards automatically
include the Activate and Deactivate events to a custom class user
object that will be deployed as a Jaguar component. If you want
to script the CanBePooled event, you need this event by hand. If
you do this, you need to be sure to map the event to the correct
PBM code.

note.gif Constructor and Destructor are fired once When instance pooling is in effect, the Constructor and Destructor
events are fired only once for the component. The Constructor and
Destructor events are not fired each time a new client uses the
component instance. Therefore, to reset the state of a component
instance that is pooled, you need to add logic to the Activate and
Deactivate events, not the Constructor and Destructor events.

The lifecycle of a component

To understand how instance pooling works, you need to understand
the lifecycle of a component instance. Here’s what happens
during the component lifecycle:

  1. The
    component is typically instantiated on the first method invocation. When
    this occurs on a component developed in PowerBuilder, Jaguar creates
    a new PowerBuilder session for the component to run in.
  2. The PowerBuilder session creates the instance of
    the PowerBuilder nonvisual object that represents the Jaguar component.
    Creating the object causes the Constructor event to
    be fired.
  3. After the object has been instantiated, Jaguar triggers
    the Activate event on the nonvisual object
    to notify the object that it is about to be used by a new client.
    At this point, the component must ensure that its state is ready for
    execution.
  4. Jaguar then executes the method called by the client
    on the component.
  5. When the component indicates that its work is complete,
    Jaguar triggers the Deactivate event to allow
    the component to clean up its state. If the Automatic Demarcation/Deactivation
    setting for the component is enabled, the Deactivate event is triggered
    automatically after each method invocation. If the Automatic Demarcation/Deactivation
    setting is disabled, the Deactivate event is triggered when the
    component calls the SetComplete (or SetAbort) method of the TransactionServer
    context object.
  6. If you’ve selected the Not Supported pooling
    option (or set the component’s pooling property to False)
    and also scripted the CanBePooled event,
    Jaguar triggers this event to ask the component whether it is able
    to be pooled at this time. The CanBePooled event allows the component
    instance to selectively enable or refuse pooling.
    The return value of the CanBePooled event determines whether
    the component instance will be pooled. A return value of 1 enables
    pooling; a return value of 0 disables pooling. If the CanBePooled
    event has not been scripted, then by default the instance will not
    be pooled.

    note.gif What happens when the pooling property is enabled When you select the Supported pooling option (or set the component’s pooling
    property to True), component instances are always
    pooled
    and the CanBePooled event is never triggered.

  7. If an instance is not pooled after deactivation,
    Jaguar triggers the Destructor event. Then
    it destroys the PowerBuilder object and terminates the runtime session.

Document get from Powerbuilder help
Thank you for watching.
Was this article helpful?
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x