fire and forget method call

Hi-
I'm looking for some design pattern suggestions.  I have a Jaguar method
which executes very slowly.  Whether or not the method executes properly
is irrelevant to my client; therefore, I want some sort of "fire and
forget" design pattern.  I understand spawning a new thread in the
Jaguar component will not work and causes problems in the server.  I
have looked at the asynchronous Events sample, and can see that I might
be able to use some variation on the technique.  However, in the
example, there is a separate application responsible for handling a
queue of requests (and in a sense has the desired affect of creating the
separate request handling thread.)  How can I achieve a similar model
inside Jaguar (without having to create a separate "server" app)?

My initial idea would be to create a scheduled jaguar service which runs
in an infinite loop, waiting for notification of changes to the queue,
and processing them as they occur.  However, I'm not sure how one can
create a schedule service which runs only once (basically, after server
start up.)

Thanks in advance for your suggestions,

Randy
0
Randy
11/24/1998 1:27:51 AM
sybase.easerver 11371 articles. 0 followers. Follow

10 Replies
787 Views

Similar Articles

[PageSpeed] 8
Get it on Google Play
Get it on Apple App Store

In your case where quality of service is not an issue, why not have a single
queue component which runs as a service.  In this service component store a
message inside a stack.  In the run() method, wake up every few mintes and
check the stack, popping jobs off as they come.  For better quality of
service, put it in a database table rather than a stack.

We are looking into being able to spawn a user defined number of any service
component so you could have say a dozen of these dispatchers checking the
same queue (static member).

Would this work?  The other option is an async thread on the client side.

Dave Wolf
EAServer Product Team

Randy Puro wrote:

> Hi-
> I'm looking for some design pattern suggestions.  I have a Jaguar method
> which executes very slowly.  Whether or not the method executes properly
> is irrelevant to my client; therefore, I want some sort of "fire and
> forget" design pattern.  I understand spawning a new thread in the
> Jaguar component will not work and causes problems in the server.  I
> have looked at the asynchronous Events sample, and can see that I might
> be able to use some variation on the technique.  However, in the
> example, there is a separate application responsible for handling a
> queue of requests (and in a sense has the desired affect of creating the
> separate request handling thread.)  How can I achieve a similar model
> inside Jaguar (without having to create a separate "server" app)?
>
> My initial idea would be to create a scheduled jaguar service which runs
> in an infinite loop, waiting for notification of changes to the queue,
> and processing them as they occur.  However, I'm not sure how one can
> create a schedule service which runs only once (basically, after server
> start up.)
>
> Thanks in advance for your suggestions,
>
> Randy

0
David
11/24/1998 4:45:41 AM
Actually if you want a service component to run only once, dont loop inside
run().  This will accomplish that.

so

public class SillServiceImpl
{
    public void start()
    {}
    public void stop()
    {}

    public void run()
    {
        System.out.println("Just wanted to say hello!");
    }
}

Dave Wolf
EAServer Product Team

markf wrote:

> Randy,
> How about specifying a handler to respond to Jaguars Start event handler ?
> This is trggered when a request to start the jaguar server is made
> Would that meet your objective to:
> >create a schedule service which runs only once (basically, after server
> >start up.) ?
>
> hndler launching your process
> Randy Puro wrote in message <365A0B97.857E59C4@sybase.com>...
> >Hi-
> >I'm looking for some design pattern suggestions.  I have a Jaguar method
> >which executes very slowly.  Whether or not the method executes properly
> >is irrelevant to my client; therefore, I want some sort of "fire and
> >forget" design pattern.  I understand spawning a new thread in the
> >Jaguar component will not work and causes problems in the server.  I
> >have looked at the asynchronous Events sample, and can see that I might
> >be able to use some variation on the technique.  However, in the
> >example, there is a separate application responsible for handling a
> >queue of requests (and in a sense has the desired affect of creating the
> >separate request handling thread.)  How can I achieve a similar model
> >inside Jaguar (without having to create a separate "server" app)?
> >
> >My initial idea would be to create a scheduled jaguar service which runs
> >in an infinite loop, waiting for notification of changes to the queue,
> >and processing them as they occur.  However, I'm not sure how one can
> >create a schedule service which runs only once (basically, after server
> >start up.)
> >
> >Thanks in advance for your suggestions,
> >
> >Randy

0
David
12/16/1998 10:09:18 PM
Randy,
How about specifying a handler to respond to Jaguars Start event handler ?
This is trggered when a request to start the jaguar server is made
Would that meet your objective to:
>create a schedule service which runs only once (basically, after server
>start up.) ?



hndler launching your process
Randy Puro wrote in message <365A0B97.857E59C4@sybase.com>...
>Hi-
>I'm looking for some design pattern suggestions.  I have a Jaguar method
>which executes very slowly.  Whether or not the method executes properly
>is irrelevant to my client; therefore, I want some sort of "fire and
>forget" design pattern.  I understand spawning a new thread in the
>Jaguar component will not work and causes problems in the server.  I
>have looked at the asynchronous Events sample, and can see that I might
>be able to use some variation on the technique.  However, in the
>example, there is a separate application responsible for handling a
>queue of requests (and in a sense has the desired affect of creating the
>separate request handling thread.)  How can I achieve a similar model
>inside Jaguar (without having to create a separate "server" app)?
>
>My initial idea would be to create a scheduled jaguar service which runs
>in an infinite loop, waiting for notification of changes to the queue,
>and processing them as they occur.  However, I'm not sure how one can
>create a schedule service which runs only once (basically, after server
>start up.)
>
>Thanks in advance for your suggestions,
>
>Randy


0
markf
12/16/1998 11:52:43 PM
The message below states that:

"I understand spawning a new thread in the
>> >Jaguar component will not work and causes problems in the server.  "

Which I would take to mean "You must not create a new thread programatically in
a Java component".

I cannot find any reference to this in the documentation, so I would appreciate
it if someone could confirm whether or not this is the case, or direct me to
documentation that does so.

Thanks,

Ian Leader

On Wed, 16 Dec 1998 17:09:18 -0500,
 in powersoft.public.easerver
