RE: (forte-users) User-visible service object

This solution will cause network traffic for all method calls on the
environment visible SO. This overhead is not incurred when calling methods
on a user visible SO in the same partition. Depending on the frequency of
calls and the volume of data being passed in and out, this could be
significant overhead.
We have successfully implemented the following.
Create a second User Visible SO based on the same class. Then you will be
able to partition the one SO into the client partition and the second into
the server partition.
For example, assume the underlying class is named MessageService then define
your SO's as
ClientMessageService -> MessageService
ServerMessageService -> MessageService
Andy
-----Original Message-----
From: Amin, Kamran [mailto:kamran.aminlendware.com]
Sent: Wednesday, August 23, 2000 10:17 PM
To: 'Duncan Kinnear'; kamranaminyahoo.com
Subject: RE: (forte-users) User-visible service
object
Duncan,
Make the user visible service object to an
environment visible
service object. This way the client and any service object
on the server
can access it.
ka
-----Original Message-----
From: Duncan Kinnear [mailto:duncanmccarthy.co.nz]
Sent: Wednesday, August 23, 2000 7:47 PM
To: kamranaminyahoo.com
Subject: (forte-users) User-visible service object
Hi folks!
We've got a user-visible service object that handles
initialisation of and
access to the message catalog.
This works well on the client, but we would like to use the
same
mechanism (and even the same service object) on the server
so that
service objects on the server have access to their message
catalog on
the
server.
I was hoping that if we referenced this user-visible service
object in
both the client and the server code, that it would partition
a copy in
each of the client and server partitions. However, we
cannot get this
user-visible service object duplicated on the server. If we
drag and drop
it onto the server partition in the partition workshop, it
disappears from
the client partition!
Anybody got any idea how we could do this?
Cheers,
Duncan Kinnear,
McCarthy and Associates, Email:
duncanMcCarthy.co.nz
PO Box 764, McLean Towers, Phone: +64
6 834 3360
Shakespeare Road, Napier, New Zealand. Fax: +64
6 834 3369
Providing Integrated Software to the Meat Processing
Industry for over 10
years
For the archives, go to:
http://lists.xpedior.com/forte-users and use
the login: forte and the password: archive. To unsubscribe,
send in a new
email the word: 'Unsubscribe' to:
forte-users-requestlists.xpedior.com
For the archives, go to:
http://lists.xpedior.com/forte-users and use
the login: forte and the password: archive. To unsubscribe,
send in a new
email the word: 'Unsubscribe' to:
forte-users-requestlists.xpedior.com

I would try going to the "lowest common denominator" between WindowsNT and
Windows95 - DOS. Both windowing OS's sort of have their roots in DOS, or at
least both are capable of opening a DOS session.
Therefore, from a DOS prompt type "set" to view the environment variables for
both OS types. Look for a common variable between the two that stores the
userID. If you can find one of these your application will be that much more
portable between these two Windows mutations.
I used "set" on my NT and found my userID assigned to a few variables. I haven't
done this on a Windows95 machine in quite some time, but if the machine is on
the network it should have at least one environment variable with the userID.
I'm just guessing that DOS has a variable to store the userID that will be
common to both machines.
Good luck....
Kelsey PetrychynSaskTel Technical Analyst
ITM - Technology Solutions - Distributed Computing
Tel (306) 777 - 4906, Fax (306) 359 - 0857
Internet:kelsey.petrychynSasktel.sk.ca
Quality is not job 1. It is the only job!
"Olivier Andrieux" <oandrieuxaxialog.fr> on 07/19/2000 09:12:41 AM
To: forte-userslists.xpedior.com
cc: (bcc: Kelsey Petrychyn/SaskTel/CA)
Subject: (forte-users) user name
Hi
I use this command to catch the username:
task.part.operatingsystem.getenv('username')
with NT, there is no problem
but with windows95 or 98 the command doesn't find the username.
Thanks in advance.
Olivier Andrieux
Axialog
Lille
For the archives, go to: http://lists.xpedior.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a new
email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com

