Making Forte service objects available to VisiBrokerclients
Hello!
In the Forte manual, Interfacing with External Systems, there's a section on
making Forte service objects available to ObjectBroker(DEC). We are using
VisiBroker as our ORB. Does anyone know if the instructions for
ObjectBroker can be used? Does anyone have experience making Forte service
objects visible to VisiBroker clients specifically?
Thanks in Advance!
Mark Savory
GTE Gov. Systems
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>
Hi,
If you are going to make Forte service objects accessible to the VisiBroker
CORBA/IIOP clients (C++, or Java clients), read Forte manual called "A Guide to
WebEnterprise Release 1.0.B (any new release???) of Forte WebEnterprise". You
may find that all materials beginning from Chapter 14 are useful and helpful.
I've posted many comments and issues unsolved to Forte forum in this area.
ObjectBroker is one of ORB products made by BEA, and is the first ORB product on
the market. It runs on dozens of platforms. In 1997, BEA acquired ObjectBroker
from Digital (DEC). All ORB products (most established products such as
VisiBroker for C++ 3.x and VisiBroker for Java 3.x from
Inprise(Borland/Visigenic), Orbix 3.x for C++ and OrbixWeb for Java 3.x from
Iona, ObjectBroker and Tuxedo from BEA, JavaIDL from JavaSoft) are made based on
OMG's CORBA/IIOP specifications. Theoretically, all ORBs products should be
interoperable.
Hope this help!
Shilong Yin
US West in Denver
=========================
Savory, Mark wrote:
Hello!
In the Forte manual, Interfacing with External Systems, there's a section on
making Forte service objects available to ObjectBroker(DEC). We are using
VisiBroker as our ORB. Does anyone know if the instructions for
ObjectBroker can be used? Does anyone have experience making Forte service
objects visible to VisiBroker clients specifically?
Thanks in Advance!
Mark Savory
GTE Gov. Systems
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>-
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>
Similar Messages
-
We are currently in the process of rearchitecting our software systems
around Forte.
Could anyone tell me what experiences they have had with building a
system using Forte Service objects in a multi-tiered system?
It seems to us that these are intended to be used as high-value
facade-like interfaces which serve as an entry point to the underlying
business object model. Is this correct?
Can we pass a remote object reference back to a client for its
subsequent use? If not, does this mean that we have to build a local,
client-based object model to hold the data returned from the service
object methods?
Any other assistance you can give will be very much appreciated.
Thanks
Andrew Lowtherhi
Basis Team will maintain some parameter value in the below transactions for the Serivce for Object storage capacity
RZ10 Maintain system profiles X -
Hi Andrew...
Service Objects, are, in essence, the central concept of any Forte
application, so I think that every participant in this forum can
probably offer some type of insight on using Forte Service Objects in
their application :).
Any type of shared application functionality is a candidate for
inclusion in a service object. The definition given on page 156 of the
Forte Programming Guide states that "[a] service object is a named
object that represents an existing external resource, a Forte shared
business service that is shared by multiple users, or a service that is
replicated to provide failover or load-balancing. The service object
contains information needed by the service as well as operations that
the service can perform."
Service objects are, imho, the most important concept for building a
successful Forte application, and by far the least well understood. I
suggest spending a good amount of time familiarizing yourself with the
Service Object concept, and then understanding the Service Object
properties (dialog duration, visibility, replication, search paths,
etc.) so that you can build a scalable, robust, and fault-tolerant
system to meet your user requirements. Forte is an incredibly powerful
tool when you understand all of the possibilities you have, especially
those related to Service Objects.
In order to get a better understanding of Forte Service objects and how
they relate to the design and development of your particular system, I
highly suggest participating in the Forte Object-Oriented Analysis and
Design (OOAD) course. You can get more information on the course and
register on-line by visiting the Forte Education website:
http://www.forte.com/Educate/index.htm. Additionally, you can take a
look at the Forte manuals, especially Chapter 8 of the Forte Programming
Guide and throughout the Guide to the Forte Workshops manual.
To answer one of your other questions... You can pass references to
objects from a service object back to a client in Forte (you can also,
for that matter, pass copies of objects - it depends upon your needs).
Again, to get a better understanding of these concepts, I suggest taking
the Forte OOAD class.
I hope this helps! Please let me know if you have any further questions
- I'd be happy to help.
-Katie
Andrew Lowther wrote:
>
We are currently in the process of rearchitecting our software systems
around Forte.
Could anyone tell me what experiences they have had with building a
system using Forte Service objects in a multi-tiered system?
It seems to us that these are intended to be used as high-value
facade-like interfaces which serve as an entry point to the underlying
business object model. Is this correct?
Can we pass a remote object reference back to a client for its
subsequent use? If not, does this mean that we have to build a local,
client-based object model to hold the data returned from the service
object methods?
Any other assistance you can give will be very much appreciated.
Thanks
Andrew Lowther--
Katie Carty
Senior Consultant
Forte Software, Inc.
http://www.forte.com
4801 Woodway Drive, Suite 300E
Houston, Texas 77056
vmail: (510) 986-3802
email: [email protected]
**************************************************Andrew,
We at Per-Se Technologies have developed an approach to alleviate many
"pains" with using service objects. Some things you will soon discover is
that although service objects provide fail-over, load balancing, etc., they
also,
1. Eat up valuable developer time because it takes time to repartition and
start partitions in development mode. In development mode (i.e., running
from the workshops), each developer gets their own copy of all partitions!
2. Limit the use of compiled libraries due to service object references in
TOOL code.
3. Consume valuable server resources because each developer has their own
copy of the partitions.
We have several alternatives to address all of the above problems. I am
currently working on converting a large application so that:
1. All developers share a single set of service objects/partitions. Each
developer doesn't have to wait while their copies of the partitions come
up. Therefore, development time is more fully utilized and server
resources are dramatically freed up.
2. Service objects are completely decoupled from an application.
Therefore, we can compile as much as possible.
You asked some other questions as well: You should always isolate SO
references as much as possible. We do this by using a facade. You can
pass a remote obj. reference to a client for future use.
Take care!
Dustin Breese
Supervising Technical Specialist
Per-Se Technologies
From: Andrew Lowther <[email protected]>
Date: Tue, 24 Feb 1998 16:24:31 -0000
Subject: Service Objects
We are currently in the process of rearchitecting our software systems
around Forte.
Could anyone tell me what experiences they have had with building a
system using Forte Service objects in a multi-tiered system?
It seems to us that these are intended to be used as high-value
facade-like interfaces which serve as an entry point to the underlying
business object model. Is this correct?
Can we pass a remote object reference back to a client for its
subsequent use? If not, does this mean that we have to build a local,
client-based object model to hold the data returned from the service
object methods?
Any other assistance you can give will be very much appreciated.
Thanks
Andrew Lowther -
Service objects inside libraries (WAS: Interfaces in Forte -has anyon
The following message is actually not about interfaces, but libraries:
> From: Jeanne Hesler <[email protected]>
> To: [email protected] <[email protected]>
> Date: Thursday, July 30, 1998 11:12 AM
> Subject: RE: Interfaces in Forte - has anyone used them?
>>
> Just to clarify a few things:
>>
1) Just to be 100% correct -- it is actually Libraries that areloaded and
not Interfaces. The distinction is important because a librarycould
potentially implement many interfaces (or provide manyimplementations for a
single interface).
2) The code in a Library may reference a service object, but itmay not
define a service object. Of course any SO's referenced by thelibrary
must already be known to the loading partition. It is OK to havecode like
this in a library:
MySO.doSomething();
The documentation is a little vague on this point, but I haveconfirmed that
this is true through Tech Support and by experimentation.
Actually you CAN define and use service objects inside libraries
(compiled or interpreted) with two restrictions:
1) You can not define two service objects inside library in different
projects and call one of them from another. If you need that, both
service objects must be in the same project.
2) If service object is defined and used only by library (if it never
referenced directly by application code), than in order to be able to
partition application, you will need to create dummy method inside
application, which will reference this service object (you do not need
to execute this method - just have in the code).
WBR,
Nickolay Sakharov.
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>The way stateful Web services are currently handled is through the use of cookies ... once your stub invokes a stateful Web service a cookie is created which routes subseqent requests back to the Web service.
In your scenario, the problem is given one client has creates Web service 1 and now Web service 2 would like to be able to use that state it really isn't possible unless you engineer a solution yourself ... you would need so somehow set the cookie on your Web service 2 client to that of the original client to Web service 1. State tends to be based around an individual client versus multiple clients for that state.
There are numerous ways around this but you would be engineering around the issue ... the easiest is to write the state out somewhere so that it can be shared.
This section of the doc gives a brief overview:
http://download-west.oracle.com/docs/cd/A97688_06/generic.903/b10004/javaservices.htm
Lastly be aware there is a bug with timeouts in stateful Web services in Oracle9iAS 9.0.3 that has been fixed in 9.0.4. I can't find the thread here that documents it but when I track it down I will post the link so you can see the workaround.
Mike. -
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.comI 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 -
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 é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.comHi,
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 é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 -
Devise object push service not available or busy
I did connect my ipad with my laptop but could not pair them as the error msg says "devise object push service not available or busy". Thing is, I could pair the same laptop with my android phone! Please any help?
You cannot pair an iPad to a computer for anything other than Internet tethering.
Android is not the same as iOS. -
Hi,
Is it possible to have a service object checking permanently for events
posted by other service objects? I have not been able to start this type of
object.
Thanks,
Guillermo Turk
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>I have something this (please, some patience :-) ):
//Example: handle event (the event is Beep)
interface AlarmListener{
void Beep(String hour); //declare a event handler
//The class that "raise" an event Beep
class Clock{
AlarmListener theAlarmListener; //Referecne to an listener object
//Register an listener object
public addAlarmListener(AlarmListener theAlarmListener){
this.theAlarmListener = theAlarmListener;
private ringAlarm(){
theAlarmListener.Beep("10:00 P.M."); //Raise Beep event
class Guy implements AlarmListener{
public Guy(){
Clock clock = new Clock();
clock.addAlarmListener(this);
//Handle Beep event
void Beep(String hour){
System.out.println("Ohhh, its time of wake up!!!");
//End
But, in this model my source object have only an listener object.
This can be improved by a array, like this:
class Clock{
AlarmListener[] theAlarmListener = new AlarmListener[10];
private int i = 0;
//Register an listener object
public addAlarmListener(AlarmListener theAlarmListener){
this.theAlarmListener[i++] = theAlarmListener;
//More code...
making to a side the limitation of size of an array (although this can be managed somehow if it is necessary), the problem begining to be more and more complex... i.e., it is necessary to create a method for unregister a listener...
And, what about with multi-threads programs??? The addAlarmListener method should be synchronized or something??
It should have an easier way!
PD: I think that I have used the Delegate pattern in conjunction with some other pattern.
PD: Forget my English. It is terrible
Saludos -
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.comYou 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 é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/ -
Service Object Init References
Has anyone come up with a good work around to allow Service Objects to
reference other service objects in their init methods or during application
startup. Since we can't specify the order in which Service Objects start,
is there a way we can execute some code once all Service Objects have come
online?
Will this idea work?
Start a task in the init method that loops for the referenced service object
to not be nil, then references the needed SO. For example:
while true do
if LogMgrSO = Nil then
task.delay(100);
else
exit;
end if;
end while;
Eric Rasmussen
Project Manager
Online Resources & Communications Corporation
(703)394-5128
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>Hi,
Sorry to answer so late ! I left (one year ago may be) some Tool code on
the Mailing list on that subject.
May be you have to consider some different cases :
1°) Is a Service started because it is only instanciated (<> NIL)?
2°) Forte insures that the first services to be started on a partition
are DBsession and DBResource Managers.
3°) A local Service or a distributed service are not exactly treated the
same way.
4°) The init() method has a specific way to run : the allocations are
made at the end.
1°) When a Service is not NIL it is only that it is instanciated. So
your initialization sequence is not endded may be or
the service is not insured to be started properly. It should be
important if you need to load a cache for instance. I
would recommand to test that a service is ON (for DBsessions for
instance) and to add (if possible) a state to determine
that a service is properly started.
2°) This is only available if you are inside the same partition on the
same machine. So if you have to synchronize with
external ressources from the partition you will need to treat them like
other services.
3°) A local Service will be NIL and then instanciated. The classname
will be the same as in the workshop.
A distrubuted service (exactly a service which is not on the same
partition) will have a different classname (Classname+Proxy).
So the external service proxy may be instanciated but the So May not,
and you will get a DistributedAccessException.
4°) The init() method may not be the best location for a synchronization
if you need to use an array for instance to
store you dependencies. So I would use a start task on an InitService()
method to avoid that problem.
Options :
- A dependency could be optionnal : after a certain amount of tries you
can abort synchronization on the service.
- You can use synchronization on "cold" and "hot" startup of services.
- You can develop a service agent which cold have instruments to see
dependencies and states, and commands to stop/start services.
- The Delay you may play should be different for each service you are
waiting for.
- The order of dependencies should have an importance (first put
mandatory dependancies, and then optional ones).
- A Service is not only a Service Object, but could also be just a
reference to an instance through a container for example.
- Some kind of autoStart : should I start all my services at the
beginning of my application or could I start some services
at the first call ? This should be available if you use your own
application protocole and if your services are inside some
service managers for instance.
Remarks :
Thoses concepts have been tested on a Framework from R2 to R3 of Forte
with success. With those, you can imagine
starting the application without knowing if the database is running, the
application will wait for the database
to be mounted. An other advantage of the synchronization is that you
will resolve the naming of the services at
the begining of the application. Then, you can stop the environment
manager and the application will still work
(for the clients which were already started of course). You can also
imagine transfering your partitions from one
node to an other at run-time.
Hope this helps,
Daniel Nguyen
Freelance Forte Consultant
Stephen McHenry wrote:
>
At 11:04 AM 10/1/98 -0700, John Jamison wrote:
begin
while true do
begin
..attempt "remote" SO reference..
exit; // while true do loop
exception
when e:UsageException do // if in same partition and not yet
initialized,
// you get a NIL object exception
task.errormgr.clear;
when e:DistributedAccessException do (or RemoteAccessException)
// if in a different partition, get this
error
task.errormgr.clear;
end;
event loop
aTimer : Timer = new (tickInterval=5*1000); // 5 seconds -
adjust to taste
aTimer.isActive=true;
when aTimer.Tick do
aTimer.IsActive=false;
exit;
end event;
end while;
end;One of the problems I see with all of these "catch the exception and try
again" schemes is that they fail to take into account that the SO you are
calling may, in fact, never appear (due to some sort of problem, of course)
and then you never exit this loop. It's a "liveness" problem with this
approach. So, be sure to add some alternate way out after 1 minute (or
whatever your particular threshold is) and raise an exception yourself.
Always gotta think about what happens if something goes wrong... ;-)
Stephen
|===========================================================================
===|
|Stephen McHenry | Design Consulting |Training courses
offered: |
|Advanced Software Tech | | -Distributed
Obj-Oriented |
|305 Vineyard Town Ctr #251| [email protected] | Analysis &
Design |
|Morgan Hill, CA 95037 | (408) 776-2720 x210 | -Intro to Object
Technology|
|USA | http://www.softi.com | -Advanced OO Design
|
|===========================================================================
===|
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>-
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/> -
Using Failover for DB Manager Service Objects
Michelin Tire Corporation
At Michelin, we are trying to implement a failover
service object using Oracle 7.3 on RS6000 platform (AIX 4.1.4).
We understand that we need to use HACMP (Clustering) and
Oracle's parallel server. This way the DB Service objects
on two different computer nodes can access the same database.
Has anyone used this configuration? If so, have you had any problems?
and how well does it work?
We would appreciate any information on this subject.
Thanks in advance,
Thomas SamsTommy Sams wrote:
>
Michelin Tire Corporation
At Michelin, we are trying to implement a failover
service object using Oracle 7.3 on RS6000 platform (AIX 4.1.4).
We understand that we need to use HACMP (Clustering) and
Oracle's parallel server. This way the DB Service objects
on two different computer nodes can access the same database.
Has anyone used this configuration? If so, have you had any problems?
and how well does it work?
We would appreciate any information on this subject.
Thanks in advance,
Thomas SamsAt CSI, we have planned to use HACMP with Forte' failover to provide a
high availability architecture for one of our customer.
There are a lot of stuff to consider, some related to hacmp
configuration, some to forte' mechanisms.
In particular we should use HACMP for managing RDBMS backup and Forte'
capabilities to deal with partitions/envs/nodemgrs failover. We have not
take into account Oracle's parallel server at the moment ( althought it
could be a good solution ) because we don't really need to access oracle
from 2 different nodes at the same time, but "just" to have a "realtime"
dbms backup in case of primary server fault.
The architecure we choosen is based on tre AIX server ( 1 application
server, 1 main dbms server, 1 backup server ( oracle failover, envs
failover).
We have started testing it using forte 2.0.h, but we realized that a
more complete functionality will be offered using 3.0 KEEP_ALIVE
features. So I could give you more feedback in the near future.
What type of solution have you in mind ?
Regards
Fabrizio Barbero
Barbero Fabrizio
CSI-PIEMONTE
Cso Unione Sovietica 216
10134 Torino ITALY
tel: +39 11 3168515
fax: +39 11 3168212
e-mail: [email protected] -
Hi.
Could you help me ....
I modified a bsp to display a PDF file into a new popup window, and I tested into my quality server using SE80 transaction and with my portal application after and evething was OK but when a released the new BSP into production server the BSP crashed.
This is the error message that throws:
503 Service not Available
Erro 6
Version 6040
MOdule http_j2ee_mt.c
Line 795
Server EMKIOAIX103_CRP_00
Details Cannot reach external application server on localhost:50000
I explain you my program does it:
1.- the user chooses the a record into a Inbox
2.- IC display its data with BSP IRecReason
3.- the user chooses a Action link
4.- IC display a action PRINT PDF
5.- the user selects a print pdf
This is my code to EH_ONGO than create the PDF spool
METHOD EH_ONGO .
DATA: function_name TYPE rs38l_fnam,
dummy(254) TYPE c,
ls_archive_index TYPE toa_dara,
ls_orderadm_h TYPE crmt_output_orderadm_h_com,
ls_activity_h TYPE crmt_output_activity_h_com,
ls_lead_h TYPE crmt_output_lead_h_com,
ls_opport_h TYPE crmt_output_opport_h_com,
ls_orgman_h TYPE crmt_output_orgman_h_com,
lt_partner_h TYPE crmt_output_partner_h_comt,
ls_pricingdata_h TYPE crmt_output_pricingdata_h_com,
ls_sales_h TYPE crmt_output_sales_h_com,
ls_shipping_h TYPE crmt_output_shipping_h_com,
lt_payplan_d_h TYPE crmt_output_payplan_d_h_comt,
ls_customer_h TYPE crmt_output_customer_h_com,
ls_cumulat_h TYPE crmt_output_cumulat_h_com,
lt_billing_h TYPE crmt_output_billing_h_comt,
lt_cancel_h TYPE crmt_output_cancel_h_comt,
lt_appointment_h TYPE crmt_output_appointment_h_comt,
lt_billplan_d_h TYPE crmt_output_billplan_d_h_comt,
lt_billplan_h TYPE crmt_output_billplan_h_comt,
lt_status_d_h TYPE crmt_output_status_d_h_comt,
lt_status_h TYPE crmt_output_status_h_comt,
lt_srv_subject_h TYPE crmt_output_srv_subject_h_comt,
lt_srv_reason_h TYPE crmt_output_srv_reason_h_comt,
lt_srv_result_h TYPE crmt_output_srv_result_h_comt,
ls_acs_h TYPE crmt_acs_h_com,
lt_orderadm_i TYPE crmt_output_orderadm_i_comt,
lt_orgman_i TYPE crmt_output_orgman_i_comt,
lt_pricingdata_i TYPE crmt_output_pricingdata_i_comt,
lt_pricing_i TYPE crmt_output_pricing_i_comt,
lt_product_i TYPE crmt_output_product_i_comt,
lt_sales_i TYPE crmt_output_sales_i_comt,
lt_shipping_i TYPE crmt_output_shipping_i_comt,
lt_schedlin_i TYPE crmt_output_schedlin_i_comt,
lt_customer_i TYPE crmt_output_customer_i_comt,
lt_partner_i TYPE crmt_output_partner_i_comt,
lt_item_cstics_i TYPE crmt_item_cstics_tab,
lt_billing_i TYPE crmt_output_billing_i_comt,
lt_cancel_i TYPE crmt_output_cancel_i_comt,
lt_finprod_i TYPE crmt_output_finprod_i_comt,
lt_ordprp_i TYPE crmt_output_ordprp_i_comt,
lt_appointment_i TYPE crmt_output_appointment_i_comt,
lt_billplan_d_i TYPE crmt_output_billplan_d_i_comt,
lt_billplan_i TYPE crmt_output_billplan_i_comt,
lt_orderadm_i_qt TYPE crmt_output_orderadm_i_qt_comt,
lt_orderadm_i_in TYPE crmt_output_orderadm_i_in_comt,
lt_schedlin_i_cf TYPE crmt_output_schedlin_i_cf_comt,
lt_status_i TYPE crmt_output_status_i_comt,
lt_working_set_e_s_bbp TYPE /1cn/working_set_e_s_bbp_t,
lv_language LIKE sy-langu,
lo_order TYPE REF TO cl_doc_crm_order,
lv_object_guid TYPE crmt_object_guid,
lv_object_kind TYPE crmt_object_kind,
lv_status TYPE jstat,
lt_status TYPE TABLE OF jstat,
lv_error_tab_wrk TYPE ssferror,
ls_output_options TYPE ssfcompop.
DATA: IP_SMART_FORM Type TDSFNAME,
IO_APPL_OBJECT Type Ref To OBJECT,
IO_APPL_OBJECT Type Ref to CL_DOC_CRM_ORDER_H,
IO_PARTNER Type Ref to CL_PARTNER_PPF,
IS_ARCHIVE_INDEX Type TOA_DARA,
CT_ARCHIVE_INDEX_TAB Type TSFDARA,
IS_ARCHIVE_PARAMETERS Type ARC_PARAMS,
control_parameters TYPE ssfctrlop,
IS_MAIL_APPL_OBJ Type SWOTOBJID,
IS_MAIL_RECIPIENT Type SWOTOBJID,
IS_MAIL_SENDER Type SWOTOBJID,
IP_USER_SETTINGS type TDBOOL,
ES_DOCUMENT_OUTPUT_INFO type SSFCRESPD,
ES_JOB_OUTPUT_INFO type SSFCRESCL,
ES_JOB_OUTPUT_OPTIONS type SSFCRESOP.
Resultado generado: Formato PDF
data: l_pdf_xstring type xstring,
lt_lines type table of tline,
ls_line type tline,
l_pdf_len type i,
lv_exist type n,
output_data type ssfcrescl,
lp_proc_stat TYPE ppfdtstat.
Explanation: this method executes the action,
gets the medium, gets the log, reads the messages from
the log and gets the spool id from the messages. JLARIN 27/DIC/06
DATA: lv_event TYPE REF TO cl_htmlb_event_tableview,
lv_index TYPE int4,
wa_action TYPE LINE OF crmt_action_table_tab,
ls_action_obj TYPE REF TO if_action_ppf,
lr_action TYPE REF TO cl_trigger_ppf,
lr_medium type Ref to if_medium_ppf,
ls_action TYPE zcrmt_action,
lv_spoolid TYPE symsgv.
DATA:
grid type ref to cl_crm_ic_gridlayout,
GLOBAL_EVENT type string.
data: lo_trigger type ref to CL_TRIGGER_PPF,
lo_sfprint type ref to CL_SF_PRINT_PPF,
lo_typed_context type ref to CL_CRM_IC_IRECACTIONPLAN_CTXT,
lt_all_data type PPFSINPRRU.
data: lo_rp_rc type i.
DATA: lv_head_guid TYPE crmt_object_guid.
DATA: adminh TYPE REF TO cl_crm_ic_irecactionplan_cn02,
guidstring TYPE string,
guid TYPE crmt_object_guid,
action_obj TYPE crmt_action_obj_tab,
lv_object_id TYPE crmt_object_id.
DATA: request_event TYPE REF TO cl_htmlb_event.
DATA: event_data TYPE REF TO if_htmlb_data.
DATA: event_value type string.
event_data = cl_htmlb_manager=>get_event_ex( request ).
if event_data is bound.
try.
request_event ?= event_data.
catch cx_sy_move_cast_error.
clear request_event.
endtry.
event_value = event_data->event_id.
translate event_value to lower case. "#EC TRANSLANG
endif.
if event_value <> 'x1_x3_x17_x21_actionitems'.
return.
endif.
TRY.
create object lo_sfprint.
create object lo_trigger.
lv_exist = 1.
Get the header GUID
adminh = typed_context->btadminh.
guidstring = adminh->get_actionitem( 'GUID' ).
If guidstring is initial.
return.
endif.
lv_head_guid = guidstring.
CALL FUNCTION 'CRM_ORDERADM_H_READ_OW'
EXPORTING
iv_orderadm_h_guid = lv_head_guid
IMPORTING
ev_object_id = lv_object_id
EXCEPTIONS
admin_header_not_found = 1
OTHERS = 2.
CALL FUNCTION 'CRM_ACTION_GET_TOOLBAR_IL'
EXPORTING
iv_ref_guid = lv_head_guid
iv_ref_kind = 'A'
IMPORTING
et_action_obj = action_obj
et_action_fld = action_fld
EXCEPTIONS
parameter_error = 1
error_occurred = 2
error_message = 3
OTHERS = 4.
IF sy-subrc EQ 0.
LOOP AT action_fld INTO wa_action where applkey = lv_object_id.
ENDLOOP.
IF sy-subrc EQ 0.
ls_action_obj = wa_action-action.
lv_exist = 0.
ENDIF.
ENDIF.
if lv_exist is initial.
CALL METHOD ls_action_obj->get_processing
IMPORTING
ei_processing = lr_medium.
CALL METHOD lo_trigger->get_appl
RECEIVING
result = io_appl_object.
call function 'CRM_ACTION_GET_APPL_OBJECT'
exporting
iv_ref_guid = lv_head_guid
iv_ref_kind = 'A'
IMPORTING
EV_APPL_OBJECT = io_appl_object.
CALL METHOD lr_medium->execute
EXPORTING
io_appl_ref = io_appl_object "lo_appl_ref
RECEIVING
rp_status = lp_proc_stat
EXCEPTIONS
missing_arguments = 1
OTHERS = 2.
ip_smart_form = lr_medium->get_smartform( ).
ip_smart_form = 'ZIMPR_ORDEN_RASTREO'.
get the function name for this smart form
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = ip_smart_form
IMPORTING
fm_name = function_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
determine the tables of the application
CALL FUNCTION 'CRM_OUTPUT_SINGLE_READ'
EXPORTING
iv_object = io_appl_object
iv_smart_form = ip_smart_form
ir_partner = io_partner
IMPORTING
es_output_orderadm_h = ls_orderadm_h
es_output_activity_h = ls_activity_h
es_output_lead_h = ls_lead_h
es_output_opport_h = ls_opport_h
es_output_orgman_h = ls_orgman_h
es_output_pricingdata_h = ls_pricingdata_h
es_output_sales_h = ls_sales_h
es_output_shipping_h = ls_shipping_h
et_output_partner_h = lt_partner_h
et_output_payplan_d_h = lt_payplan_d_h
es_output_customer_h = ls_customer_h
es_output_cumulat_h = ls_cumulat_h
et_output_billing_h = lt_billing_h
et_output_cancel_h = lt_cancel_h
et_output_appointment_h = lt_appointment_h
et_output_billplan_d_h = lt_billplan_d_h
et_output_billplan_h = lt_billplan_h
et_output_status_d_h = lt_status_d_h
et_output_status_h = lt_status_h
et_output_srv_subject_h = lt_srv_subject_h
et_output_srv_reason_h = lt_srv_reason_h
et_output_srv_result_h = lt_srv_result_h
es_output_acs_h = ls_acs_h
et_output_orderadm_i = lt_orderadm_i
et_output_orgman_i = lt_orgman_i
et_output_pricingdata_i = lt_pricingdata_i
et_output_pricing_i = lt_pricing_i
et_output_product_i = lt_product_i
et_output_sales_i = lt_sales_i
et_output_shipping_i = lt_shipping_i
et_output_schedlin_i = lt_schedlin_i
et_output_partner_i = lt_partner_i
et_item_cstics_i = lt_item_cstics_i
et_output_customer_i = lt_customer_i
et_output_billing_i = lt_billing_i
et_output_cancel_i = lt_cancel_i
et_output_finprod_i = lt_finprod_i
et_output_ordprp_i = lt_ordprp_i
et_output_appointment_i = lt_appointment_i
et_output_billplan_d_i = lt_billplan_d_i
et_output_billplan_i = lt_billplan_i
et_output_orderadm_i_qt = lt_orderadm_i_qt
et_output_orderadm_i_in = lt_orderadm_i_in
et_output_schedlin_i_cf = lt_schedlin_i_cf
et_output_status_i = lt_status_i
et_output_wrk_set_e_s_bbp = lt_working_set_e_s_bbp
ev_language = lv_language.
control_parameters-langu = sy-langu.
control_parameters-no_dialog = 'X'.
control_parameters-getotf = 'X'.
call function to process smart form
CALL FUNCTION function_name
EXPORTING
archive_index = is_archive_index
archive_index_tab = ct_archive_index_tab
archive_parameters = is_archive_parameters
control_parameters = control_parameters
mail_appl_obj = is_mail_appl_obj
mail_recipient = is_mail_recipient
mail_sender = is_mail_sender
output_options = ls_output_options
user_settings = ip_user_settings
orderadm_h = ls_orderadm_h
activity_h = ls_activity_h
lead_h = ls_lead_h
opport_h = ls_opport_h
orgman_h = ls_orgman_h
partner_h = lt_partner_h
pricingdata_h = ls_pricingdata_h
sales_h = ls_sales_h
shipping_h = ls_shipping_h
payplan_d_h = lt_payplan_d_h
cumulat_h = ls_cumulat_h
customer_h = ls_customer_h
acs_h = ls_acs_h
billing_h = lt_billing_h
cancel_h = lt_cancel_h
appointment_h = lt_appointment_h
billplan_d_h = lt_billplan_d_h
billplan_h = lt_billplan_h
status_d_h = lt_status_d_h
status_h = lt_status_h
srv_subject_h = lt_srv_subject_h
srv_reason_h = lt_srv_reason_h
srv_result_h = lt_srv_result_h
orderadm_i = lt_orderadm_i
orderadm_i_qt = lt_orderadm_i_qt
orderadm_i_in = lt_orderadm_i_in
orgman_i = lt_orgman_i
pricingdata_i = lt_pricingdata_i
pricing_i = lt_pricing_i
product_i = lt_product_i
sales_i = lt_sales_i
schedlin_i = lt_schedlin_i
schedlin_i_cf = lt_schedlin_i_cf
shipping_i = lt_shipping_i
partner_i = lt_partner_i
item_cstics_i = lt_item_cstics_i
customer_i = lt_customer_i
billing_i = lt_billing_i
cancel_i = lt_cancel_i
finprod_i = lt_finprod_i
ordprp_i = lt_ordprp_i
appointment_i = lt_appointment_i
billplan_d_i = lt_billplan_d_i
billplan_i = lt_billplan_i
status_i = lt_status_i
working_set_e_s_bbp = lt_working_set_e_s_bbp
language = lv_language
IMPORTING
document_output_info = es_document_output_info
job_output_info = output_data
job_output_options = es_job_output_options
EXCEPTIONS
output_canceled = 1
parameter_error = 2
OTHERS = 3.
call function 'CONVERT_OTF'
EXPORTING
format = 'PDF'
IMPORTING
bin_filesize = l_pdf_len
bin_file = l_pdf_xstring
TABLES
OTF = OUTPUT_DATA-OTFDATA
LINES = LT_LINES
EXCEPTIONS
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
err_bad_otf = 4
others = 5.
IF SY-SUBRC = 0.
DATA: lv_string TYPE string,
lv_numguid(10) TYPE N.
lv_string = lv_spoolid.
lv_numguid = lv_object_id.
CALL METHOD op_previewspool( iv_spoolid = lv_string ).
me->op_previewspool( iv_spoolid = lv_string
lv_pdf_xstring = l_pdf_xstring
lv_guid = lv_numguid ).
ENDIF.
endif.
CATCH cx_sy_move_cast_error.
ENDTRY.
ENDMETHOD.
<b>This part send the result to a new windows and refresh a main page, but thow a error 503 ...</b>
method OP_PREVIEWSPOOL .
*{ INSERT CRDK902447 1
DATA: lv_url TYPE string.
DATA: cached_response TYPE REF TO if_http_response,
new_navegator TYPE REF TO CL_WB_NAVIGATOR_NEW_WINDOW,
new_navigation TYPE REF TO CL_BSP_NAVIGATION.
DATA: guid TYPE guid_32.
Resultado generado: Formato PDF
data: l_pdf_xstring type xstring,
display_url type string,
pagina_url type string,
display_pag type string,
V_TARGET_URL TYPE STRING,
W_APP_NAME TYPE STRING,
l_pdf_len type i.
DATA: out TYPE REF TO IF_BSP_WRITER,
lv_out TYPE REF TO cl_BSP_WRITER,
lv_context Type Ref to IF_BSP_PAGE_CONTEXT,
lv_body type string,
lv_body2 type string,
lv_guidmem(10) type n,
lv_doscmd(200),
lv_pag type xstring,
lv_back(2) type n.
IF not lv_pdf_xstring is initial.
CREATE OBJECT cached_response TYPE CL_HTTP_RESPONSE EXPORTING add_c_msg = 1.
l_pdf_len = xstrlen( lv_pdf_xstring ).
cached_response->set_data( data = lv_pdf_xstring
length = l_pdf_len ).
cached_response->set_header_field( name = if_http_header_fields=>content_type
value = 'application/pdf' ).
cached_response->set_header_field(
name = 'content-disposition'
value = 'attachment; filename = test.pdf' ).
cached_response->set_status( code = 200 reason = 'OK' ).
cached_response->server_cache_expire_rel( expires_rel = 180 ).
CALL FUNCTION 'GUID_CREATE'
IMPORTING
ev_guid_32 = guid.
DATA:
LV_HOST TYPE STRING, "Host name
LV_PORT TYPE STRING, "Port Number
LV_LOCAL_URL TYPE STRING, "URL (Relative to the Current Server)
LV_ABS_URL TYPE STRING, "URL (Absolute, incl. Protocol, Host, Port)
LV_PROTOCOL TYPE STRING, "Available Protocol
LV_servidor TYPE STRING. "Available Protocol
Construct the Target URL
CALL METHOD RUNTIME->CONSTRUCT_BSP_URL
EXPORTING
IN_PROTOCOL = 'http'
IN_APPLICATION_NS = RUNTIME->APPLICATION_NAMESPACE
IN_APPLICATION = 'crm_ic'
IN_PAGE = '**/crm_ic'
IMPORTING
OUT_ABS_URL = V_TARGET_URL
OUT_HOST = LV_HOST
OUT_PORT = LV_PORT
OUT_LOCAL_URL = LV_LOCAL_URL
OUT_PROTOCOL = LV_PROTOCOL.
CONCATENATE 'crm_ic' '/**/' INTO W_APP_NAME.
REPLACE W_APP_NAME IN V_TARGET_URL WITH SPACE.
CONCATENATE V_TARGET_URL '/' guid '.pdf' INTO display_url.
cl_http_server=>server_cache_upload( url = display_url
response = cached_response ).
lv_url = adapter->if_bsp_page~get_page_url( ).
if LV_PORT is initial.
concatenate 'http://' LV_HOST lv_url+0(61) 'default.do' into lv_url.
else.
concatenate 'http://' LV_HOST ':' LV_PORT lv_url+0(61) 'default.do' into lv_url.
endif.
lv_body2 = '<html><head><script language=JavaScript>'.
concatenate lv_body2 'window.open("' display_url '"); ' INTO lv_body2.
concatenate lv_body2 ' location.href = "' lv_url '"; </script></head>' INTO lv_body2.
concatenate lv_body2 '<body></body></html>' INTO lv_body2.
concatenate lv_body2 ' function back(){ history.back( ); } </script></head>' INTO lv_body2.
concatenate lv_body2 '<body><a href="javascript:back();">regresar</a></body></html>' INTO lv_body2.
response->append_cdata( data = lv_body2 ) .
response->set_header_field( name = 'content-type'
value = 'text/html' ). "#EC NOTEXT
response->set_header_field( name = 'cache-control' value = 'max-age=0' ). "#EC NOTEXT
response->set_header_field( name = 'Expires' value = '0' ). "#EC NOTEXT
navigation->response_complete( ).
return.
ENDIF.
endmethod.Using the search bar, it seems it's a proxy issue, but finding a simple solution did not seem apparent. Have you tried a reboot? To reboot, hold the power and home buttons at the same time for at least 10 seconds (hold past the swipe to shut down bar, should it appear) until the Apple Logo appears, then let go fo both buttons and your iPad will restart. Hopefully, this will solve the problem......
-
RE: Re[2]: Service Object events and LockMgr
I think there are a lot to implement a lock manager. If several objects
should be updated in one transaction, the lock manager should be able to
handle rollbacks. Other things like release lock when exception happens,
avoiding dead locks, etc. Most of the features are provided by DBMS, so
I think using a option 2 would be a better solution.
-----Original Message-----
From: Dimitar Gospodinov [mailto:[email protected]]
Sent: Wednesday, July 28, 1999 2:44 PM
To: Peter Sham
Cc: Duncan Kinnear; [email protected]
Subject: Re[2]: Service Object events and LockMgr
Hello Peter,
Wednesday, July 28, 1999, 9:19:10 PM, you wrote:
PS> Hi,
PS> Just wonder exactly how this Lock Manager can be
implemented. Do you mean that you are
PS> going to cache every object that is instantiated from the
database? Or you just cache
PS> the object id, primary key, etc?
PS> Frankly speaking, I won't attempt to due with this kind
of currency coding myself as
PS> the database vendor has spent years in coding just to do this.
PS> Regards.
The second one - you just need some unique value that will identify
the object being locked. You should register with the Lock
Manager only
the objects that you want to lock.
For me, one of the goal of such pattern is to give you some freedom
from the specifics of the database lock mechanism.
Another benefit that I can see is that using such approach you can
always answer to the question: "Can I modify/delete this object?".
Best regards,
Dimitar mailto:[email protected]
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive
<URL:http://pinehurst.sageit.com/listarchive/forte>
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/forte>I think there are a lot to implement a lock manager. If several objects
should be updated in one transaction, the lock manager should be able to
handle rollbacks. Other things like release lock when exception happens,
avoiding dead locks, etc. Most of the features are provided by DBMS, so
I think using a option 2 would be a better solution.
-----Original Message-----
From: Dimitar Gospodinov [mailto:[email protected]]
Sent: Wednesday, July 28, 1999 2:44 PM
To: Peter Sham
Cc: Duncan Kinnear; [email protected]
Subject: Re[2]: Service Object events and LockMgr
Hello Peter,
Wednesday, July 28, 1999, 9:19:10 PM, you wrote:
PS> Hi,
PS> Just wonder exactly how this Lock Manager can be
implemented. Do you mean that you are
PS> going to cache every object that is instantiated from the
database? Or you just cache
PS> the object id, primary key, etc?
PS> Frankly speaking, I won't attempt to due with this kind
of currency coding myself as
PS> the database vendor has spent years in coding just to do this.
PS> Regards.
The second one - you just need some unique value that will identify
the object being locked. You should register with the Lock
Manager only
the objects that you want to lock.
For me, one of the goal of such pattern is to give you some freedom
from the specifics of the database lock mechanism.
Another benefit that I can see is that using such approach you can
always answer to the question: "Can I modify/delete this object?".
Best regards,
Dimitar mailto:[email protected]
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive
<URL:http://pinehurst.sageit.com/listarchive/forte>
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/forte> -
Re: Service Object events and LockMgr
On the option that you have considered, I have implemented the same model
in my previous project (using Java/RMI), but I felt that it is more than
what is normally needed for concurrency protection.
I can suggest another option that is worth considering which is in place in
our app for concurrency.
Almost every table in our db has created By, created On, modifed By,
modified On columns. The parent class of all business objects has
attributes that correspond to these four columns. In addition to these
four, there is a fifth attribute (introduced when concurrency was built)
called originalModifiedOn. Upon retrieval from the db, it is set to
modifiedOn value (from the db), during UPDATE, the value in this column is
added part of the WHERE clause. So when the second user tried to do save
the same object, the underlying db update will get a 'zero rows updated'
which is translated into an application error 'possible concurrency
error'. The user re-retreives the now 'stale' object before applying their
edits.
A lot of these things are and can be built into the framework imposing very
little work that each Object needs to do to have concurrency protection.
I am not sure if there is a mention in the Patterns paper of this model,
but it is very easy to implement and supports what is needed.
Kishore Puvvada's Mail
[email protected] on 07/28/99 01:47:00 AM
To: [email protected]@INTERNET
cc: (bcc: Kishore Puvvada/HQ-IS/TAL)
Subject: Service Object events and LockMgr
Hi folks,
We're currently looking at strategies for dealing with the simultaneous
updates to the database from multiple clients (concurrency
management). That is when two (or more) clients load the same object to
edit it, then make different changes and save them to the database.
We have a copy of a Forté document (from the "Patterns" course, I
think) which describes three methods of dealing with this:
1) Lock the database table row as soon as a client select it for editing
and hold the lock until it is saved.
2) Immediately before 'saving' check that the database hasn't changed
(either by reading what's there before updating, or by using a huge
'where' clause that contains all unchanged fields)
3) The Forté "LockMgr" pattern, which uses a service object with notifier
proxies to allow locking and updating notification between the clients.
Option 3 is obviously the most robust method, but it requires a fair
amount of coding and could also be a bottleneck for database reads and
writes.
But I have another option for which I was looking for opinions. What if
we had a "Change Event manager" which broadcast an event every time
a change is made to the database. Each business class would have its
own event. If the event had the object's primary key as a parameter, then
clients editing that particular object type could check to see if the object
currently on screen is the one that changed. That way you could disable
the 'save' until they had refreshed their on-screen data.
It's not particularily elegant, but it's reasonably simple to implement. It
also deals with changes sent across our WAN from other database
servers.
But this option is only worthwhile if you can replicate the "Change Event
manager" SO and still register for an event on the client. Can clients
register for SO events and receive an event generated by any of the SO's
replicates? Or when you register for an SO's event do you register for
only one instance of the SO?
Thanks in advance for any answers.
Cheers,
Duncan Kinnear,
McCarthy and Associates, Email:
[email protected]
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
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:
http://pinehurst.sageit.com/listarchive/forte>
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/forte>On the option that you have considered, I have implemented the same model
in my previous project (using Java/RMI), but I felt that it is more than
what is normally needed for concurrency protection.
I can suggest another option that is worth considering which is in place in
our app for concurrency.
Almost every table in our db has created By, created On, modifed By,
modified On columns. The parent class of all business objects has
attributes that correspond to these four columns. In addition to these
four, there is a fifth attribute (introduced when concurrency was built)
called originalModifiedOn. Upon retrieval from the db, it is set to
modifiedOn value (from the db), during UPDATE, the value in this column is
added part of the WHERE clause. So when the second user tried to do save
the same object, the underlying db update will get a 'zero rows updated'
which is translated into an application error 'possible concurrency
error'. The user re-retreives the now 'stale' object before applying their
edits.
A lot of these things are and can be built into the framework imposing very
little work that each Object needs to do to have concurrency protection.
I am not sure if there is a mention in the Patterns paper of this model,
but it is very easy to implement and supports what is needed.
Kishore Puvvada's Mail
[email protected] on 07/28/99 01:47:00 AM
To: [email protected]@INTERNET
cc: (bcc: Kishore Puvvada/HQ-IS/TAL)
Subject: Service Object events and LockMgr
Hi folks,
We're currently looking at strategies for dealing with the simultaneous
updates to the database from multiple clients (concurrency
management). That is when two (or more) clients load the same object to
edit it, then make different changes and save them to the database.
We have a copy of a Forté document (from the "Patterns" course, I
think) which describes three methods of dealing with this:
1) Lock the database table row as soon as a client select it for editing
and hold the lock until it is saved.
2) Immediately before 'saving' check that the database hasn't changed
(either by reading what's there before updating, or by using a huge
'where' clause that contains all unchanged fields)
3) The Forté "LockMgr" pattern, which uses a service object with notifier
proxies to allow locking and updating notification between the clients.
Option 3 is obviously the most robust method, but it requires a fair
amount of coding and could also be a bottleneck for database reads and
writes.
But I have another option for which I was looking for opinions. What if
we had a "Change Event manager" which broadcast an event every time
a change is made to the database. Each business class would have its
own event. If the event had the object's primary key as a parameter, then
clients editing that particular object type could check to see if the object
currently on screen is the one that changed. That way you could disable
the 'save' until they had refreshed their on-screen data.
It's not particularily elegant, but it's reasonably simple to implement. It
also deals with changes sent across our WAN from other database
servers.
But this option is only worthwhile if you can replicate the "Change Event
manager" SO and still register for an event on the client. Can clients
register for SO events and receive an event generated by any of the SO's
replicates? Or when you register for an SO's event do you register for
only one instance of the SO?
Thanks in advance for any answers.
Cheers,
Duncan Kinnear,
McCarthy and Associates, Email:
[email protected]
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
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:
http://pinehurst.sageit.com/listarchive/forte>
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/forte>
Maybe you are looking for
-
Error while executing agent. ORABPEL-05006
Hi: I have a bpel process waiting until a DbAdapter (with one Wait Activity) reads a record on database, but the problem is : - The record is in the database - The DbAdapter read it but the process don´t continue. - If the process is monitored by the
-
Hi, I have a scenario where i have to post invoice again Contract, I am not able to post using MIRO and FB60 or i may be approaching wrong. Could somebody please tell me how to approach to this problem? should i use any BADI? if yes could you please
-
Document Id from the POID?
Hi all, I need to read a kpro document from a content repository. I have the POID (object class, ) but need the physical document ID. I have the content repository id. I would like to show the document with the FM ARCHIVOBJECT_DISPLAY How can I achie
-
ADCS certificate enrollment error with RPC
I'm attempting to enroll in a computer certificate that works for a windows clients (W7), but not for the Apple (OS 10.9.4) clients. I've been using the following document, with no success (http://support.apple.com/kb/HT5357). The enrollment is bei
-
How do I delete unwanted folder from my email?
I am using yahoo email and was wondering is there a way to delete unwanted folders from my email? I have tried deleting them but I get a blank box and can't proceed until I name the folder that I do not want. Any ideas will be appreciated. Thank you.