David Wolf <dwolf@sybase.com> wrote: 
>Actually if you want a service component to run only once, dont loop inside
>run().  This will accomplish that.
>
>so
>
>public class SillServiceImpl
>{
>    public void start()
>    {}
>    public void stop()
>    {}
>
>    public void run()
>    {
>        System.out.println("Just wanted to say hello!");
>    }
>}
>
>Dave Wolf
>EAServer Product Team
>
>markf wrote:
>
>> Randy,
>> How about specifying a handler to respond to Jaguars Start event handler ?
>> This is trggered when a request to start the jaguar server is made
>> Would that meet your objective to:
>> >create a schedule service which runs only once (basically, after server
>> >start up.) ?
>>
>> hndler launching your process
>> Randy Puro wrote in message <365A0B97.857E59C4@sybase.com>...
>> >Hi-
>> >I'm looking for some design pattern suggestions.  I have a Jaguar method
>> >which executes very slowly.  Whether or not the method executes properly
>> >is irrelevant to my client; therefore, I want some sort of "fire and
>> >forget" design pattern.  I understand spawning a new thread in the
>> >Jaguar component will not work and causes problems in the server.  I
>> >have looked at the asynchronous Events sample, and can see that I might
>> >be able to use some variation on the technique.  However, in the
>> >example, there is a separate application responsible for handling a
>> >queue of requests (and in a sense has the desired affect of creating the
>> >separate request handling thread.)  How can I achieve a similar model
>> >inside Jaguar (without having to create a separate "server" app)?
>> >
>> >My initial idea would be to create a scheduled jaguar service which runs
>> >in an infinite loop, waiting for notification of changes to the queue,
>> >and processing them as they occur.  However, I'm not sure how one can
>> >create a schedule service which runs only once (basically, after server
>> >start up.)
>> >
>> >Thanks in advance for your suggestions,
>> >
>> >Randy
>
0
Ian
12/21/1998 10:10:33 AM
This is the case, and unfortunatly did not make it into the documentation.  We have
corrected the documentation and are working on two solutions:

1) In the current  EBF to 2.0, we have included the ability to spawn X instances of
a service component.  Since a service component is a shared instance (singleton)
You will have X threads running in it concurrently

2) In the next EBF, we will have added a property to the Java ORB to allow you to
specify you are inside Jaguar.  Rather than using the in-memory orb/marshalling,
this will force the ORB runtime to reconnect to jaguar as if it was a client
itself, this alleviating the issue.

Dave Wolf
EAServer Product Team

Ian Leader wrote:

> The message below states that:
>
> "I understand spawning a new thread in the
> >> >Jaguar component will not work and causes problems in the server.  "
>
> Which I would take to mean "You must not create a new thread programatically in
> a Java component".
>
> I cannot find any reference to this in the documentation, so I would appreciate
> it if someone could confirm whether or not this is the case, or direct me to
> documentation that does so.
>
> Thanks,
>
> Ian Leader
>
> On Wed, 16 Dec 1998 17:09:18 -0500,
>  in powersoft.public.easerver
> David Wolf <dwolf@sybase.com> wrote:
> >Actually if you want a service component to run only once, dont loop inside
> >run().  This will accomplish that.
> >
> >so
> >
> >public class SillServiceImpl
> >{
> >    public void start()
> >    {}
> >    public void stop()
> >    {}
> >
> >    public void run()
> >    {
> >        System.out.println("Just wanted to say hello!");
> >    }
> >}
> >
> >Dave Wolf
> >EAServer Product Team
> >
> >markf wrote:
> >
> >> Randy,
> >> How about specifying a handler to respond to Jaguars Start event handler ?
> >> This is trggered when a request to start the jaguar server is made
> >> Would that meet your objective to:
> >> >create a schedule service which runs only once (basically, after server
> >> >start up.) ?
> >>
> >> hndler launching your process
> >> Randy Puro wrote in message <365A0B97.857E59C4@sybase.com>...
> >> >Hi-
> >> >I'm looking for some design pattern suggestions.  I have a Jaguar method
> >> >which executes very slowly.  Whether or not the method executes properly
> >> >is irrelevant to my client; therefore, I want some sort of "fire and
> >> >forget" design pattern.  I understand spawning a new thread in the
> >> >Jaguar component will not work and causes problems in the server.  I
> >> >have looked at the asynchronous Events sample, and can see that I might
> >> >be able to use some variation on the technique.  However, in the
> >> >example, there is a separate application responsible for handling a
> >> >queue of requests (and in a sense has the desired affect of creating the
> >> >separate request handling thread.)  How can I achieve a similar model
> >> >inside Jaguar (without having to create a separate "server" app)?
> >> >
> >> >My initial idea would be to create a scheduled jaguar service which runs
> >> >in an infinite loop, waiting for notification of changes to the queue,
> >> >and processing them as they occur.  However, I'm not sure how one can
> >> >create a schedule service which runs only once (basically, after server
> >> >start up.)
> >> >
> >> >Thanks in advance for your suggestions,
> >> >
> >> >Randy
> >

0
David
12/21/1998 2:24:24 PM
Dave,

Having read your response, I now think our situation is slightly different from
Randy's. We are not trying to spawn a new thread & then instanciate another
Jaguar component instance, nor are we trying to get a Jaguar method to return
while leaving a thread running.

Instead, we are writing a component which uses a single instance of a third
party java class, which spawns 3 new threads in its constructor, but does not
clean them up properly. This was causing problems with memory leakage, so we
used the EJB interface to create a pool of up to n (currently 10) components
created on demand, which are pooled (canReuse() method always returns true), and
therefore persist until the server is shut down.

So far this design *appears* to work correctly - memory usages is exactly as
expected, and we can manage resource usage by limiting the maximum number of
components running, and rejecting further requests to instanciate components
when this number has been reached.

Two questions:

1. Using this design, do you thing we will have any unexpected problems due to
the creation of these threads by the third party class.
2. How are you meant to spawn additional service components in the model you
describe in point 1 below.

Thanks,

Ian Leader.

On Mon, 21 Dec 1998 09:24:24 -0500,
 in powersoft.public.easerver