Similar Messages

  • Load Balancing, User Visible Service objects, Runningman

    1. Load Balancing
    Load Balancing a partition has nothing to do with single or multi-threaded
    behaviour of that partition. If you load balance a partition it means that
    you can start 1 or more copies of that partition. How many to start can be
    specified. If the partition is load balanced there will be router partition
    that routes calls to any of the services in that partition.
    Now let us look at a special kind of partition (load balanced partition
    that has an Env visible SO and a user visible DbSession). This is one of
    the design patterns to acccess the database efficiently. Each of these
    partitions are single threaded because DbSession is inherently single
    threaded. This partition is single threaded because Dbsession is single
    threaded and not because the partition is replicated.
    Another case is when you make a partition load balanced and it has only
    SO(s) made out of tool classes and does not have Dbsessions then each of
    these partitions can run multi-threaded beacuse there are no
    single-threaded objects to make the partition single threaded
    2. User Visibility
    Case A - If you have only User visible SO(s) in a partition then each
    behaves like a global named object. Whoever accesses it will get a copy of
    their own.
    Case B - If you have a user visible SO and an Env Visible SO in the same
    partition then the user visible SO will be private to the partition and
    cannot be accessed from outside that partition.
    3. Running Man
    When you run an application by clicking on the running man Forte uses its
    default partitioning scheme and runs the application. The partition scheme
    that you made will be used only when you run the application distributed or
    from the partition workshop. This is the time you might encounter errors if
    your partitioning is not right.
    Hope this helps.
    Nirmal

    Don,
    You are right. I should have said - Forte uses its own partitioning scheme
    not the default scheme you see when you open partition workshop.
    Nirmal
    From: Don Nelson <[email protected]>
    To: Nirmal P Uppalapati <[email protected]>
    Cc: [email protected]
    Subject: Re: Load Balancing, User Visible Service objects, Running man
    Date: Wednesday, October 22, 1997 10:45 PM
    Nirmal,
    One note on the "running man"...
    At 08:12 PM 10/22/97 -0500, Nirmal P Uppalapati wrote:
    3. Running Man
    When you run an application by clicking on the running man Forte uses
    its
    default partitioning scheme and runs the application. The partitionscheme
    that you made will be used only when you run the application distributedor
    from the partition workshop. This is the time you might encounter errorsif
    your partitioning is not right.
    Actually, clicking on the "running man" from the repository or project
    workshop will cause the application to be run VERY differently thanrunning
    it distributed.
    It's not technically correct to say that the default partitioning schemeis
    used with the running man.
    Forte consulting offers a deployment workshop that covers the finerpoints
    of this and other distributed issues.
    Don
    ============================================
    Don Nelson
    Regional Consulting Manager - Rocky Mountain Region
    Forte Software, Inc.
    Denver, CO
    Corporate voice mail: 510-986-3810
    aka: [email protected]
    ============================================
    "If you ask me, though, any game without push-ups, hits, burns or noogies
    is a sissy game." - Calvin

  • RE: (forte-users) Terminal Services - Win 2000

    Hi
    l've already installed my application 'appA' at my server 'ServerA'.
    When l try to execute this application in my pc thru Terminal Server, there
    were nothing displayed at my pc but when l check at on 'ServerA' , l can
    see that 'appA' is running over at the 'ServerA' side. Actually, I'm new at
    this Terminal Server thingy...
    thanks..
    -----Original Message-----
    From: Jean-Paul Gabrielli [mailto:Jean-Paul.Gabriellisema.fr]
    Sent: Friday, January 19, 2001 5:08 PM
    To: Zulkifli Mohamad
    Subject: RE: (forte-users) Terminal Services - Win 2000
    hmm when you telent a machine to run a process remotely, don't expect to
    have it locally :-)
    j-p
    -----Message d'origine-----
    De: Zulkifli Mohamad [mailto:zulkifli_mohamadkonnas.com.my]
    Date: vendredi 19 janvier 2001 09:19
    &Agrave;: forte-userslists.xpedior.com
    Objet: (forte-users) Terminal Services - Win 2000
    hi..
    l'm trying to run forte application thru Terminal Services Client
    (Win 2000) but my application only running on the server not at the client
    pc. Some one can help me...
    thanks.
    For the archives, go to: http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To unsubscribe, send in a new
    email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com

    Il suffit de mettre les BTD/BTX sur un drive r&eacute;seau (net use X:
    \\server\share_point),
    puis d'installer des ic&ocirc;nes pour les clients: ftexec -fi bt:x:\MyApp.
    Pour que les noeuds ne s'auto-enregistrent pas, peut-&ecirc;tre mettre un password
    Ou bien d&eacute;finir les noeuds comme un 'groupe' et donc seul le groupe est
    connu.
    Si mettre le mot de passe suffit pas, et si vraiment le model node g&ecirc;ne,
    alors il
    faut un autre environment manager.
    I think that to avoid install, the software could be located on a shared
    drive,
    and users linking to it through running 'ftexec' or directly the compiled
    binaries.
    For nodes not to appear in the environment as nodes, they could be defined
    as members
    of a model node '(which then would be in the environmnet)'
    Putting a password in the environment could prevent nodes to be registered
    there, but
    might prevent the apps from being executed.
    Cheers,
    j-paul gabrielli
    Sema DTS
    -----Message d'origine-----
    De: Thomas Felix [mailto:tfelixaxialog.fr]
    Date: mardi 2 mai 2000 14:14
    &Agrave;: forte-userslists.xpedior.com
    Objet: (forte-users)
    bonjour a tous
    je souhaites installer une application distribu&eacute;e sur des postes clients.
    Y'a t'il moyen de ne pas installer les noeuds de ces postes clients sur l'
    active environnement li&eacute; au d&eacute;veloppement et si oui comment?
    hi
    I would like to install an application on clients workstation
    Can i install this nodes in a different Active environnement than this one
    that we use for the developpement ?
    For the archives, go to: http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To unsubscribe, send in a new
    email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com

  • Subject: RE :(forte-users) Web enterprise & user visibleservice Objects

    A few months ago we faced a similar problem while migrating from classic
    Forte to Web. We had to protect our investment in various frameworks that we
    wrote for the classic Forte apps, which made use of extensive
    user-level-caching among other things.
    We solved the problem using a custom routing mechanism. In brief, we created
    several( replicated) server partitions that contains all the user-level
    Service objects that existed in the class-Forte apps. Then we wrote a
    'custom-router' which mimics Forte load-balanced router( dialog duration =
    session ) to intelligently route incoming HTTPRequests to one of these
    replicated partitions. The router would look at the some tag on the session
    and then route the request to one of these replicated "client clone" using
    the tag. Successive requests from the same client will go to the same
    replicated partition so that you can use the client-cache or any other
    per-user services.
    The advantages of this approach are
    1) You can continue to make use of caching and other user-level components
    that you may have.
    2) The web and classic Forte clients can work seamlessly if you write them
    to use reference partitions that hosts the other shared( Environment visible
    ) service objects.
    Ofcourse you will have to write ( and maintain )the custom-routing code and
    also pay attention to house-keeping. For example, the burdon of cleaning up
    the cache on logout or session expiration lies on you. If you don't do this,
    then your new user might be looking at an old cache of some other user.
    Hope this helps,
    Ajith
    Forte Systems Consultant.
    Subject: (forte-users) Web enterprise & user visible service objects
    Hi
    We have taken a forte application and converted it to run on the web using
    * forte web enterprise &
    * fortecgi.exe
    In the forte application we have a user visible Local Cache Manager
    Service Object (i.e. each users has their own copy) for storing things
    like
    * the details of the current user id
    * the details of the current client chosen
    * arrays that are needed by other windows
    With web enterprise this service object is no longer user visible, how can
    we make it user visible?
    Thanks in advance.
    Deborah Wallis
    dwallisnbs.co.za
    WARNING:
    Any unauthorised use or interception of this email is illegal. If this email
    is not intended for you, you may not copy, distribute nor disclose the
    contents to anyone. Save for bona fide company matters, the BoE Group does
    not accept any responsibility for the opinions expressed in this email.
    For further details please see: http://www.nbs.co.za/emaildisclaim.htm
    For the archives, go to: http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To unsubscribe, send in a new
    email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com

    A few months ago we faced a similar problem while migrating from classic
    Forte to Web. We had to protect our investment in various frameworks that we
    wrote for the classic Forte apps, which made use of extensive
    user-level-caching among other things.
    We solved the problem using a custom routing mechanism. In brief, we created
    several( replicated) server partitions that contains all the user-level
    Service objects that existed in the class-Forte apps. Then we wrote a
    'custom-router' which mimics Forte load-balanced router( dialog duration =
    session ) to intelligently route incoming HTTPRequests to one of these
    replicated partitions. The router would look at the some tag on the session
    and then route the request to one of these replicated "client clone" using
    the tag. Successive requests from the same client will go to the same
    replicated partition so that you can use the client-cache or any other
    per-user services.
    The advantages of this approach are
    1) You can continue to make use of caching and other user-level components
    that you may have.
    2) The web and classic Forte clients can work seamlessly if you write them
    to use reference partitions that hosts the other shared( Environment visible
    ) service objects.
    Ofcourse you will have to write ( and maintain )the custom-routing code and
    also pay attention to house-keeping. For example, the burdon of cleaning up
    the cache on logout or session expiration lies on you. If you don't do this,
    then your new user might be looking at an old cache of some other user.
    Hope this helps,
    Ajith
    Forte Systems Consultant.
    Subject: (forte-users) Web enterprise & user visible service objects
    Hi
    We have taken a forte application and converted it to run on the web using
    * forte web enterprise &
    * fortecgi.exe
    In the forte application we have a user visible Local Cache Manager
    Service Object (i.e. each users has their own copy) for storing things
    like
    * the details of the current user id
    * the details of the current client chosen
    * arrays that are needed by other windows
    With web enterprise this service object is no longer user visible, how can
    we make it user visible?
    Thanks in advance.
    Deborah Wallis
    dwallisnbs.co.za
    WARNING:
    Any unauthorised use or interception of this email is illegal. If this email
    is not intended for you, you may not copy, distribute nor disclose the
    contents to anyone. Save for bona fide company matters, the BoE Group does
    not accept any responsibility for the opinions expressed in this email.
    For further details please see: http://www.nbs.co.za/emaildisclaim.htm
    For the archives, go to: http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To unsubscribe, send in a new
    email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com

  • RE: forte-users-digest V1 #322

    Re: "We wish to eliminate any object references to the service object's
    partition. Any insight would be greatly appreciated." from Van Vuong
    <[email protected]>
    This was in regards to copying a set of object from a server to client.
    An implicit clone is being done. This also copyies objects they want to
    remain on the server.
    I believe the normal method of doing this is to anchor the server side
    objects. Then when the deep clone occurs, it stops at the anchored
    objects generating a proxy. That can also have other affects you do not
    want but will at least stop the copying.
    From: owner-forte-users-digest
    Sent: Tuesday, April 15, 1997 8:09 AM
    To: forte-users-digest
    Subject: forte-users-digest V1 #322
    forte-users-digest Tuesday, 15 April 1997 Volume 01 :
    Number 322
    How does deep copy apply to arrays?
    Re: Global Variables
    Re: Global Variables
    Using the Edit commands in a menu
    Re: Global Variables
    Re: How does deep copy apply to arrays?
    From: Van Vuong <[email protected]>
    Date: Mon, 14 Apr 1997 17:16:46 -0500
    Subject: How does deep copy apply to arrays?
    I have a service object that has a method that returns an array of
    objects. The return type for the method is defined with the copy option.
    I found documentation that states that the copy option creates a deep
    copy of the return variable on the partition that called the method.
    My question is: If the return type for the method is an array of
    objects, will the copy option create copies of all objects/elements in
    the array?
    We wish to eliminate any object references to the service object's
    partition. Any insight would be greatly appreciated.
    Thanks in advance,
    Van Vuong
    Phone: 972.985.5289
    Pager: 972.320.2232
    VoiceNow Pager: 972.330.0822
    E-mail: [email protected]
    PAGE NET
    From: David Bell <[email protected]>
    Date: Mon, 14 Apr 1997 22:44:19 +0000
    Subject: Re: Global Variables
    I got so much mail about and the object location manager, so
    I'll continue ...
    To make the thing truly portable, regardless of partition,
    you need to register the object with a name that is made
    up on the fly.
    The easisest way to do this is to make up a name composed of
    nodename (hopefully unique) plus the process ID. This should
    guarantee that you get to the correct object even if there are
    several instances around.
    Get the nodename from the operating system, then use the partition
    agent to ask for the PID. Form a unique name by concatenating these
    two piecies of information.
    // set up this app's subdirectory namespace
    ObjName : TextData = new(Value = '/MyApp/');
    // add nodename
    ObjName.Concat(task.part.operatingsystem.nodename);
    // get PID
    Partition : ActivePartitionAgent
    = ActivePartitionAgent(task.part.ActPartAgent);
    Instrument : ConfigValueInst
    = ConfigValueInst(Partition.FindInstrument('ProcessID'));
    // add PID to name
    Objname.Concat(Instrument.GetData.TextValue);
    Now register an anchored object with the object location
    manager
    // get the object location manager
    olm : ObjectLocationMgr;
    olm = task.Part.ObjectLocationMgr;
    // register my object with the name
    olm.RegisterObject(name = Objname, object = MyObj);
    Once it's registered, ask the object location manager for a handle
    so we can use it. Build the name, get hold of the object
    location manager, as above, then invoke BindObject on it.
    theObj =
    (ClassOfMyObj)(olm.BindObject(name=Objname, classType=ClassOfMyObj));
    If the names are formed in the same way, this call should return
    a handle to the object of message duration - you can set up
    session or transaction duration if required in the RegisterObject
    call.
    In some versions of Forte, before V.2.F.0, this call not work for
    objects located in the same partition.
    To get at the instruments, you will need to include the SystemMonitor
    Library.
    To come back to some other points, as Tom Wynant points out, you can
    have a user visible service object in a server partition.
    The problem comes when what you really want is the same user visible
    service object in lots of different partitions so that you can offer
    the same service - but locally.
    Today there is no way to do this oustide of client partitions without
    resorting to something similar to that presented above.
    - David
    David Bell Tel : +44 1344 482100
    Voice mail : +44 1344 353716
    Forte Software Limited Mobile : +44 378 300613
    Apex House
    London Road Email : mailto: [email protected]
    Bracknell Web : http://www.forte.com
    Berkshire
    RG12 2XH
    UK
    From: Pierre Gelli <[email protected]>
    Date: Tue, 15 Apr 1997 09:09:39 +0200
    Subject: Re: Global Variables
    Hello folks,
    Here is my idea on the topic.
    Although one normally doesn't need global variables in a OO system, there
    are cases when it's useful : a read cache of data available in the local
    active partition. This saves the overhead of accessing the data on a
    remote=
    SO.
    I read the solutions described by David Bell (location manager) and David
    Krieger (hack of the partition.appTitle).
    There is another way I think is a bit cleaner.
    It takes benefit of the fact that a custom system agent can be attached
    an
    object (in our case the local cache containing the global variables).
    Any active partition of the application then contains one such custom
    agent.
    Any class needing a global variable instantiates a small object, which is
    a
    manager of the custom agent. Its purpose is to ask the active partition
    for
    the custom agent, and then for the cache. If the agent doesn't exist it
    creates it as well has the local cache; if the agent exists, it returns
    the
    cache.
    There is a cache class.
    It is derived into one class to be the "cache server" broadcasting an
    event
    when some cache data changes. This class is used to create a cache
    server=
    SO.
    The cache class is also derived into a "local cache" class. It knows how
    to
    initialize it from the cache server. It listens to the event for updating
    its local data from the cache server SO when needed.
    Enough for the machinery.
    Then, for any instance of a class that needs a global variable,
    only two lines of code are needed, at initialization time, to get a
    reference to the local cache of the partition, then a global variable
    isaccessed as if part of a local object. This is quite affordable.
    This design guaranties that there is automatically one and only one
    up-to-date cache object in any active partition (running on a client or
    on a
    server). The local cache is seen as a local object by all objects that
    use
    it (no SO there). This design makes no assumption on the partitioning
    that
    will take place later. Which is I think one key strength of Fort=E9.
    If one is interested I can ship some code that illustrates these ideas.
    Hope this helps.
    Pierre Gelli
    ADP GSI
    Payroll and Human Resources Management
    72-78, Grande Rue, F-92310 SEVRES
    phone : +33 1 41 14 86 42 (direct) +33 1 41 14 85 00 (reception desk)
    fax : +33 1 41 14 85 99
    From: Bryan Gentile <[email protected]>
    Date: Tue, 15 Apr 1997 09:01:35 -0400
    Subject: Using the Edit commands in a menu
    I was wondering if anyone knows how to code for the edit menu submenu
    items
    like cut, copy, and paste. I am trying to use these in my menu, but I
    cannot find anything about how to code for them. Is there anything in
    the
    help or any examples to look at. I have been unsuccessful in finding
    anything about this.
    Thanks
    From: [email protected]
    Date: Tue, 15 Apr 1997 9:08:01 -0400 (EDT)
    Subject: Re: Global Variables
    [email protected] writes:
    <Snip!>
    Unfortunately all Forte Service Objects share a single name
    space. I thought from the documentation that User Visible
    Service Objects would work for me. However, when I tried User
    Visible Service Objects, they didn't quite do the trick because
    what I wanted was identically named service objects that resolve
    to a different local instance for each partition.You're right. You can put the user-visible service object in any
    partition you like, but it must go in one and only one
    partition. Rats. I can see why it's this way (based on the
    minimal implementation of the name server), but I can think of
    some good reasons why it shouldn't be. In fact, I may need to
    move some methods around based on this discussion. Again, rats!
    Tom Wyant
    "The greatest danger of communication is the illusion that it has
    occurred." (wish I knew who said that!).
    From: [email protected]
    Date: Tue, 15 Apr 1997 09:54:10 -0500
    Subject: Re: How does deep copy apply to arrays?
    Copy option always copies deep. Remember, also if you pass the array
    accross partitions, whether you specify copy or not, it is going to copy
    and copy deep.
    In an array, I am not sure if have the problem, because unless the array
    in-turn holds a huge tree, the array object may be wide, but not deep.
    Some thing to think about??
    Venkat
    End of forte-users-digest V1 #322
    *********************************

    Re: "We wish to eliminate any object references to the service object's
    partition. Any insight would be greatly appreciated." from Van Vuong
    <[email protected]>
    This was in regards to copying a set of object from a server to client.
    An implicit clone is being done. This also copyies objects they want to
    remain on the server.
    I believe the normal method of doing this is to anchor the server side
    objects. Then when the deep clone occurs, it stops at the anchored
    objects generating a proxy. That can also have other affects you do not
    want but will at least stop the copying.
    From: owner-forte-users-digest
    Sent: Tuesday, April 15, 1997 8:09 AM
    To: forte-users-digest
    Subject: forte-users-digest V1 #322
    forte-users-digest Tuesday, 15 April 1997 Volume 01 :
    Number 322
    How does deep copy apply to arrays?
    Re: Global Variables
    Re: Global Variables
    Using the Edit commands in a menu
    Re: Global Variables
    Re: How does deep copy apply to arrays?
    From: Van Vuong <[email protected]>
    Date: Mon, 14 Apr 1997 17:16:46 -0500
    Subject: How does deep copy apply to arrays?
    I have a service object that has a method that returns an array of
    objects. The return type for the method is defined with the copy option.
    I found documentation that states that the copy option creates a deep
    copy of the return variable on the partition that called the method.
    My question is: If the return type for the method is an array of
    objects, will the copy option create copies of all objects/elements in
    the array?
    We wish to eliminate any object references to the service object's
    partition. Any insight would be greatly appreciated.
    Thanks in advance,
    Van Vuong
    Phone: 972.985.5289
    Pager: 972.320.2232
    VoiceNow Pager: 972.330.0822
    E-mail: [email protected]
    PAGE NET
    From: David Bell <[email protected]>
    Date: Mon, 14 Apr 1997 22:44:19 +0000
    Subject: Re: Global Variables
    I got so much mail about and the object location manager, so
    I'll continue ...
    To make the thing truly portable, regardless of partition,
    you need to register the object with a name that is made
    up on the fly.
    The easisest way to do this is to make up a name composed of
    nodename (hopefully unique) plus the process ID. This should
    guarantee that you get to the correct object even if there are
    several instances around.
    Get the nodename from the operating system, then use the partition
    agent to ask for the PID. Form a unique name by concatenating these
    two piecies of information.
    // set up this app's subdirectory namespace
    ObjName : TextData = new(Value = '/MyApp/');
    // add nodename
    ObjName.Concat(task.part.operatingsystem.nodename);
    // get PID
    Partition : ActivePartitionAgent
    = ActivePartitionAgent(task.part.ActPartAgent);
    Instrument : ConfigValueInst
    = ConfigValueInst(Partition.FindInstrument('ProcessID'));
    // add PID to name
    Objname.Concat(Instrument.GetData.TextValue);
    Now register an anchored object with the object location
    manager
    // get the object location manager
    olm : ObjectLocationMgr;
    olm = task.Part.ObjectLocationMgr;
    // register my object with the name
    olm.RegisterObject(name = Objname, object = MyObj);
    Once it's registered, ask the object location manager for a handle
    so we can use it. Build the name, get hold of the object
    location manager, as above, then invoke BindObject on it.
    theObj =
    (ClassOfMyObj)(olm.BindObject(name=Objname, classType=ClassOfMyObj));
    If the names are formed in the same way, this call should return
    a handle to the object of message duration - you can set up
    session or transaction duration if required in the RegisterObject
    call.
    In some versions of Forte, before V.2.F.0, this call not work for
    objects located in the same partition.
    To get at the instruments, you will need to include the SystemMonitor
    Library.
    To come back to some other points, as Tom Wynant points out, you can
    have a user visible service object in a server partition.
    The problem comes when what you really want is the same user visible
    service object in lots of different partitions so that you can offer
    the same service - but locally.
    Today there is no way to do this oustide of client partitions without
    resorting to something similar to that presented above.
    - David
    David Bell Tel : +44 1344 482100
    Voice mail : +44 1344 353716
    Forte Software Limited Mobile : +44 378 300613
    Apex House
    London Road Email : mailto: [email protected]
    Bracknell Web : http://www.forte.com
    Berkshire
    RG12 2XH
    UK
    From: Pierre Gelli <[email protected]>
    Date: Tue, 15 Apr 1997 09:09:39 +0200
    Subject: Re: Global Variables
    Hello folks,
    Here is my idea on the topic.
    Although one normally doesn't need global variables in a OO system, there
    are cases when it's useful : a read cache of data available in the local
    active partition. This saves the overhead of accessing the data on a
    remote=
    SO.
    I read the solutions described by David Bell (location manager) and David
    Krieger (hack of the partition.appTitle).
    There is another way I think is a bit cleaner.
    It takes benefit of the fact that a custom system agent can be attached
    an
    object (in our case the local cache containing the global variables).
    Any active partition of the application then contains one such custom
    agent.
    Any class needing a global variable instantiates a small object, which is
    a
    manager of the custom agent. Its purpose is to ask the active partition
    for
    the custom agent, and then for the cache. If the agent doesn't exist it
    creates it as well has the local cache; if the agent exists, it returns
    the
    cache.
    There is a cache class.
    It is derived into one class to be the "cache server" broadcasting an
    event
    when some cache data changes. This class is used to create a cache
    server=
    SO.
    The cache class is also derived into a "local cache" class. It knows how
    to
    initialize it from the cache server. It listens to the event for updating
    its local data from the cache server SO when needed.
    Enough for the machinery.
    Then, for any instance of a class that needs a global variable,
    only two lines of code are needed, at initialization time, to get a
    reference to the local cache of the partition, then a global variable
    isaccessed as if part of a local object. This is quite affordable.
    This design guaranties that there is automatically one and only one
    up-to-date cache object in any active partition (running on a client or
    on a
    server). The local cache is seen as a local object by all objects that
    use
    it (no SO there). This design makes no assumption on the partitioning
    that
    will take place later. Which is I think one key strength of Fort=E9.
    If one is interested I can ship some code that illustrates these ideas.
    Hope this helps.
    Pierre Gelli
    ADP GSI
    Payroll and Human Resources Management
    72-78, Grande Rue, F-92310 SEVRES
    phone : +33 1 41 14 86 42 (direct) +33 1 41 14 85 00 (reception desk)
    fax : +33 1 41 14 85 99
    From: Bryan Gentile <[email protected]>
    Date: Tue, 15 Apr 1997 09:01:35 -0400
    Subject: Using the Edit commands in a menu
    I was wondering if anyone knows how to code for the edit menu submenu
    items
    like cut, copy, and paste. I am trying to use these in my menu, but I
    cannot find anything about how to code for them. Is there anything in
    the
    help or any examples to look at. I have been unsuccessful in finding
    anything about this.
    Thanks
    From: [email protected]
    Date: Tue, 15 Apr 1997 9:08:01 -0400 (EDT)
    Subject: Re: Global Variables
    [email protected] writes:
    <Snip!>
    Unfortunately all Forte Service Objects share a single name
    space. I thought from the documentation that User Visible
    Service Objects would work for me. However, when I tried User
    Visible Service Objects, they didn't quite do the trick because
    what I wanted was identically named service objects that resolve
    to a different local instance for each partition.You're right. You can put the user-visible service object in any
    partition you like, but it must go in one and only one
    partition. Rats. I can see why it's this way (based on the
    minimal implementation of the name server), but I can think of
    some good reasons why it shouldn't be. In fact, I may need to
    move some methods around based on this discussion. Again, rats!
    Tom Wyant
    "The greatest danger of communication is the illusion that it has
    occurred." (wish I knew who said that!).
    From: [email protected]
    Date: Tue, 15 Apr 1997 09:54:10 -0500
    Subject: Re: How does deep copy apply to arrays?
    Copy option always copies deep. Remember, also if you pass the array
    accross partitions, whether you specify copy or not, it is going to copy
    and copy deep.
    In an array, I am not sure if have the problem, because unless the array
    in-turn holds a huge tree, the array object may be wide, but not deep.
    Some thing to think about??
    Venkat
    End of forte-users-digest V1 #322
    *********************************

  • User visibility

    Is a User Visible service object, only accessible to the SO's also running in
    the same partition?
    Ex: MyDBSO is a DBSession in Part2. It's User visible and Session duration.
    MySqlSO is a TOOL based SO in Part1 which uses MyDBSO for it's DB connection.
    It's Environment visible and Session duration.
    Will MySqlSO be able to 'see' MyDBSO? Would I have to move MyDBSO into the same
    Partition as MySqlSO?
    We had this scenario with a little "batch" jobs we run each morning to clean up
    the database, reset values, etc. When partitioned (interpreted) as described
    above, it ran on our development AIX box, but when the distribution was copied
    & installed on our production box, the following error occurred: (acmbatchdb is
    like the MyDBSO example above)
    SYSTEM ERROR: Error invoking a method on an object of class
    (qqdb_SessionProxy) named
    (instance/80954a84-0e5d-11d1-b89b-478c23aeaa77:0x591:0x1/batchjobsprj_cl0/batchj
    obsprj_cl0-acmbatchdb)
    method (0xc,6,36).
    Class: qqsp_DistAccessException
    Error #: [601, 53]
    Detected at: qqdo_Message::Failed at 99
    Last TOOL statement: method BatchControllerClass.CreateOpenSchedule
    Error Time: Mon Oct 20 18:56:35
    Exception occurred (locally) on partition "BatchJobsPrj_cl0_Part1",
    (partitionId = 80954A84-0E5D-11D1-B89B-478C23AEAA77:0x591:0x1, taskId =
    [80954A84-0E5D-11D1-B89B-478C23AEAA77:0x591:0x1.21]) in application
    "BatchJobsPrj_cl0", pid 32332 on node VCMApp in environment QuincyEnv.
    SYSTEM ERROR: Cannot resolve the distributed reference for an object of
    class (qqdb_SessionProxy) named
    (instance/80954a84-0e5d-11d1-b89b-478c23aeaa77:0x591:0x1/batchjobsprj_cl0/batchj
    obsprj_cl0-acmbatchdb)
    for the reasons below.
    Class: qqsp_DistAccessException
    Error #: [601, 144]
    Detected at: qqdo_ProxyMgr::ResolveOutGoingProxy at 10
    Error Time: Mon Oct 20 18:56:35
    Exception occurred (locally) on partition "BatchJobsPrj_cl0_Part1",
    (partitionId = 80954A84-0E5D-11D1-B89B-478C23AEAA77:0x591:0x1, taskId
    = [80954A84-0E5D-11D1-B89B-478C23AEAA77:0x591:0x1.21]) in application
    "BatchJobsPrj_cl0", pid 32332 on node VCMApp in environment QuincyEnv.
    SYSTEM ERROR: No objects with the name
    (instance/80954a84-0e5d-11d1-b89b-478c23aeaa77:0x591:0x1/batchjobsprj_cl0/batchj
    obsprj_cl0-acmbatchdb)
    were found or are reachable.
    Class: qqsp_DistAccessException
    Error #: [601, 91]
    Detected at: qqdo_OlsNameInfo::GetNextObjectName at 2
    Error Time: Mon Oct 20 18:56:35
    Exception occurred (locally) on partition "BatchJobsPrj_cl0_Part1",
    (partitionId = 80954A84-0E5D-11D1-B89B-478C23AEAA77:0x591:0x1, taskId
    = [80954A84-0E5D-11D1-B89B-478C23AEAA77:0x591:0x1.21]) in application
    "BatchJobsPrj_cl0", pid 32332 on node VCMApp in environment QuincyEnv.
    Shouldn't we have gotten this error on the development box too? We moved
    acmbatchdb into the same partition as our 'BatchControllerClass' SQL service
    object & it was happy on the production box. Hmmm.
    Any ideas or comments would be greatly appreciated.
    Thanks
    Steven Barnes
    [email protected]

    Thanks - happy to award points but can you; -
    1. explicitly answer - would this hide users reports if they did not belong to the same org id
    2. point me at a document / blog / anything that details the 'how' of setting this up?
    thanks,
    Robert.

  • Re: Events in Service Objects

     

    At 12:32 AM 8/20/97 EDT, Gerard R. Connolly wrote:
    >
    The default partitioning in Forte does some strange things, in particular its
    placement of user-visible service objects in the client partition no matter
    where they are referenced and used.Do you have any sense about whether this relates to how well-stuctured the
    projects are when you go to do the partitioning? I.e., if you had a tool
    which helped in analyzing the way in which projects referenced each other
    and could use this to create an idea project structure before you did the
    partitioning, would the default partitioning be more likely to conform to
    the desired end partitioning?
    =========================================================================
    Thomas Mercer Hursh, Ph.D email: [email protected]
    Computing Integrity, Inc. sales: 510-233-9329
    550 Casey Drive - Cypress Point support: 510-233-9327
    Point Richmond, CA 94801-3751 fax: 510-233-6950

  • Window manager service object

    We use a user-visible service object to manage the positioning and
    cascading of our client windows, whether modal or not. Before each
    window performs an Open(), it registers it's reference and title
    with the SO. If there are other active windows of the same type,
    the title is modified to include a colon and count number, as in
    normal Windows applications. After the window performs the Close()
    method, it de-registers itself with the SO. Whilst open, the window
    can also call a method on the SO to cascade all active windows.
    (Every window has a Window\Cascade menu item for this purpose.)
    One of the reasons for using the SO to implement cascading, was to
    enable the user to cascade only the Forte application windows. If a
    non-Forte window gets in the way, you can use the Forte cascade to
    bring the Forte windows in front of it again !
    As an aside, the only windows that we have that are modal, are very
    small input windows that don't need much in the way of behaviour.
    As most of our windows are started using START TASKs, all windows
    need to keep references to child windows that they have
    instantiated, in order to perform orderly shutdowns, iconising and
    re-opening.
    Have fun !
    Justin Levis
    Hydro-Electric Commission
    Hobart, Tasmania
    Australia

    Please read the information posted @
    http://msdn.microsoft.com/en-us/library/windows/desktop/aa969540%28v=vs.85%29.aspx
    Desktop Window Manager
    The desktop composition feature, introduced in Windows Vista, fundamentally changed the way applications display pixels on the screen.  When desktop composition is enabled, individual windows no longer draw directly to the screen or primary display
    device as they did in previous versions of Windows. Instead, their drawing is redirected to off-screen surfaces in video memory, which are then rendered into a desktop image and presented on the display.
    Desktop composition is performed by the Desktop Window Manager (DWM).  Through desktop composition, DWM enables visual effects on the desktop
    as well as various features such as glass window frames, 3-D window transition animations, Windows Flip and Windows Flip3D, and high resolution support.
    The Desktop Window Manager runs as a Windows service. It can be enabled and disabled through the Administrative Tools Control Panel item, under Services, as Desktop Window Manager Session Manager.
    Many of the DWM features can be controlled or accessed by an application through the DWM APIs.  The following documentation describes the features and requirements of the DWM APIs.
    Please remember to click “Mark as Answer” on the post that helps you, and to click “Unmark as Answer” if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread. ”

  • Screen manager service object

    We use a user-visible service object to manage the positioning and
    cascading of our client windows, whether modal or not. Before each
    window performs an Open(), it registers it's reference and title
    with the SO. If there are other active windows of the same type,
    the title is modified to include a colon and count number, as in
    normal Windows applications. After the window performs the Close()
    method, it de-registers itself with the SO. Whilst open, the window
    can also call a method on the SO to cascade all active windows.
    (Every window has a Window\Cascade menu item for this purpose.)
    One of the reasons for using the SO to implement cascading, was to
    enable the user to cascade only the Forte application windows. If a
    non-Forte window gets in the way, you can use the Forte cascade to
    bring the Forte windows in front of it again !
    As an aside, the only windows that we have that are modal, are very
    small input windows that don't need much in the way of behaviour.
    As most of our windows are started using START TASKs, all windows
    need to keep references to child windows that they have
    instantiated, in order to perform orderly shutdowns, iconising and
    re-opening.
    Have fun !
    Justin Levis
    Hydro-Electric Commission
    Hobart, Tasmania
    Australia

    We use a user-visible service object to manage the positioning and
    cascading of our client windows, whether modal or not. Before each
    window performs an Open(), it registers it's reference and title
    with the SO. If there are other active windows of the same type,
    the title is modified to include a colon and count number, as in
    normal Windows applications. After the window performs the Close()
    method, it de-registers itself with the SO. Whilst open, the window
    can also call a method on the SO to cascade all active windows.
    (Every window has a Window\Cascade menu item for this purpose.)
    One of the reasons for using the SO to implement cascading, was to
    enable the user to cascade only the Forte application windows. If a
    non-Forte window gets in the way, you can use the Forte cascade to
    bring the Forte windows in front of it again !
    As an aside, the only windows that we have that are modal, are very
    small input windows that don't need much in the way of behaviour.
    As most of our windows are started using START TASKs, all windows
    need to keep references to child windows that they have
    instantiated, in order to perform orderly shutdowns, iconising and
    re-opening.
    Have fun !
    Justin Levis
    Hydro-Electric Commission
    Hobart, Tasmania
    Australia

  • RE: (forte-users) FW: (forte-users)

    Hi there
    Thanks very much for the solution - just wanted to let you know . We
    implemented the design that technote 11378 suggested .
    It worked .
    Thanks very much
    Cheers
    Jen
    -----Original Message-----
    From: Adamek, Zenon [mailto:ZAdamekpurolator.com]
    Sent: Tuesday, 20 March, 2001 9:21 PM
    To: 'forte-userslists.xpedior.com'
    Subject: (forte-users) FW: (forte-users)
    Hi David,
    The problem is that the SO uses an attribute of its class ACBAccount as
    the ObjectReference pointer. SO is not a stateless object. The possible
    scenario before crash can be that client A and B calls SO at the same
    time. A's thread creates ACBAccount gets the ObjectReference. At this
    point B's thread is activated, does the same as A creates new
    ObjectReference. Probably the next switch between A and B will be in the
    Connect() (B should wait for OLE server). If A is reactivated it doesn't
    get the original own reference but the B's reference. It can cause the
    crash and means that a thread can use reference created in some other
    thread.
    Regards,
    Zenon
    -----Original Message-----
    From: David McPaul [SMTP:dmcpaullumley.com.au]
    Sent: Monday, March 19, 2001 11:52 PM
    To: 'forte-userslists.xpedior.com'
    Subject: RE: (forte-users)
    Jenni,
    As Zenon has pointed out, technote 11378 talks about problems that
    can occur if the calls made to an OLE object are not from within the same
    thread the OLE object was created in. It goes on to show a design to
    avoid
    this.
    However, the code you have given DOES communicate to the OLE object
    in the same thread as it was created. So the problem as I see it is more
    likely to be that the OLE object is not being garbage collected. Although
    you do explicitly NIL out the ACBAccount object there is a technote 12453
    that deals with the need to set the ObjectReference of CDispatch objects
    to
    NIL to allow the OLE object to be completely reclaimed by the garbage
    collector. Failure to do so when using code that creates a new OLE object
    every time you ask for an account validation will eventually run the
    partition out of memory.
    As pointed out in a previous post you can also increase
    FORTE_STACK_SIZE but this will delay the problem not correct it.
    Rather than create the connection each time you may want to think
    about redesigning the method as shown in tech note 11378.
    Cheers
    David
    -----Original Message-----
    From: Adamek, Zenon [mailto:ZAdamekpurolator.com]
    Sent: Tuesday, March 20, 2001 5:05 AM
    To: 'Els, Jenni'
    Cc: 'forte-userslists.xpedior.com'
    Subject: RE: (forte-users)
    Hi Jenni,
    The most important issue by designing an OLE connection between a Forte
    server partition and an OLE component is taking into account that an OLE
    object can be referenced from the NT thread in Forte partition that it was
    created in. It is the reason that you have no problems with your mini-app
    in
    single-threaded version.
    This problem is discussed in the Technote 11378. You can find a workaround
    for your problem there, too.
    Regards,
    Zenon
    -----Original Message-----
    From: Els, Jenni [SMTP:JElsnbs.co.za]
    Sent: Monday, March 19, 2001 2:28 AM
    To: 'forte-userslists.xpedior.com'
    Subject: (forte-users)
    Hi there
    We have this situation
    We are calling a Service Object (in the server partition) from ourclient
    partition.This service object calls a method which calls a DLLregistered
    on our server (VB code) . This VB code access a database on anotherserver
    .(DSN set up on our server ).The database is sql server .
    We are having the problem where for about 3 hours in the morning , the
    system works perfectly. We then get a segmentation violation on this
    partition . When we run interpreted we can see that this is an OLEinvoked
    exception. The partition does not always show as offline in econsole
    and
    because it does not , we cannot 'online' another . We cannot take the
    entire app down as everything hangs . Eventually our technical depthas
    to
    down the server
    We set up a mini-app looping through and calling the DLL to simulate
    the
    problem . It worked fine. When we put another asynchronous task in the
    method to call the service object , it erred quite soon. We thencreate
    an
    attribute of type mutex and locked using that. The mini-app worked.
    However our app in development eventually hanged (without the
    partition
    coming though) .
    The service Object is an environment visible service object in asingle
    (non-replicated partition) . It has a dialog duration = session .
    In the project is
    ACB : ACBObject
    ACBObject : CDispatch (shared = disallowed , distributed =
    disallowed, transactional = disallowed, monitored = allowed)
    ACBValidator : Object (shared = allowed , distributed =allowed,
    transactional = disallowed, monitored = disallowed)
    ACBVaidatorSO : ACBValidator
    In this method we have this code to call the DLL
    self.ACBAccount = new;
    self.ACBAccount.CreateUsingCLSID(classID='{2EFD3084-7B05-11D3-857F-00105A4
    8CEA0}');
    pErrorMessage = new;
    acbaccount.BankCode = pBankCode.value;
    acbaccount.BranchCode = pBranchCode.value;
    at : VariantI2 = new;
    at.Value = pAccountType.Value;
    acbaccount.AccountType = at.Value;
    acbaccount.AccountNo = pAccountNo.value;
    begin
    acbaccount.Connect();
    exception
    when e : GenericException do
    ex : GenericException = new;
    ex.SetWithParams(severity = SP_ER_ERROR,
    message = 'There was an error connecting to the database');
    raise ex;
    end;
    begin
    err : i2 = acbaccount.ValidateAccount();
    if err != 0 then
    pErrorMessage.SetValue(acbaccount.ErrDescriptionStr(iErrorCode= err));
    acbaccount.Disconnect();
    return false;
    else
    pErrorMessage.SetValue('The account is
    valid!!');
    acbaccount.Disconnect();
    self.ACBAccount = NIL ;
    return true;
    end if;
    exception
    when e : GenericException do
    acbaccount.Disconnect();
    ex : GenericException = new;
    ex.SetWithParams(severity = SP_ER_ERROR,
    message = 'There was an error Validating the account');
    Task.ErrorMgr.AddError(ex);
    task.errormgr.ShowErrors();
    raise e;
    end;
    exception
    when e : GenericException do
    acbaccount.Disconnect();
    Task.ErrorMgr.ShowErrors();
    raise e;
    If anybody has any suggestions , they would be most welcome
    Thanks very much
    Cheers
    Jenni Els************************************************************************Th
    is e-mail is intended for the use of the individual or entity named above
    and may contain information that is confidential and privileged. If you
    are not the intended recipient, you are hereby notified that any
    dissemination, distribution or copying of this e-mail is strictly
    prohibited. If you have received this e-mail in error, please notify us
    immediately at helpdesklumley.com.au and destroy the original message.
    While this mail and any attachments have been scanned for common computer
    viruses and found to be virus free, we recommend you also perform your own
    virus checking processes before opening any attachments.
    For the archives, go to: http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To unsubscribe, send in a new
    email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com--
    For the archives, go to: http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To unsubscribe, send in a new
    email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com
    WARNING:
    Any unauthorised use or interception of this email is illegal. If this email
    is not intended for you, you may not copy, distribute nor disclose the
    contents to anyone. Save for bona fide company matters, the BoE Group does
    not accept any responsibility for the opinions expressed in this email.
    For further details please see: http://www.nbs.co.za/emaildisclaim.htm

    Hi there
    Thanks very much for the solution - just wanted to let you know . We
    implemented the design that technote 11378 suggested .
    It worked .
    Thanks very much
    Cheers
    Jen
    -----Original Message-----
    From: Adamek, Zenon [mailto:ZAdamekpurolator.com]
    Sent: Tuesday, 20 March, 2001 9:21 PM
    To: 'forte-userslists.xpedior.com'
    Subject: (forte-users) FW: (forte-users)
    Hi David,
    The problem is that the SO uses an attribute of its class ACBAccount as
    the ObjectReference pointer. SO is not a stateless object. The possible
    scenario before crash can be that client A and B calls SO at the same
    time. A's thread creates ACBAccount gets the ObjectReference. At this
    point B's thread is activated, does the same as A creates new
    ObjectReference. Probably the next switch between A and B will be in the
    Connect() (B should wait for OLE server). If A is reactivated it doesn't
    get the original own reference but the B's reference. It can cause the
    crash and means that a thread can use reference created in some other
    thread.
    Regards,
    Zenon
    -----Original Message-----
    From: David McPaul [SMTP:dmcpaullumley.com.au]
    Sent: Monday, March 19, 2001 11:52 PM
    To: 'forte-userslists.xpedior.com'
    Subject: RE: (forte-users)
    Jenni,
    As Zenon has pointed out, technote 11378 talks about problems that
    can occur if the calls made to an OLE object are not from within the same
    thread the OLE object was created in. It goes on to show a design to
    avoid
    this.
    However, the code you have given DOES communicate to the OLE object
    in the same thread as it was created. So the problem as I see it is more
    likely to be that the OLE object is not being garbage collected. Although
    you do explicitly NIL out the ACBAccount object there is a technote 12453
    that deals with the need to set the ObjectReference of CDispatch objects
    to
    NIL to allow the OLE object to be completely reclaimed by the garbage
    collector. Failure to do so when using code that creates a new OLE object
    every time you ask for an account validation will eventually run the
    partition out of memory.
    As pointed out in a previous post you can also increase
    FORTE_STACK_SIZE but this will delay the problem not correct it.
    Rather than create the connection each time you may want to think
    about redesigning the method as shown in tech note 11378.
    Cheers
    David
    -----Original Message-----
    From: Adamek, Zenon [mailto:ZAdamekpurolator.com]
    Sent: Tuesday, March 20, 2001 5:05 AM
    To: 'Els, Jenni'
    Cc: 'forte-userslists.xpedior.com'
    Subject: RE: (forte-users)
    Hi Jenni,
    The most important issue by designing an OLE connection between a Forte
    server partition and an OLE component is taking into account that an OLE
    object can be referenced from the NT thread in Forte partition that it was
    created in. It is the reason that you have no problems with your mini-app
    in
    single-threaded version.
    This problem is discussed in the Technote 11378. You can find a workaround
    for your problem there, too.
    Regards,
    Zenon
    -----Original Message-----
    From: Els, Jenni [SMTP:JElsnbs.co.za]
    Sent: Monday, March 19, 2001 2:28 AM
    To: 'forte-userslists.xpedior.com'
    Subject: (forte-users)
    Hi there
    We have this situation
    We are calling a Service Object (in the server partition) from ourclient
    partition.This service object calls a method which calls a DLLregistered
    on our server (VB code) . This VB code access a database on anotherserver
    .(DSN set up on our server ).The database is sql server .
    We are having the problem where for about 3 hours in the morning , the
    system works perfectly. We then get a segmentation violation on this
    partition . When we run interpreted we can see that this is an OLEinvoked
    exception. The partition does not always show as offline in econsole
    and
    because it does not , we cannot 'online' another . We cannot take the
    entire app down as everything hangs . Eventually our technical depthas
    to
    down the server
    We set up a mini-app looping through and calling the DLL to simulate
    the
    problem . It worked fine. When we put another asynchronous task in the
    method to call the service object , it erred quite soon. We thencreate
    an
    attribute of type mutex and locked using that. The mini-app worked.
    However our app in development eventually hanged (without the
    partition
    coming though) .
    The service Object is an environment visible service object in asingle
    (non-replicated partition) . It has a dialog duration = session .
    In the project is
    ACB : ACBObject
    ACBObject : CDispatch (shared = disallowed , distributed =
    disallowed, transactional = disallowed, monitored = allowed)
    ACBValidator : Object (shared = allowed , distributed =allowed,
    transactional = disallowed, monitored = disallowed)
    ACBVaidatorSO : ACBValidator
    In this method we have this code to call the DLL
    self.ACBAccount = new;
    self.ACBAccount.CreateUsingCLSID(classID='{2EFD3084-7B05-11D3-857F-00105A4
    8CEA0}');
    pErrorMessage = new;
    acbaccount.BankCode = pBankCode.value;
    acbaccount.BranchCode = pBranchCode.value;
    at : VariantI2 = new;
    at.Value = pAccountType.Value;
    acbaccount.AccountType = at.Value;
    acbaccount.AccountNo = pAccountNo.value;
    begin
    acbaccount.Connect();
    exception
    when e : GenericException do
    ex : GenericException = new;
    ex.SetWithParams(severity = SP_ER_ERROR,
    message = 'There was an error connecting to the database');
    raise ex;
    end;
    begin
    err : i2 = acbaccount.ValidateAccount();
    if err != 0 then
    pErrorMessage.SetValue(acbaccount.ErrDescriptionStr(iErrorCode= err));
    acbaccount.Disconnect();
    return false;
    else
    pErrorMessage.SetValue('The account is
    valid!!');
    acbaccount.Disconnect();
    self.ACBAccount = NIL ;
    return true;
    end if;
    exception
    when e : GenericException do
    acbaccount.Disconnect();
    ex : GenericException = new;
    ex.SetWithParams(severity = SP_ER_ERROR,
    message = 'There was an error Validating the account');
    Task.ErrorMgr.AddError(ex);
    task.errormgr.ShowErrors();
    raise e;
    end;
    exception
    when e : GenericException do
    acbaccount.Disconnect();
    Task.ErrorMgr.ShowErrors();
    raise e;
    If anybody has any suggestions , they would be most welcome
    Thanks very much
    Cheers
    Jenni Els************************************************************************Th
    is e-mail is intended for the use of the individual or entity named above
    and may contain information that is confidential and privileged. If you
    are not the intended recipient, you are hereby notified that any
    dissemination, distribution or copying of this e-mail is strictly
    prohibited. If you have received this e-mail in error, please notify us
    immediately at helpdesklumley.com.au and destroy the original message.
    While this mail and any attachments have been scanned for common computer
    viruses and found to be virus free, we recommend you also perform your own
    virus checking processes before opening any attachments.
    For the archives, go to: http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To unsubscribe, send in a new
    email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com--
    For the archives, go to: http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To unsubscribe, send in a new
    email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com
    WARNING:
    Any unauthorised use or interception of this email is illegal. If this email
    is not intended for you, you may not copy, distribute nor disclose the
    contents to anyone. Save for bona fide company matters, the BoE Group does
    not accept any responsibility for the opinions expressed in this email.
    For further details please see: http://www.nbs.co.za/emaildisclaim.htm

  • RE: (forte-users) Solaris -Dbsession Connectionproblem

    Yes, i set all the environment variables, the
    application could able to read as well.
    Thanks
    babu
    --- "Amin, Kamran" <kamran.aminlendware.com> wrote:
    Make sure the environment variable you might be
    using are defined on the
    server and also the resource manager name.
    -----Original Message-----
    From: Babu Raj [mailto:ibcsmartboyyahoo.com]
    Sent: Wednesday, August 30, 2000 12:50 PM
    To: forte-userslists.xpedior.com
    Subject: (forte-users) Solaris -Dbsession Connection
    problem
    Hi All,
    I have one weird problem. My application runs
    locally, but when i run distributed it kicks off
    saying, "unable to to connect to remote partition,
    please go there and look". In this application, i
    have
    simple DBSession connection to the Database, from
    Solaris box, it works fine, but if i run the same
    application, distributed mode, keeping that
    DbSession
    partition on the same machine, it throws the error.
    Any ideas, whats wrong here?
    Thanks,
    Babu
    Yahoo! Mail - Free email you can access from
    anywhere!
    http://mail.yahoo.com/
    For the archives, go to:
    http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To
    unsubscribe, send in a new
    email the word: 'Unsubscribe' to:forte-users-requestlists.xpedior.com
    Yahoo! Mail - Free email you can access from anywhere!
    http://mail.yahoo.com/

    Hi Mark,
    I have set, the new resource manager, and
    simple application using DBSession. Everuthing works
    fine, but when i partition, i keep the server
    partition on the same machine. It says, "connection to
    the partner terminated". It looks wierd.
    Thanks
    Babu
    --- Mark Musgrove <musgrovemarkyahoo.com> wrote:
    It sounds like you have a partitioning problem.
    When
    you partition this application, are you making sure
    that the SQL environment visible service object is
    in
    the same partition as the DBSession. It sounds like
    the DBSession(database connection) is not available
    to
    the SQL service object that is trying to use it.
    Hope this helps...
    Mark Musgrove
    Senior Consultant
    Object Technologies, Inc
    (540) 977-3861 (home)
    (540) 977-2794 (fax)
    Yahoo! Mail - Free email you can access from
    anywhere!
    http://mail.yahoo.com/
    For the archives, go to:
    http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To
    unsubscribe, send in a new
    email the word: 'Unsubscribe' to:
    forte-users-requestlists.xpedior.com
    Yahoo! Mail - Free email you can access from anywhere!
    http://mail.yahoo.com/

  • RE: (forte-users) Confusion with return event

    Samer,
    The return event is delivered to the calling task, which is the window in
    your first test. It is not deliverd to the event loop of the service object
    unless the call to the processor originated in the event loop, which is the
    case in your second test. The output you get from the server is exactly as I
    would expect.
    You need the following code in you client:
    event loop
    postregister
    SomeService1.StartImmediate();
    when SomeService1.Proc.ProcessEvent_return do
    task.Part.Logmgr.Putline('ProcessEvents_return');
    when SomeService1.Proc.ProcessEvent_exception do
    task.Part.Logmgr.Putline('ProcessEvents_exception');
    end event;
    Note that this logoutput will not be written to a logfile, but will appear
    in the logwindow which is opened when you start a client application.
    Pascal Rottier
    Atos Origin Nederland (BAS/West End User Computing)
    Tel. +31 (0)10-2661223
    Fax. +31 (0)10-2661199
    E-mail: Pascal.Rottiernl.origin-it.com
    ++++++++++++++++++++++++++++
    Philip Morris (Afd. MIS)
    Tel. +31 (0)164-295149
    Fax. +31 (0)164-294444
    E-mail: Rottier.Pascalpmintl.ch
    -----Original Message-----
    From: Samer Kanjo [mailto:skanjoyahoo.com]
    Sent: Thursday, January 18, 2001 1:54 AM
    To: ForteUsers
    Subject: (forte-users) Confusion with return event
    I have observed some odd behavior when attempting to
    catch a return event for a method invoked using start
    task. I provided the primary classes I used during my
    test and some output produced by those classes at the
    bottom of this message.
    The SomeService1 class is used to create an
    environment visible service object and the Processor
    class is one of its members. The Processor class
    starts processing when one of two things happens: the
    SomeService1 timer ticks off 10 seconds or when
    SomeService1.StartImmediate is called directly by
    another entity. Either way StartImmediate is called to
    start processing.
    The provided output is the result of starting a test
    application and invoking StartImmediate from another
    object (I used a window) and then observing what
    happens when the timer ticks. As you can see the
    invocation from the window did not result in the
    return event being received. However, the return event
    was received when the timer ticked.
    According to the Forte documentation a return event
    will only be posted to the parent task's event queue.
    Since I am making a cross partition call, the window
    and service object are not really in the same task
    (Unless my assumption is wrong). That would explain
    why the window did not cause a return event to be
    generated but was an event generated but not caught
    and if so where did the event go?
    In SomeService2 class I added an event StartProcessing
    and moved the code from StartImmediate to the
    StartProcessing event case in the event loop and
    simply posted the StartProcessing event in
    StartImmediate. I performed the same test I used when
    testing SomeService1. The Traceback output is
    identical for the window invocation but the return
    event is received this time! Why?
    It seems that to guarantee the receipt of a return
    event an asynchronous task must be initiated from
    within an event loop. Is this correct?
    I do not understand this behavior does someone have
    any thoughts on this? How can you guarantee the
    receipt of a return event?
    Samer Kanjo
    OUTPUT FROM SOMESERVICE1
    StartTaskTest_cl0: processing loop listening
    StartTaskTest_cl0:
    Traceback:
    SomeService.StartImmediate at line 1
    TestWin.Display at line 4
    C++ Method(s)
    UserApp.Run at offset 105
    StartTaskTest_cl0:
    StartTaskTest_cl0: Start processing...
    StartTaskTest_cl0: Processing complete.
    StartTaskTest_cl0:
    Traceback:
    SomeService.StartImmediate at line 1
    SomeService.ProcessingLoop at line 9
    StartTaskTest_cl0:
    StartTaskTest_cl0: Start processing...
    StartTaskTest_cl0: Processing complete.
    StartTaskTest_cl0: ProcessEvents_return
    OUTPUT FROM SOMESERVICE2
    StartTaskTest_cl0: processing loop listening
    StartTaskTest_cl0:
    Traceback:
    SomeService2.StartImmediate at line 1
    TestWin.Display at line 4
    C++ Method(s)
    UserApp.Run at offset 105
    StartTaskTest_cl0:
    StartTaskTest_cl0: Start processing...
    StartTaskTest_cl0: Processing complete.
    StartTaskTest_cl0: ProcessEvents_return
    StartTaskTest_cl0:
    Traceback:
    SomeService2.StartImmediate at line 1
    SomeService2.ProcessingLoop at line 9
    StartTaskTest_cl0:
    StartTaskTest_cl0: Start processing...
    StartTaskTest_cl0: Processing complete.
    StartTaskTest_cl0: ProcessEvents_return
    SOMESERVICE1 CLASS
    begin CLASS;
    class SomeService1 inherits from Framework.Object
    has public attribute proc: StartTaskTest.Processor;
    has public attribute processing: Framework.boolean;
    has public method Init;
    has public method ProcessingLoop;
    has public method StartImmediate;
    has property
    shared=(allow=off, override=on);
    transactional=(allow=off, override=on);
    monitored=(allow=off, override=on);
    distributed=(allow=on, override=on, default=off);
    end class;
    method SomeService1.Init
    begin
    super.Init();
    processing = FALSE;
    proc = new;
    start task ProcessingLoop();
    end method;
    method SomeService1.ProcessingLoop
    begin
    timer : Timer = new;
    timer.tickInterval = 10000;
    event loop
    task.part.logmgr.putline('processing loop
    listening');
    timer.isActive = TRUE;
    when timer.tick do
    StartImmediate();
    when proc.ProcessEvents_return do
    task.part.logmgr.putline('ProcessEvents_return');
    processing = FALSE;
    when proc.ProcessEvents_exception do
    task.part.logmgr.putline('ProcessEvents_exception');
    processing = FALSE;
    when task.shutdown do
    exit;
    end event;
    end method;
    method SomeService1.StartImmediate
    begin
    task.part.logmgr.putline(task.traceBack());
    processing = TRUE;
    start task proc.ProcessEvents() where completion =
    event;
    end method;
    end CLASS;
    SOMESERVICE2 CLASS
    begin CLASS;
    class SomeService2 inherits from Framework.Object
    has public attribute proc: StartTaskTest.Processor;
    has public attribute processing: Framework.boolean;
    has public event StartProcessing;
    has public method Init;
    has public method ProcessingLoop;
    has public method StartImmediate;
    has property
    shared=(allow=off, override=on);
    transactional=(allow=off, override=on);
    monitored=(allow=off, override=on);
    distributed=(allow=on, override=on, default=off);
    end class;
    method SomeService2.Init
    begin
    super.Init();
    processing = FALSE;
    proc = new;
    start task ProcessingLoop();
    end method;
    method SomeService2.ProcessingLoop
    begin
    timer : Timer = new;
    timer.tickInterval = 10000;
    event loop
    task.part.logmgr.putline('processing loop
    listening');
    timer.isActive = TRUE;
    when timer.tick do
    StartImmediate();
    when self.StartProcessing do
    processing = TRUE;
    start task proc.ProcessEvents() where completion =
    event;
    when proc.ProcessEvents_return do
    task.part.logmgr.putline('ProcessEvents_return');
    processing = FALSE;
    when proc.ProcessEvents_exception do
    task.part.logmgr.putline('ProcessEvents_exception');
    processing = FALSE;
    when task.shutdown do
    exit;
    end event;
    end method;
    method SomeService2.StartImmediate
    begin
    task.part.logmgr.putline(task.traceBack());
    post StartProcessing;
    end method;
    end CLASS;
    PROCESSOR CLASS
    begin CLASS;
    class Processor inherits from Framework.Object
    has public method Init;
    has public method ProcessEvents where completion =
    (return = ProcessEvents_return, exception =
    ProcessEvents_exception);
    has property
    shared=(allow=off, override=on);
    transactional=(allow=off, override=on);
    monitored=(allow=off, override=on);
    distributed=(allow=off, override=on);
    end class;
    method Processor.Init
    begin
    super.Init();
    end method;
    method Processor.ProcessEvents
    begin
    task.part.logmgr.putline('Start processing...');
    task.Delay(msecs = 1500);
    task.part.logmgr.putline('Processing complete.');
    end method;
    end CLASS;
    For the archives, go to: http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To unsubscribe, send in a new
    email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com

    Yes, you're right. The return event is queued until the moment that you
    actually enter an eventloop. I stand corrected.
    Pascal Rottier
    Atos Origin Nederland (BAS/West End User Computing)
    Tel. +31 (0)10-2661223
    Fax. +31 (0)10-2661199
    E-mail: Pascal.Rottiernl.origin-it.com
    ++++++++++++++++++++++++++++
    Philip Morris (Afd. MIS)
    Tel. +31 (0)164-295149
    Fax. +31 (0)164-294444
    E-mail: Rottier.Pascalpmintl.ch
    -----Original Message-----
    From: Adamek, Zenon [mailto:ZAdamekpurolator.com]
    Sent: Thursday, January 18, 2001 6:13 PM
    To: Rottier, Pascal
    Cc: 'forte-userslists.xpedior.com'
    Subject: RE: (forte-users) Confusion with return event
    I think it is always safe to use start task with where complition = event
    clause before event loop. The reason is described in Forte Help in the
    Complition Clause index:
    "Requesting the return and exception events automatically registers the
    events for the calling task. When the asynchronous method completes or
    terminates, Fort&eacute; adds the appropriate event to the calling task's event
    queue.
    This registration is unlike the event registration for the event statement.
    In the event statement, the event is registered just before the event
    statement is ready to process the event. In the start task statement, the
    return and exception events are registered when the task is started, even
    though it can be much later on that your application is prepared to wait for
    those events. Therefore, only the "parent" task that executes the start task
    statement is registered for the completion event of the started task."
    and some comments from "Forte Performance and Patterns" page 18:
    "When you use the where completion = event clause in the start task
    statement, Forte automatically buffer the return event until you register
    for it. Therefore, you do not need to worry about the child task completing
    before you register for its return event".
    Regards,
    Zenon
    -----Original Message-----
    From: Rottier, Pascal [SMTP:Rottier.Pascalpmintl.ch]
    Sent: Thursday, January 18, 2001 11:16 AM
    To: 'Samer Kanjo'; ForteUsers
    Subject: RE: (forte-users) Confusion with return event
    Yes, if you want the eventloop of the service object to be informed when
    the
    method on the processor class is invoked, regardless of who invoked it,
    then
    you should simply post an event as the last statement inside the method on
    the processor class.
    The return events are only used to inform a partent task that a child-task
    has completed. So, only the calling task receives the event, only if the
    calling task is inside an event-loop at the moment the child-task
    terminates
    and only if there really is a child task (method started using "start task
    Note, that the calling task doesn't have to be inside an event loop when
    the
    asynchronous call is made. It has to be inside an eventloop when the
    asynchronous task terminates. The following piece of code works just as
    well:
    SomeService1.StartImmediate();
    self.DoSomeOtherStuff();
    event loop
    when SomeService1.Proc.ProcessEvent_return do
    task.Part.Logmgr.Putline('ProcessEvents_return');
    when SomeService1.Proc.ProcessEvent_exception do
    task.Part.Logmgr.Putline('ProcessEvents_exception');
    end event;
    However, if the asynchronous task started from within "StartImmediate"
    finishes before the client gets a chance to enter its event loop, then
    you're too late to catch the event. That's why it's safer to use the
    "postregister" function, which makes sure a certain action is not started
    untill all events from the event loop have been registered.
    Pascal Rottier
    Atos Origin Nederland (BAS/West End User Computing)
    Tel. +31 (0)10-2661223
    Fax. +31 (0)10-2661199
    E-mail: Pascal.Rottiernl.origin-it.com
    ++++++++++++++++++++++++++++
    Philip Morris (Afd. MIS)
    Tel. +31 (0)164-295149
    Fax. +31 (0)164-294444
    E-mail: Rottier.Pascalpmintl.ch
    -----Original Message-----
    From: Samer Kanjo [mailto:skanjoyahoo.com]
    Sent: Thursday, January 18, 2001 5:04 PM
    To: ForteUsers
    Subject: RE: (forte-users) Confusion with return event
    Pascal,
    So you are confirming that a return event can only be
    received in an event loop if a task is started from
    within that event loop.
    After making your proposed changes I was able to
    receive the return event in the window.
    I originally wanted the SomeService event loop to
    always receive the return event regardless of whether
    or not StartImmediate is called by some other entity
    or called when the timer ticks. It seems that the only
    way to do this is with events. Is that correct?
    Thank you for insight,
    Samer Kanjo
    --- "Rottier, Pascal" <Rottier.Pascalpmintl.ch>
    wrote:
    Samer,
    The return event is delivered to the calling task,
    which is the window in
    your first test. It is not deliverd to the event
    loop of the service object
    unless the call to the processor originated in the
    event loop, which is the
    case in your second test. The output you get from
    the server is exactly as I
    would expect.
    You need the following code in you client:
    event loop
    postregister
    SomeService1.StartImmediate();
    when SomeService1.Proc.ProcessEvent_return do
    task.Part.Logmgr.Putline('ProcessEvents_return');
    when SomeService1.Proc.ProcessEvent_exception do
    task.Part.Logmgr.Putline('ProcessEvents_exception');
    end event;
    Note that this logoutput will not be written to a
    logfile, but will appear
    in the logwindow which is opened when you start a
    client application.
    Pascal Rottier
    Atos Origin Nederland (BAS/West End User Computing)
    Tel. +31 (0)10-2661223
    Fax. +31 (0)10-2661199
    E-mail: Pascal.Rottiernl.origin-it.com
    ++++++++++++++++++++++++++++
    Philip Morris (Afd. MIS)
    Tel. +31 (0)164-295149
    Fax. +31 (0)164-294444
    E-mail: Rottier.Pascalpmintl.ch--
    For the archives, go to: http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To unsubscribe, send in a new
    email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com
    For the archives, go to: http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To unsubscribe, send in a new
    email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com

  • Re: (forte-users) loadbalancing a service object

    Hi,
    If you need to share the values between your So, you can find a sample on
    http://perso.club-internet.fr/dnguyen
    It was designed to show how to manage shared states between replicates using
    fail over. It could also be used for load-bancing. A better way should be to
    manage the names of service objects within Forte (with the application,
    project name and compatibility level), but through the NameServer.
    Hope this helps,
    Daniel Nguyen
    Freelance Forte Consultant
    http://perso.club-internet.fr/dnguyen/
    Xiao, Menghua a &eacute;crit:
    Hello,
    I tried to loadbalance a service object that has both methods and
    attributes. The first copy of the service object works fine. However, all
    the attributes of the second copy of the service object are nil when a
    client try to use this copy. How can I make those two copies exactly the
    same?
    I am new to Forte. Any input will be greatly appreciated.
    Menghua Xiao
    Regional Transportation District,
    Denver, Colorado, USA
    For the archives, go to: http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To unsubscribe, send in a new
    email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com

    Hi,
    If you need to share the values between your So, you can find a sample on
    http://perso.club-internet.fr/dnguyen
    It was designed to show how to manage shared states between replicates using
    fail over. It could also be used for load-bancing. A better way should be to
    manage the names of service objects within Forte (with the application,
    project name and compatibility level), but through the NameServer.
    Hope this helps,
    Daniel Nguyen
    Freelance Forte Consultant
    http://perso.club-internet.fr/dnguyen/
    Xiao, Menghua a &eacute;crit:
    Hello,
    I tried to loadbalance a service object that has both methods and
    attributes. The first copy of the service object works fine. However, all
    the attributes of the second copy of the service object are nil when a
    client try to use this copy. How can I make those two copies exactly the
    same?
    I am new to Forte. Any input will be greatly appreciated.
    Menghua Xiao
    Regional Transportation District,
    Denver, Colorado, USA
    For the archives, go to: http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To unsubscribe, send in a new
    email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com

  • Re: (forte-users) Service Object

     

    what about subclassing it and putting the agent stuff in there
    Matthew Middleton Ph: +61 2 9239 4972
    Oryx Software Consultant Fax: +61 2 9239 4900
    Lawpoint Pty. Ltd. E-mail matthewmwriteme.com
    ----- Original Message -----
    From: Ramarao Pabbaraju <RPabbarajulmimsno.com>
    To: <kamranaminyahoo.com>
    Sent: Tuesday, February 29, 2000 9:02 AM
    Subject: (forte-users) Service Object
    Hi,
    We have a class X which we would like to use it for service object andalso
    to instantiate it locally to call some methods. We would like to have
    system agents for the service object, but not for objects instantiated
    locally. In other words, if the object is used for service object, only
    then we want the agents (customized) to be initialized. How do we find out
    whether it is service object in Init method self? Service objectproperties
    (like isAnchored) or attributes (given from ServiceObject
    properties/initial values window) are set only at the end of init method.
    One workaround we could think of is start a task at the end of init method
    and also delay the execution of method. Is there any clean way of doing
    this?
    Thanks in advance,
    Ramarao
    IonIdea
    For the archives, go to: http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To unsubscribe, send in a new
    email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com

  • RE: (forte-users) Object Request Brokers.....

    Hi Rajeev,
    I just happen to have the following two technotes on hand that helped me
    answers the very same questions..
    <<forte.zip>>
    Hope it helps... if you need more help... fell free to give me a shout!
    Ciao
    Kim
    -----Original Message-----
    From: Rajeev Talwar [SMTP:rtalshotmail.com]
    Sent: Monday, February 21, 2000 6:34 PM
    To: kamranaminyahoo.com
    Subject: (forte-users) Object Request Brokers.....
    Hi All,
    We are writing a cold fusion application which needs to use some
    services from a Forte application. We also have a Cold Fusion Visi
    Broker(ORB)to communicate with Forte. I was wondering what all we need
    in order to get a handle to all the service objects used by Forte
    application in our Cold Fusion application.
    Also do we need to change our deployment scheme for the Forte
    application. I
    believe we have to make a special deployment
    for Forte application to be available to ORB's. By default,
    Forte uses Unix internal communication mechanism like sockets
    etc. for service objects to be available across different
    partitions.
    Also do we need to run both applications and ORB on the same box
    or can we put them in some kind of network.
    I hope I made myself quite clear what we are looking for. I will be
    more than happy to put some more details in case someone needs
    further clarification.
    Are there any technotes out there whcih we can refer to.
    I will appreciate any thoughts.
    -Rajeev Talwar
    For the archives, go to: http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To unsubscribe, send in a
    new
    email the word: 'Unsubscribe' to:
    forte-users-requestlists.xpedior.com

    You can also use the HTTP-DC project.... You don't
    need Web Enterprise for this. From what I can tell,
    this is available in L.x on....
    There is api documentation in M.2 (with scant
    examples.)
    There's a special process to put the project in your
    repository (it isn't installed in the repository in
    the standard install,) the documentation in M.2
    (probably in M.0 too, AFAIK) that tells you how to do
    this (look for HTTP-DC in the online help.)
    I haven't done much with it yet, I've just installed
    it. If anybody out there has examples, that'd be
    great. I'll try to contribute more the moment I get a
    chance to explore it....
    Christopher Fury
    BellSouth Communications Systems
    --- Daniel Nguyen <dnguyenclub-internet.fr> wrote:
    Hi,
    If you have Web Enterprise, you can user
    HttpAccess.SendRequest().
    Hope this helps,
    Daniel Nguyen
    Freelance Forte Consultant
    Amin, Kamran a &eacute;crit:
    Is there any way to make a HTTP request from TOOLto another HTTP Service?
    thanks in advance.
    For the archives, go to:
    http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. Tounsubscribe, send in a new
    email the word: 'Unsubscribe' to:forte-users-requestlists.xpedior.com
    For the archives, go to:
    http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To
    unsubscribe, send in a new
    email the word: 'Unsubscribe' to:
    forte-users-requestlists.xpedior.com
    Kick off your party with Yahoo! Invites.
    http://invites.yahoo.com/

Maybe you are looking for