David Wolf <dwolf@sybase.com> wrote: 
>This is the case, and unfortunatly did not make it into the documentation.  We
have
>corrected the documentation and are working on two solutions:
>
>1) In the current  EBF to 2.0, we have included the ability to spawn X
instances of
>a service component.  Since a service component is a shared instance
(singleton)
>You will have X threads running in it concurrently
>
>2) In the next EBF, we will have added a property to the Java ORB to allow you
to
>specify you are inside Jaguar.  Rather than using the in-memory
orb/marshalling,
>this will force the ORB runtime to reconnect to jaguar as if it was a client
>itself, this alleviating the issue.
>
>Dave Wolf
>EAServer Product Team
>
>Ian Leader wrote:
>
>> The message below states that:
>>
>> "I understand spawning a new thread in the
>> >> >Jaguar component will not work and causes problems in the server.  "
>>
>> Which I would take to mean "You must not create a new thread programatically
in
>> a Java component".
>>
>> I cannot find any reference to this in the documentation, so I would
appreciate
>> it if someone could confirm whether or not this is the case, or direct me to
>> documentation that does so.
>>
>> Thanks,
>>
>> Ian Leader
>>
>> On Wed, 16 Dec 1998 17:09:18 -0500,
>>  in powersoft.public.easerver
>> David Wolf <dwolf@sybase.com> wrote:
>> >Actually if you want a service component to run only once, dont loop inside
>> >run().  This will accomplish that.
>> >
>> >so
>> >
>> >public class SillServiceImpl
>> >{
>> >    public void start()
>> >    {}
>> >    public void stop()
>> >    {}
>> >
>> >    public void run()
>> >    {
>> >        System.out.println("Just wanted to say hello!");
>> >    }
>> >}
>> >
>> >Dave Wolf
>> >EAServer Product Team
>> >
>> >markf wrote:
>> >
>> >> Randy,
>> >> How about specifying a handler to respond to Jaguars Start event handler ?
>> >> This is trggered when a request to start the jaguar server is made
>> >> Would that meet your objective to:
>> >> >create a schedule service which runs only once (basically, after server
>> >> >start up.) ?
>> >>
>> >> hndler launching your process
>> >> Randy Puro wrote in message <365A0B97.857E59C4@sybase.com>...
>> >> >Hi-
>> >> >I'm looking for some design pattern suggestions.  I have a Jaguar method
>> >> >which executes very slowly.  Whether or not the method executes properly
>> >> >is irrelevant to my client; therefore, I want some sort of "fire and
>> >> >forget" design pattern.  I understand spawning a new thread in the
>> >> >Jaguar component will not work and causes problems in the server.  I
>> >> >have looked at the asynchronous Events sample, and can see that I might
>> >> >be able to use some variation on the technique.  However, in the
>> >> >example, there is a separate application responsible for handling a
>> >> >queue of requests (and in a sense has the desired affect of creating the
>> >> >separate request handling thread.)  How can I achieve a similar model
>> >> >inside Jaguar (without having to create a separate "server" app)?
>> >> >
>> >> >My initial idea would be to create a scheduled jaguar service which runs
>> >> >in an infinite loop, waiting for notification of changes to the queue,
>> >> >and processing them as they occur.  However, I'm not sure how one can
>> >> >create a schedule service which runs only once (basically, after server
>> >> >start up.)
>> >> >
>> >> >Thanks in advance for your suggestions,
>> >> >
>> >> >Randy
>> >
>
0
Ian
12/21/1998 4:03:23 PM
The issue isnt with user created threads, but rather with intercomponent calls from
within these threads.  I dont think you'll have any issues.  This works fine:

public class SillyThread extends Thread
{
    public void run()
    {
        try
        {
            com.sybase.jaguar.server.Jaguar.writeLog("Hello!");
        }
        catch(Exception e)
        {}
}

public class SillyComponentImpl
{
    public void beSilly()
    {
        new SillyThread().start();
        com.sybase.jaguar.server.Jaguar.getInstanceContext().completeWork();
    }
}

As for point two, you would set the property for the service component, in the
server's All Properties tab as:

com.sybase.jaguar.server.services=Package/Component[20]

To start 20 threads inside the service component.

I do have a question.  How are you limiting the number of pooled components?

Dave Wolf
EAServer Product Team

Ian Leader wrote:

> Dave,
>
> Having read your response, I now think our situation is slightly different from
> Randy's. We are not trying to spawn a new thread & then instanciate another
> Jaguar component instance, nor are we trying to get a Jaguar method to return
> while leaving a thread running.
>
> Instead, we are writing a component which uses a single instance of a third
> party java class, which spawns 3 new threads in its constructor, but does not
> clean them up properly. This was causing problems with memory leakage, so we
> used the EJB interface to create a pool of up to n (currently 10) components
> created on demand, which are pooled (canReuse() method always returns true), and
> therefore persist until the server is shut down.
>
> So far this design *appears* to work correctly - memory usages is exactly as
> expected, and we can manage resource usage by limiting the maximum number of
> components running, and rejecting further requests to instanciate components
> when this number has been reached.
>
> Two questions:
>
> 1. Using this design, do you thing we will have any unexpected problems due to
> the creation of these threads by the third party class.
> 2. How are you meant to spawn additional service components in the model you
> describe in point 1 below.
>
> Thanks,
>
> Ian Leader.
>
> On Mon, 21 Dec 1998 09:24:24 -0500,
>  in powersoft.public.easerver
> David Wolf <dwolf@sybase.com> wrote:
> >This is the case, and unfortunatly did not make it into the documentation.  We
> have
> >corrected the documentation and are working on two solutions:
> >
> >1) In the current  EBF to 2.0, we have included the ability to spawn X
> instances of
> >a service component.  Since a service component is a shared instance
> (singleton)
> >You will have X threads running in it concurrently
> >
> >2) In the next EBF, we will have added a property to the Java ORB to allow you
> to
> >specify you are inside Jaguar.  Rather than using the in-memory
> orb/marshalling,
> >this will force the ORB runtime to reconnect to jaguar as if it was a client
> >itself, this alleviating the issue.
> >
> >Dave Wolf
> >EAServer Product Team
> >
> >Ian Leader wrote:
> >
> >> The message below states that:
> >>
> >> "I understand spawning a new thread in the
> >> >> >Jaguar component will not work and causes problems in the server.  "
> >>
> >> Which I would take to mean "You must not create a new thread programatically
> in
> >> a Java component".
> >>
> >> I cannot find any reference to this in the documentation, so I would
> appreciate
> >> it if someone could confirm whether or not this is the case, or direct me to
> >> documentation that does so.
> >>
> >> Thanks,
> >>
> >> Ian Leader
> >>
> >> On Wed, 16 Dec 1998 17:09:18 -0500,
> >>  in powersoft.public.easerver
> >> David Wolf <dwolf@sybase.com> wrote:
> >> >Actually if you want a service component to run only once, dont loop inside
> >> >run().  This will accomplish that.
> >> >
> >> >so
> >> >
> >> >public class SillServiceImpl
> >> >{
> >> >    public void start()
> >> >    {}
> >> >    public void stop()
> >> >    {}
> >> >
> >> >    public void run()
> >> >    {
> >> >        System.out.println("Just wanted to say hello!");
> >> >    }
> >> >}
> >> >
> >> >Dave Wolf
> >> >EAServer Product Team
> >> >
> >> >markf wrote:
> >> >
> >> >> Randy,
> >> >> How about specifying a handler to respond to Jaguars Start event handler ?
> >> >> This is trggered when a request to start the jaguar server is made
> >> >> Would that meet your objective to:
> >> >> >create a schedule service which runs only once (basically, after server
> >> >> >start up.) ?
> >> >>
> >> >> hndler launching your process
> >> >> Randy Puro wrote in message <365A0B97.857E59C4@sybase.com>...
> >> >> >Hi-
> >> >> >I'm looking for some design pattern suggestions.  I have a Jaguar method
> >> >> >which executes very slowly.  Whether or not the method executes properly
> >> >> >is irrelevant to my client; therefore, I want some sort of "fire and
> >> >> >forget" design pattern.  I understand spawning a new thread in the
> >> >> >Jaguar component will not work and causes problems in the server.  I
> >> >> >have looked at the asynchronous Events sample, and can see that I might
> >> >> >be able to use some variation on the technique.  However, in the
> >> >> >example, there is a separate application responsible for handling a
> >> >> >queue of requests (and in a sense has the desired affect of creating the
> >> >> >separate request handling thread.)  How can I achieve a similar model
> >> >> >inside Jaguar (without having to create a separate "server" app)?
> >> >> >
> >> >> >My initial idea would be to create a scheduled jaguar service which runs
> >> >> >in an infinite loop, waiting for notification of changes to the queue,
> >> >> >and processing them as they occur.  However, I'm not sure how one can
> >> >> >create a schedule service which runs only once (basically, after server
> >> >> >start up.)
> >> >> >
> >> >> >Thanks in advance for your suggestions,
> >> >> >
> >> >> >Randy
> >> >
> >

0
David
12/22/1998 2:54:51 AM
Let me do note though, if you do what I did, there is no way to ever stop the instance
of Silly Thread!  This is one reason why async threads to do fire and forget is not
such a good idea.

Dave Wolf
EAServer Product Team

p.s. Dont call me to tell me that my sample filled your disk :)

David Wolf wrote:

> The issue isnt with user created threads, but rather with intercomponent calls from
> within these threads.  I dont think you'll have any issues.  This works fine:
>
> public class SillyThread extends Thread
> {
>     public void run()
>     {
>         try
>         {
>             com.sybase.jaguar.server.Jaguar.writeLog("Hello!");
>         }
>         catch(Exception e)
>         {}
> }
>
> public class SillyComponentImpl
> {
>     public void beSilly()
>     {
>         new SillyThread().start();
>         com.sybase.jaguar.server.Jaguar.getInstanceContext().completeWork();
>     }
> }
>
> As for point two, you would set the property for the service component, in the
> server's All Properties tab as:
>
> com.sybase.jaguar.server.services=Package/Component[20]
>
> To start 20 threads inside the service component.
>
> I do have a question.  How are you limiting the number of pooled components?
>
> Dave Wolf
> EAServer Product Team
>
> Ian Leader wrote:
>
> > Dave,
> >
> > Having read your response, I now think our situation is slightly different from
> > Randy's. We are not trying to spawn a new thread & then instanciate another
> > Jaguar component instance, nor are we trying to get a Jaguar method to return
> > while leaving a thread running.
> >
> > Instead, we are writing a component which uses a single instance of a third
> > party java class, which spawns 3 new threads in its constructor, but does not
> > clean them up properly. This was causing problems with memory leakage, so we
> > used the EJB interface to create a pool of up to n (currently 10) components
> > created on demand, which are pooled (canReuse() method always returns true), and
> > therefore persist until the server is shut down.
> >
> > So far this design *appears* to work correctly - memory usages is exactly as
> > expected, and we can manage resource usage by limiting the maximum number of
> > components running, and rejecting further requests to instanciate components
> > when this number has been reached.
> >
> > Two questions:
> >
> > 1. Using this design, do you thing we will have any unexpected problems due to
> > the creation of these threads by the third party class.
> > 2. How are you meant to spawn additional service components in the model you
> > describe in point 1 below.
> >
> > Thanks,
> >
> > Ian Leader.
> >
> > On Mon, 21 Dec 1998 09:24:24 -0500,
> >  in powersoft.public.easerver
> > David Wolf <dwolf@sybase.com> wrote:
> > >This is the case, and unfortunatly did not make it into the documentation.  We
> > have
> > >corrected the documentation and are working on two solutions:
> > >
> > >1) In the current  EBF to 2.0, we have included the ability to spawn X
> > instances of
> > >a service component.  Since a service component is a shared instance
> > (singleton)
> > >You will have X threads running in it concurrently
> > >
> > >2) In the next EBF, we will have added a property to the Java ORB to allow you
> > to
> > >specify you are inside Jaguar.  Rather than using the in-memory
> > orb/marshalling,
> > >this will force the ORB runtime to reconnect to jaguar as if it was a client
> > >itself, this alleviating the issue.
> > >
> > >Dave Wolf
> > >EAServer Product Team
> > >
> > >Ian Leader wrote:
> > >
> > >> The message below states that:
> > >>
> > >> "I understand spawning a new thread in the
> > >> >> >Jaguar component will not work and causes problems in the server.  "
> > >>
> > >> Which I would take to mean "You must not create a new thread programatically
> > in
> > >> a Java component".
> > >>
> > >> I cannot find any reference to this in the documentation, so I would
> > appreciate
> > >> it if someone could confirm whether or not this is the case, or direct me to
> > >> documentation that does so.
> > >>
> > >> Thanks,
> > >>
> > >> Ian Leader
> > >>
> > >> On Wed, 16 Dec 1998 17:09:18 -0500,
> > >>  in powersoft.public.easerver
> > >> David Wolf <dwolf@sybase.com> wrote:
> > >> >Actually if you want a service component to run only once, dont loop inside
> > >> >run().  This will accomplish that.
> > >> >
> > >> >so
> > >> >
> > >> >public class SillServiceImpl
> > >> >{
> > >> >    public void start()
> > >> >    {}
> > >> >    public void stop()
> > >> >    {}
> > >> >
> > >> >    public void run()
> > >> >    {
> > >> >        System.out.println("Just wanted to say hello!");
> > >> >    }
> > >> >}
> > >> >
> > >> >Dave Wolf
> > >> >EAServer Product Team
> > >> >
> > >> >markf wrote:
> > >> >
> > >> >> Randy,
> > >> >> How about specifying a handler to respond to Jaguars Start event handler ?
> > >> >> This is trggered when a request to start the jaguar server is made
> > >> >> Would that meet your objective to:
> > >> >> >create a schedule service which runs only once (basically, after server
> > >> >> >start up.) ?
> > >> >>
> > >> >> hndler launching your process
> > >> >> Randy Puro wrote in message <365A0B97.857E59C4@sybase.com>...
> > >> >> >Hi-
> > >> >> >I'm looking for some design pattern suggestions.  I have a Jaguar method
> > >> >> >which executes very slowly.  Whether or not the method executes properly
> > >> >> >is irrelevant to my client; therefore, I want some sort of "fire and
> > >> >> >forget" design pattern.  I understand spawning a new thread in the
> > >> >> >Jaguar component will not work and causes problems in the server.  I
> > >> >> >have looked at the asynchronous Events sample, and can see that I might
> > >> >> >be able to use some variation on the technique.  However, in the
> > >> >> >example, there is a separate application responsible for handling a
> > >> >> >queue of requests (and in a sense has the desired affect of creating the
> > >> >> >separate request handling thread.)  How can I achieve a similar model
> > >> >> >inside Jaguar (without having to create a separate "server" app)?
> > >> >> >
> > >> >> >My initial idea would be to create a scheduled jaguar service which runs
> > >> >> >in an infinite loop, waiting for notification of changes to the queue,
> > >> >> >and processing them as they occur.  However, I'm not sure how one can
> > >> >> >create a schedule service which runs only once (basically, after server
> > >> >> >start up.)
> > >> >> >
> > >> >> >Thanks in advance for your suggestions,
> > >> >> >
> > >> >> >Randy
> > >> >
> > >

0
David
12/22/1998 2:57:16 AM
Dave,

We limit the number of components as follows:

1. We maintain an array of semaphores.
2. The default constructor of the Component Implementation Class tries to grab
one of these.
3a. If it succeeds, it continues with set-up, including the instanciation of the
3rd party class
3b. If it fails, it throws an exception and exits.

If a component is re-used from the pool, rather than being freshly instanciated,
the constructor is not called, so semaphores aren't used up unless new
components are actually created.

All of this is done in an abstract class that each 'pooled' component extends.
When writing a new component, so long as we remember to call super(); at the
start of the constructor, all the above happens 'by magic'.

Regards,

Ian.

On Mon, 21 Dec 1998 21:54:51 -0500,
 in powersoft.public.easerver
David Wolf <dwolf@sybase.com> wrote: 
>The issue isnt with user created threads, but rather with intercomponent calls
from
>within these threads.  I dont think you'll have any issues.  This works fine:
>
>public class SillyThread extends Thread
>{
>    public void run()
>    {
>        try
>        {
>            com.sybase.jaguar.server.Jaguar.writeLog("Hello!");
>        }
>        catch(Exception e)
>        {}
>}
>
>public class SillyComponentImpl
>{
>    public void beSilly()
>    {
>        new SillyThread().start();
>        com.sybase.jaguar.server.Jaguar.getInstanceContext().completeWork();
>    }
>}
>
>As for point two, you would set the property for the service component, in the
>server's All Properties tab as:
>
>com.sybase.jaguar.server.services=Package/Component[20]
>
>To start 20 threads inside the service component.
>
>I do have a question.  How are you limiting the number of pooled components?
>
>Dave Wolf
>EAServer Product Team
>
>Ian Leader wrote:
>
>> Dave,
>>
>> Having read your response, I now think our situation is slightly different
from
>> Randy's. We are not trying to spawn a new thread & then instanciate another
>> Jaguar component instance, nor are we trying to get a Jaguar method to return
>> while leaving a thread running.
>>
>> Instead, we are writing a component which uses a single instance of a third
>> party java class, which spawns 3 new threads in its constructor, but does not
>> clean them up properly. This was causing problems with memory leakage, so we
>> used the EJB interface to create a pool of up to n (currently 10) components
>> created on demand, which are pooled (canReuse() method always returns true),
and
>> therefore persist until the server is shut down.
>>
>> So far this design *appears* to work correctly - memory usages is exactly as
>> expected, and we can manage resource usage by limiting the maximum number of
>> components running, and rejecting further requests to instanciate components
>> when this number has been reached.
>>
>> Two questions:
>>
>> 1. Using this design, do you thing we will have any unexpected problems due
to
>> the creation of these threads by the third party class.
>> 2. How are you meant to spawn additional service components in the model you
>> describe in point 1 below.
>>
>> Thanks,
>>
>> Ian Leader.
>>
>> On Mon, 21 Dec 1998 09:24:24 -0500,
>>  in powersoft.public.easerver
>> David Wolf <dwolf@sybase.com> wrote:
>> >This is the case, and unfortunatly did not make it into the documentation.
We
>> have
>> >corrected the documentation and are working on two solutions:
>> >
>> >1) In the current  EBF to 2.0, we have included the ability to spawn X
>> instances of
>> >a service component.  Since a service component is a shared instance
>> (singleton)
>> >You will have X threads running in it concurrently
>> >
>> >2) In the next EBF, we will have added a property to the Java ORB to allow
you
>> to
>> >specify you are inside Jaguar.  Rather than using the in-memory
>> orb/marshalling,
>> >this will force the ORB runtime to reconnect to jaguar as if it was a client
>> >itself, this alleviating the issue.
>> >
>> >Dave Wolf
>> >EAServer Product Team
>> >
>> >Ian Leader wrote:
>> >
>> >> The message below states that:
>> >>
>> >> "I understand spawning a new thread in the
>> >> >> >Jaguar component will not work and causes problems in the server.  "
>> >>
>> >> Which I would take to mean "You must not create a new thread
programatically
>> in
>> >> a Java component".
>> >>
>> >> I cannot find any reference to this in the documentation, so I would
>> appreciate
>> >> it if someone could confirm whether or not this is the case, or direct me
to
>> >> documentation that does so.
>> >>
>> >> Thanks,
>> >>
>> >> Ian Leader
>> >>
>> >> On Wed, 16 Dec 1998 17:09:18 -0500,
>> >>  in powersoft.public.easerver
>> >> David Wolf <dwolf@sybase.com> wrote:
>> >> >Actually if you want a service component to run only once, dont loop
inside
>> >> >run().  This will accomplish that.
>> >> >
>> >> >so
>> >> >
>> >> >public class SillServiceImpl
>> >> >{
>> >> >    public void start()
>> >> >    {}
>> >> >    public void stop()
>> >> >    {}
>> >> >
>> >> >    public void run()
>> >> >    {
>> >> >        System.out.println("Just wanted to say hello!");
>> >> >    }
>> >> >}
>> >> >
>> >> >Dave Wolf
>> >> >EAServer Product Team
>> >> >
>> >> >markf wrote:
>> >> >
>> >> >> Randy,
>> >> >> How about specifying a handler to respond to Jaguars Start event
handler ?
>> >> >> This is trggered when a request to start the jaguar server is made
>> >> >> Would that meet your objective to:
>> >> >> >create a schedule service which runs only once (basically, after
server
>> >> >> >start up.) ?
>> >> >>
>> >> >> hndler launching your process
>> >> >> Randy Puro wrote in message <365A0B97.857E59C4@sybase.com>...
>> >> >> >Hi-
>> >> >> >I'm looking for some design pattern suggestions.  I have a Jaguar
method
>> >> >> >which executes very slowly.  Whether or not the method executes
properly
>> >> >> >is irrelevant to my client; therefore, I want some sort of "fire and
>> >> >> >forget" design pattern.  I understand spawning a new thread in the
>> >> >> >Jaguar component will not work and causes problems in the server.  I
>> >> >> >have looked at the asynchronous Events sample, and can see that I
might
>> >> >> >be able to use some variation on the technique.  However, in the
>> >> >> >example, there is a separate application responsible for handling a
>> >> >> >queue of requests (and in a sense has the desired affect of creating
the
>> >> >> >separate request handling thread.)  How can I achieve a similar model
>> >> >> >inside Jaguar (without having to create a separate "server" app)?
>> >> >> >
>> >> >> >My initial idea would be to create a scheduled jaguar service which
runs
>> >> >> >in an infinite loop, waiting for notification of changes to the queue,
>> >> >> >and processing them as they occur.  However, I'm not sure how one can
>> >> >> >create a schedule service which runs only once (basically, after
server
>> >> >> >start up.)
>> >> >> >
>> >> >> >Thanks in advance for your suggestions,
>> >> >> >
>> >> >> >Randy
>> >> >
>> >
>
0
Ian
12/22/1998 3:41:04 PM
Ok, cool, thats what I thought you were doing.  Now if the max number is hit, then
the contructor throws an exception, so the client would catch that, and could retry.

What could be cool is rather to get the instance from a Facotory component.  let the
Factory try to get an instance, and if it cant, to block and try again.  In this way
the client doesnt need to have retry code in it.

I'd really like to do a presentation like the other's I do at users groups, on
design patterns, so that's why I asked.

Dave Wolf
EAServer Product Team

Ian Leader wrote:

> Dave,
>
> We limit the number of components as follows:
>
> 1. We maintain an array of semaphores.
> 2. The default constructor of the Component Implementation Class tries to grab
> one of these.
> 3a. If it succeeds, it continues with set-up, including the instanciation of the
> 3rd party class
> 3b. If it fails, it throws an exception and exits.
>
> If a component is re-used from the pool, rather than being freshly instanciated,
> the constructor is not called, so semaphores aren't used up unless new
> components are actually created.
>
> All of this is done in an abstract class that each 'pooled' component extends.
> When writing a new component, so long as we remember to call super(); at the
> start of the constructor, all the above happens 'by magic'.
>
> Regards,
>
> Ian.
>
> On Mon, 21 Dec 1998 21:54:51 -0500,
>  in powersoft.public.easerver
> David Wolf <dwolf@sybase.com> wrote:
> >The issue isnt with user created threads, but rather with intercomponent calls
> from
> >within these threads.  I dont think you'll have any issues.  This works fine:
> >
> >public class SillyThread extends Thread
> >{
> >    public void run()
> >    {
> >        try
> >        {
> >            com.sybase.jaguar.server.Jaguar.writeLog("Hello!");
> >        }
> >        catch(Exception e)
> >        {}
> >}
> >
> >public class SillyComponentImpl
> >{
> >    public void beSilly()
> >    {
> >        new SillyThread().start();
> >        com.sybase.jaguar.server.Jaguar.getInstanceContext().completeWork();
> >    }
> >}
> >
> >As for point two, you would set the property for the service component, in the
> >server's All Properties tab as:
> >
> >com.sybase.jaguar.server.services=Package/Component[20]
> >
> >To start 20 threads inside the service component.
> >
> >I do have a question.  How are you limiting the number of pooled components?
> >
> >Dave Wolf
> >EAServer Product Team
> >
> >Ian Leader wrote:
> >
> >> Dave,
> >>
> >> Having read your response, I now think our situation is slightly different
> from
> >> Randy's. We are not trying to spawn a new thread & then instanciate another
> >> Jaguar component instance, nor are we trying to get a Jaguar method to return
> >> while leaving a thread running.
> >>
> >> Instead, we are writing a component which uses a single instance of a third
> >> party java class, which spawns 3 new threads in its constructor, but does not
> >> clean them up properly. This was causing problems with memory leakage, so we
> >> used the EJB interface to create a pool of up to n (currently 10) components
> >> created on demand, which are pooled (canReuse() method always returns true),
> and
> >> therefore persist until the server is shut down.
> >>
> >> So far this design *appears* to work correctly - memory usages is exactly as
> >> expected, and we can manage resource usage by limiting the maximum number of
> >> components running, and rejecting further requests to instanciate components
> >> when this number has been reached.
> >>
> >> Two questions:
> >>
> >> 1. Using this design, do you thing we will have any unexpected problems due
> to
> >> the creation of these threads by the third party class.
> >> 2. How are you meant to spawn additional service components in the model you
> >> describe in point 1 below.
> >>
> >> Thanks,
> >>
> >> Ian Leader.
> >>
> >> On Mon, 21 Dec 1998 09:24:24 -0500,
> >>  in powersoft.public.easerver
> >> David Wolf <dwolf@sybase.com> wrote:
> >> >This is the case, and unfortunatly did not make it into the documentation.
> We
> >> have
> >> >corrected the documentation and are working on two solutions:
> >> >
> >> >1) In the current  EBF to 2.0, we have included the ability to spawn X
> >> instances of
> >> >a service component.  Since a service component is a shared instance
> >> (singleton)
> >> >You will have X threads running in it concurrently
> >> >
> >> >2) In the next EBF, we will have added a property to the Java ORB to allow
> you
> >> to
> >> >specify you are inside Jaguar.  Rather than using the in-memory
> >> orb/marshalling,
> >> >this will force the ORB runtime to reconnect to jaguar as if it was a client
> >> >itself, this alleviating the issue.
> >> >
> >> >Dave Wolf
> >> >EAServer Product Team
> >> >
> >> >Ian Leader wrote:
> >> >
> >> >> The message below states that:
> >> >>
> >> >> "I understand spawning a new thread in the
> >> >> >> >Jaguar component will not work and causes problems in the server.  "
> >> >>
> >> >> Which I would take to mean "You must not create a new thread
> programatically
> >> in
> >> >> a Java component".
> >> >>
> >> >> I cannot find any reference to this in the documentation, so I would
> >> appreciate
> >> >> it if someone could confirm whether or not this is the case, or direct me
> to
> >> >> documentation that does so.
> >> >>
> >> >> Thanks,
> >> >>
> >> >> Ian Leader
> >> >>
> >> >> On Wed, 16 Dec 1998 17:09:18 -0500,
> >> >>  in powersoft.public.easerver
> >> >> David Wolf <dwolf@sybase.com> wrote:
> >> >> >Actually if you want a service component to run only once, dont loop
> inside
> >> >> >run().  This will accomplish that.
> >> >> >
> >> >> >so
> >> >> >
> >> >> >public class SillServiceImpl
> >> >> >{
> >> >> >    public void start()
> >> >> >    {}
> >> >> >    public void stop()
> >> >> >    {}
> >> >> >
> >> >> >    public void run()
> >> >> >    {
> >> >> >        System.out.println("Just wanted to say hello!");
> >> >> >    }
> >> >> >}
> >> >> >
> >> >> >Dave Wolf
> >> >> >EAServer Product Team
> >> >> >
> >> >> >markf wrote:
> >> >> >
> >> >> >> Randy,
> >> >> >> How about specifying a handler to respond to Jaguars Start event
> handler ?
> >> >> >> This is trggered when a request to start the jaguar server is made
> >> >> >> Would that meet your objective to:
> >> >> >> >create a schedule service which runs only once (basically, after
> server
> >> >> >> >start up.) ?
> >> >> >>
> >> >> >> hndler launching your process
> >> >> >> Randy Puro wrote in message <365A0B97.857E59C4@sybase.com>...
> >> >> >> >Hi-
> >> >> >> >I'm looking for some design pattern suggestions.  I have a Jaguar
> method
> >> >> >> >which executes very slowly.  Whether or not the method executes
> properly
> >> >> >> >is irrelevant to my client; therefore, I want some sort of "fire and
> >> >> >> >forget" design pattern.  I understand spawning a new thread in the
> >> >> >> >Jaguar component will not work and causes problems in the server.  I
> >> >> >> >have looked at the asynchronous Events sample, and can see that I
> might
> >> >> >> >be able to use some variation on the technique.  However, in the
> >> >> >> >example, there is a separate application responsible for handling a
> >> >> >> >queue of requests (and in a sense has the desired affect of creating
> the
> >> >> >> >separate request handling thread.)  How can I achieve a similar model
> >> >> >> >inside Jaguar (without having to create a separate "server" app)?
> >> >> >> >
> >> >> >> >My initial idea would be to create a scheduled jaguar service which
> runs
> >> >> >> >in an infinite loop, waiting for notification of changes to the queue,
> >> >> >> >and processing them as they occur.  However, I'm not sure how one can
> >> >> >> >create a schedule service which runs only once (basically, after
> server
> >> >> >> >start up.)
> >> >> >> >
> >> >> >> >Thanks in advance for your suggestions,
> >> >> >> >
> >> >> >> >Randy
> >> >> >
> >> >
> >

0
David
12/22/1998 3:46:29 PM
Reply:

Similar Artilces:

Re: fire and forget method call
Dave, One detail in the design that I didn't mention (for clarity) is that I can't find any way of raising user defined exception from component constructor (All exceptions propagate back to the client as org.omg.CORBA.UNKNOWN). This mean the client doesn't know exactly why the instanciation has failed, and thus whether or not to retry. We work around this by setting a flag, and raising an exception as soon as the first method is invoked. It would be neat if constructors could raise user defined exceptions - any chance of this in the future? I like the factory idea -...

Getting Error :This method cannot be called until the send method has been called.
Hi, I am facing one tentative error when I am trying to call a page using "XMLHTTP" object. Error description is: This method cannot be called until the send method has been called. Following is the code snippet: Set objHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP.4.0") Call objHTTP.Open("GET", GetHTTP, False) Most of the time, above code is working properly, but some time (I don’t know why) above error occurred. Can any one help me in this regard? Thank you.~ Firoz AnsariPune, Indiahttp://www.firozansari.comWhy product testin...

EAserver to Easerver calls
We have a central server that makes calls to other jaguar servers located on different machines. If the calling component uses transactions, then whenever it connects to a component on another system we get errors in the server log in regards to invalid transactions (see below for actual error) on both the calling and called servers. These errors cause a rollback in the calling component. The code in the called component executes properly. If we set the transaction type to 'not supported' all works well, but we lose the ability to take advantage of EAServer's transactio...

How to call both method if Both interface have same method?
 How to call both method if Both interface have same method? interface simpleInterface{void SimpleMethod(); } interface simpleDisplay{void SimpleMethod(); }  How to i can call these both method in main method at same time   Check out this article: http://www.dotnetfunda.com/articles/article133.aspx.Hope this provides some insight.- Jesse Jesse WilliamsPlease mark 'Answered' if my post was able to assist you....

How to Call Methods on a PB Component deployed as EAServer Service? Use a Timer Object?
Can I use a PB Timer Object in a EAServer component? I am developing a PB Component as a EAServer Service and having problems calling methods on it. I cannot call methods because Run() is using up all the cycles. I am doing something like the following in the Run() method: DO WHILE ib_running uf_do_something() JagSleep ( a few seconds ) END LOOP Where ib_running would get set to false in the Stop() method. I thought using JagSleep() would allow other methods to be called, but it doesn't. I'd prefer to have a timing object perform periodic refreshes (of ...

Calling a PageMethod in VB.Net 2.0 with JQuery not firing the page method.
Hi, I have code that I tested in a C#/Asp.Net 2.0  web app to call a page method using JQuery and it worked perfectly, now I am trying to do the same in VB.Net/Asp.Net 2.0 and it won't fire the page method. I keep getting undefined javascript error which makes me think it can't find or access the Page method. If I were calling this with MS Ajax is there something else I need to mark the method with?<WebMethod()> _ Public Shared Function GetMailPieceGroupsByAdFundTypeId _ (ByVal adFundTypeId As Integer) As String 'More code in here End Sub $.aja...

Find out if a method calls another method
Hi everyone, I'm curious to know if there is an easy way to scan a list of module files and identify how many subs are calling a different specific sub. I've got a method that must be called once by each and every sub within the module. I want to ensure I haven't forgot to include its call without having to manually read the code. Is this possible? Steve On Mon, Nov 23, 2009 at 11:08 AM, Steve Bertrand <steve@ibctech.ca> wrote: > Hi everyone, > > I'm curious to know if there is an easy way to scan a list of module > files and identify how ...

Calling a C# method by a javascript method
Hi I have a big problem help me to sort out it. (Its urgent) I have to call a C# method by javascript method which is registered at server at runtime. The code that I am using is as follows:: ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "myScript", "var df = confirm('Your Password has Changed.To continue click on OK');if(df){validate();}", true); it is giving an error "Object Expected"   if i put following code::: ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "myScript", "var df = confirm('Y...

How to call client methods in server methods?
Hello guys, I need your help please. I've put a FormView in a collapsible panel bound with CollapsiblePanelExtender, and use a DataList outside the panel to control it. What I need is when users select items in DataList, the FormView shows details of the item, and the collapsible panel auto expand itself. So I think maybe I need call the CollapsiblePanelExtender's expand function in the postbacked server method, but I don't know how to do it... This is my code: 1 <script runat="server"> 2 protected void Details_DataBound(object sender, EventArgs e) 3 {...

How to Call a Method after asynchronous call is complete.
Basically i need to make a call back after the update panel has rendered all the objects. How do i go about doing this any info would be helpful..thanks andrew hello. please search this forum for _inPostBack, PageRequestManager and propertychanged. these words should give you the posts that explain what you need to achieve this.-- Regards,Luis Abreuemail: labreu_at_gmail.comEN blog:http://msmvps.com/blogs/luisabreu...

Calling an implemented method within an implemented method?
how would I do something like this?  I get a build error(in this example bar is an interface)    public class foo : bar { int bar.DoSomething() { } int bar.DoSomethingElse() { DoSomething(); DoSomeOtherJunk(); } }    public interface bar        {            void DoSomething();            void DoSomethingElse();    ...

Find method problems 'method cannot be called'
I am trying to find records in one table that are linked to another table by using a foreign key. (using ASA/ultralite 8.0.2.4258 and appforge mobileVB) A table called Company (index Compno) and a table called Division (index Divno, foreign key - compno) This is my code: ----------------------------------------- Dim comp_no As Integer comp_no = CompanyTable.Column("Compno").IntegerValue DivisionTable.FindBegin DivisionTable.Column("Compno").IntegerValue = comp_no DivisionTable.FindFirst --------------------------...

Calling Web Service method from OnBeforeUnload method in Firefox
 I've got a page that calls a WebService method (in my application) from the window.onbeforeunload event.  It's working fine in IE7, but when I run it in FireFox (I'm using 3, haven't tried older versions), I always get a javascript alert saying "The server method 'Test' failed with the following error:".  Calling it from other places seems to work fine.  Any explanation for this behavior or suggestions of how to debug further would be greatly appreciated.  Here's a simple example that illustrates: <%@ Page Language="...

Passing Name of Method to Another Method to call at Runtime
Hi Guys this is my first post, please help me....I am making a class to deal with web service, I have a Method in it    DataSet CallWebService(string MethodName)   { // Establish a new web service objectcAirframeWS.CustomerDBService Service = new cAirframeWS.CustomerDBService();//      I want this Method to be able to call any web services method whose name is passed to it          Service.MethodName();    // How do I do this?     &n...

Web resources about - fire and forget method call - sybase.easerver

Don't Forget the Lyrics! (U.S.) - Wikipedia, the free encyclopedia
Don't Forget the Lyrics! is a game show that originally aired on Fox from July 11, 2007 to June 19, 2009, hosted by Wayne Brady and produced ...

Facebook To App Developers: Don’t Forget Privacy Policy URLs
Facebook reminded developers that the app dashboard entries for their applications must include valid privacy policy URLs. continued… New Career ...

Forget to Log Out? Help is on the Way
You control your experience on Facebook. Control isn’t just about deciding what you share and with whom you share it; it’s also about being able ...

Forget Facebook Lite, Here’s the Site in uʍop ǝpısdn ɥsıןƃuǝ
Facebook may have launched Lite and a bunch of other new products yesterday, but here’s another recent change that the company quietly introduced. ...

Citymaps — Never Forget a Place on the App Store on iTunes
Get Citymaps — Never Forget a Place on the App Store. See screenshots and ratings, and read customer reviews.


Selena Gomez - Forget Forever (Audio Only) - YouTube
Selena's new album STARS DANCE feat. "Slow Down" available now on iTunes - http://smarturl.it/sgiTunesa2 Facebook http://facebook.com/SelenaGomez ...

Forget your wheelchair?: What no one with disability should ever be asked
A cruel note accusing a woman of hogging a disability parking spot triggered her emotional response on social media, and huge public support. ...

The Cosa Nostra of Old? Forget About It
One of the 23 Emmy Awards claimed over the years by veteran New York TV reporter Mary Murphy was for her coverage of the John Gotti trial. In ...

Forget about running Android apps on Windows 10 Mobile
One of the features that could have helped Windows 10 Mobile become a more appealing and competitive platform will not be available in the new ...

Resources last updated: 11/21/2015 6:22:11 AM