Keeping Service Object Method Running
Does anyone have any suggestions how I can handle the followingsituation:
>
We want a service object to begin each morning and beavailable all day.
>
This service object contains a timer event that at specified timeswill
send events to certain users. Our approach this far has been for thefirst
user to sign on in the morning would start a task that would createthe
timer. Each subsequent user would first check if the timer is runningand
if it is, they would bypass this step. This works great until thefirst
user closes the application which in turn kills the task whichcontains the
timer.
How can we start a task that will not be killed when theparent is kille
d?
Any suggestions are greatly appreciated.
TIA
Tony
I'd suggest starting up the service independent of the clients by using
escript. The start task would be put into the INIT method of the
service object. You can put the escript commands in a batch job started
by a job scheduler. You can also shut down the service in the same
manner.
Bill
While I think I understand your thought process that led you to your design you have made an erroneous assumption when it comes to interfaces that has put you off the rails.
Casting to an interface does not magically mean that you can deserialize an object created with a non-existant class.
Which is what you are doing.
Let us say you have two classes...
public class ServisArayuzuServerImplementation implements ServisArayuzuand
public class ServisArayuzuClientImplementation implements ServisArayuzuThe problem is that when the server object is serialized in it's header it says it is a ServisArayuzuServerImplementation. Thus this class MUST exist on the client side if it is to be deserialized. And this MUST happen before any casting etc.
There are two possible solutions for the problem.
1) Use the same class on both sides.
2) Don't use ObjectInput and ObjectOutput streams but serialize the data yourself using DataInput and DataOutput streams. Then you can construct and deconstruct the objects as you need too. And they could be differen types if you wanted. This solution though is more complex so you'll have to decide for yourself.
Similar Messages
-
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 -
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 all,
I am new to the Migration Workbench tool - so excuse me if I ask some silly questions.
I have a MSAccess 2002 application with some tables and forms (plus macros) - When run the omwb2002.mde program (version 10.1.0.4.0) - select my mdb file, set the directories and press the "Export Database Schema" button I get an "Error #3343 - XMLExporter Method 'Run' of object '_Application' failed ..." error !
No Files are created !
Any help would be greatly appreciatedHi,
You may be receiving the MS Access Error #3343 - Unrecognized database format for one of the following reasons:
1. You are attempting to open an MS Access database in an older version of MS Access e.g opening a 2002 MDB file on a machine where MS Access 97 is installed.
Ensure that the Exporter Tool version and the MS Access MDB file version all match the version of MS Access installed on your machine e.g. If attempting to export a 2002 MDB file, you should use the omwb2002.mde and have MS Access 2002 installed on the machine.
2. You have a linked table to an Excel spreadsheet.
The Exporter tool supports the extraction of linked tables where the link is to another MS Access database. Links to Excel spreadsheets should be removed prior to export. Make a copy of your MDB file, and remove any such links from the new copy. Then carry out the export.
3. Your database is corrupt & needs to be repaired.
From the MS Access menu bar, go to Tools | Database Utilities | Compact and Repair Database... to repair the MDB file.
I hope this helps. If none of the above steps resolve your issue, please let me know.
Regards,
Hilary -
Access Migration Failure: Error 3021 Method 'Run' of object
I am doing a proof-of-concept to migrate and convert some Access applications.
I downloaded the migration tool and then tried the Northwind mdb to verify it worked and all went as planned with a SQL output file.
When I run it against a working copy of the production mdb it gives this error and produces no output.
Error #3021 – XMLExporter – Method ‘Run’ of object ‘_Application failed *access.mdb” Database Schema Export did not complete successfully.
I conjecture it is trying to 'Run' the object and not finding it. How can I work around this or fix the error. I am not an Access expert so any ideas are appreciated.
slavanaway
Message was edited by:
slavanawayHi Ian,
Thanks for the detailed posting, it's very helpful.
If you are receiving error #2501, it would appear that there's an issue in opening a report in your MS Access database.
When you open the MS Access database to be exported, can you successfully view your report(s) or do you receive the #2501 error even then? If you receive this error when accessing the reports, I believe it's relating to the printer setup on the machine. The default printer on the machine you are using may be "imcompatible" with the format of your MS Access report. Try to select another printer on your network as the default, or even try re-installing the default printer. If this does not resolve your issue, please let me know.
I hope this helps.
Regards,
Hilary -
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
AustraliaPlease 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. ” -
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/> -
Sharing Service Objects / Partitions between applications
I have 4 apps; to name App1, App2, App3 & App4. They all have public plans Plan1, Plan2 included. These public plans got few DBResMgrs in them. We each of these applications are released, each of them get their partitions with these DBResMgrs in it. Is there anyway I can have a single partition with these DBResMgrs and have all applications share them ? I am ready to explain further, if necessary.
You should also have a look at reference partitions.
Partition your first application as normal.
When you partition your second application create a reference partition for the service objects that exist in the first application and you want to reuse.
The resulting application will then use the first applications service objects.
You can also look at using libraries and interfaces as well.
The reference partition method is the quickest but the library and interface method is more usefull in the long run as you can deploy and use libraries more easily than applications.
Cheers
David -
Loadbalancing a service object
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, USAMenghua Xiao wrote:
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?Ummmmm ...
How are you initializing these attributes? In your Init method? Do you need
to refer to any other SOs to do it? Forte does not guarantee the order in
which service objects are initialized. Referring to other SOs in the Init
method may not work, or it may work well for a long time and then suddenly
break when Forte decides to initialize things in a different order in
response to an upgrade, or to some random change in the application, or for
no known reason. If you're replicating, things could conceivably get even
more complex, with different replicates being initialized at different
times. And if one if the Init methods fails, Forte can't create the service
object, and your entire application fails to start.
Furthermore, Forte will tell you that attributes on a service object are a
bad idea. It's possible that they tell you this because there are bugs
around it that they're ashamed to tell you about (have you checked Forte's
web page?). Even if there are no bugs, there are a BUNCH of traps you can
fall into if you do this. The only time I consider it safe to have
attributes on a replicated SO is if those attributes can be reliably
maintained on that SO. This restricts it to:
* Database connection objects, and other such things that don't need to be
in synch.
* Static data that NEVER, NEVER changes.
The reason for these severe restrictions are that there are no reliable
ways to keep the two SOs in synch.
All that said, how can you get away with it? My religion says the best way
is to turn your attributes into virtual attributes. The quick and dirty way
to do this is:
1. Rename the attribute from AttrName to PrivateAttrName, and MAKE IT
PRIVATE.
2. Write a GetAttrName method that returns the attribute. This method
should check to see if the attribute is NIL, and if so load it. It ends
with "Return PrivateAttrName;".
3. Re-create AttrName as a virtual attribute, with "GetAttrName ()" (no
semicolon) as its get expression.
This approach gets the initialization of the attribute out of the Init
method, and instead forces initialization on the first reference. Hopefully
this solves all the problems. If it does not solve them, you ought at least
to get a useful error message out of your service object this way. I hope.
Good luck,
Tom Wyant -
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
AustraliaWe 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 -
Hello. We'd like to be able to determine when a TOOL service object
starts up from within another TOOL service object. I understand the
problems with service object start up ordering, but I'll summarize
them here:
1. You can't reference a service object until it's up
2. You can't guarantee a service object to be up unless
a) it's a non-TOOL SO (DB Resource Manager or DB Session)
b) it's a TOOL SO in another partition which is numerically lower
than yours
According to Forte support, we should put our dependant service objects in
different partitions and use the numerical startup to get them going. For
example, if SO A depends on SO B, we need SO B in partition 1 and SO A in
partition 2. Also, if we have A depends on B and nobody else uses B, we
should probably use A as an umbrella for B.
But what if we don't want to do this? What if we don't want to take the
performance hit from the partitioning? What if we've got multiple
client-visible SOs that interact? We tried this scheme:
in A.Init():
super.Init()
start task Startup()
in A.Startup():
while B_SO = NIL do
task.part.operatingsystem.sleep(SPIN_TIME);
end while;
// now do stuff with B_SO
self.Ready = TRUE; // users can test this to see if A_SO is ready
The above works sporadically. According to support, that's because
testing the NIL reference isn't like testing for NIL on a normal object,
the name service is involved and that can screw things up.
Anybody have something that works? This seems to be a really stupid
feature of the system.
========================================================================
Neil Gendzwill, Senior Software Engineer, SED Systems, Saskatoon, Canada
E-MAIL: [email protected] PHONE: (306) 933-1571 FAX: (306) 933-1486
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>Neil-
The reason your scheme fails occasionally (I'm pretty sure) is the
"start task" in the init method.. The only thing you are guaranteed by
partition order, etc, is that the "init" methods are executed (i.e. the
objects are instantiated) in the order you want. If you start
asynchronous tasks from within the init method, all bets are off as to
whether the spun-off asynchronous task will get done before the next
service object init() is called or even before the first client is
allowed to come on line.. All depends on the thread switching, which of
course cannot be predicted or counted on (hence the term "thread-safe
code").
I use something similar to the subsequent writer on the thread (Mark
Sundsten) except that service objects which need other objects (like
services requiring DB session brokers) go through a multi-step process
waiting for the broker to be up and truly ready for business:
Keep testing for a legal reference to the broker until it is non-NIL
and no exception
Post an "areyoualive" event on the broker with suitable
retry/error-handling until positive response
The broker, of course, does the start task startup() sort of thing in
its init method, the final step of which is to begin responding to
"areyoualive" events with the proper response.
The final trick is that no services on the service object work (they
block/wait) until the object has successfully started (including the
wait for the broker). This is to avoid client requests from being
processed before the service is ready.
With this technique, you can put service objects and their brokers
wherever you want to. I wish it was simpler, but when you enter the
world of multiple threads you need to carefully plan your startup
behavior and bullet-proof all code to be thread safe.
I've also seen techniques where the first actual service request
performs a startup if it hasn't been done already. Sort of the "lazy
instantiation" of service-object startups.. Problem is, of course, that
for the reason outlined above the first client can come alive and begin
asking for things from the services before asynchronous tasks started in
the init methods are done. If you go this direction, make sure you
understand this nuance and have no ansych startups occurring in init
methods.
Hope this helps.
-Greg
-----Original Message-----
From: Neil Gendzwill [SMTP:[email protected]]
Sent: Friday, June 19, 1998 12:48 PM
To: Users, Forte
Subject: Service object start-up
Hello. We'd like to be able to determine when a TOOL service
object
starts up from within another TOOL service object. I understand
the
problems with service object start up ordering, but I'll
summarize
them here:
1. You can't reference a service object until it's up
2. You can't guarantee a service object to be up unless
a) it's a non-TOOL SO (DB Resource Manager or DB Session)
b) it's a TOOL SO in another partition which is numerically
lower
than yours
According to Forte support, we should put our dependant service
objects in
different partitions and use the numerical startup to get them
going. For
example, if SO A depends on SO B, we need SO B in partition 1
and SO A in
partition 2. Also, if we have A depends on B and nobody else
uses B, we
should probably use A as an umbrella for B.
But what if we don't want to do this? What if we don't want to
take the
performance hit from the partitioning? What if we've got
multiple
client-visible SOs that interact? We tried this scheme:
in A.Init():
super.Init()
start task Startup()
in A.Startup():
while B_SO = NIL do
task.part.operatingsystem.sleep(SPIN_TIME);
end while;
// now do stuff with B_SO
self.Ready = TRUE; // users can test this to see if A_SO is
ready
The above works sporadically. According to support, that's
because
testing the NIL reference isn't like testing for NIL on a normal
object,
the name service is involved and that can screw things up.
Anybody have something that works? This seems to be a really
stupid
feature of the system.
========================================================================
Neil Gendzwill, Senior Software Engineer, SED Systems,
Saskatoon, Canada
E-MAIL: [email protected] PHONE: (306) 933-1571 FAX: (306)
933-1486
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/> -
How to build sql query for view object at run time
Hi,
I have a LOV on my form that is created from a view object.
View object is read-only and is created from a SQL query.
SQL query consists of few input parameters and table joins.
My scenario is such that if input parameters are passed, i have to join extra tables, otherwise, only one table can fetch the results I need.
Can anyone please suggest, how I can solve this? I want to build the query for view object at run time based on the values passed to input parameters.
Thanks
Srikanth AddankiAs I understand you want to change the query at run time.
If this is what you want, you can use setQuery Method then use executeQuery.
http://download.oracle.com/docs/cd/B14099_19/web.1012/b14022/oracle/jbo/server/ViewObjectImpl.html#setQuery_java_lang_String_ -
Have 2 host cluster as part of infrastructure adding to VMM.
Added cluster server. 1st had no issue and has picked up it's VMs. Second gave this error below:
Error (416)
Agent installation timed out while waiting on service VMMAgentInstaller on host02domain.private.
Recommended Action
Ensure that the Windows Installer service is running on host02.domain.private and try the operation again.
Sure the Windows Installer has nothing to do with this but in case I manually started it on the server without issue.
On retrying first without starting Windows Installer manually and then doing so in both instances I get:
Error (2912)
An internal error has occurred trying to contact the host02.domain.private server: : .
WinRM: URL: [http://host02.domain.private:5985], Verb: [INVOKE], Method: [GetVirtualizationStatus], Resource: [http://schemas.microsoft.com/wbem/wsman/1/wmi/root/scvmm/AgentManagement]
An instance of the service is already running (0x80070420)
Recommended Action
Check that WS-Management service is installed and running on server host02.domain.private. For more information use the command "winrm helpmsg hresult". If host02.domain.private is a host/library/update server or a PXE server role then ensure
that VMM agent is installed and running. Refer to http://support.microsoft.com/kb/2742275 for more details.
I've tried killing the VMM Agent running on the host (which is running now after the attempted deploy) and rerunning - as the second error indicates it can't run because it's already running (far as I can figure). But even though it takes longer to run then
it still fails with exactly the same error.
I've checked the host and winrm shows as already running and already set up for remote management.
Am I missing something?Hi Allister,
What is the version of SCVMM ?
Did you follow the document ?
As for VMM 2008R2 :
"On the Select Host Servers page, in the Computer name box, type either the name of the cluster or the name of any node in the cluster, and then click
Add."
"Do not skip Active Directory name verification. If you do, the wizard will add the host as a stand-alone host instead of discovering the cluster nodes "
"When you specify the name of a failover cluster that was created in Windows Server 2008 or Windows Server 2008 R2, or you specify a node in one of these clusters, the Add Hosts Wizard discovers all nodes in the cluster and adds
them to VMM. "
https://technet.microsoft.com/en-us/library/ee236431.aspx
Also 2012 :
https://technet.microsoft.com/en-us/library/gg610648.aspx
For your case , I would suggest you to stop VMM service and remove the added cluster from
scvmm then follow the article and add cluster again .
Best Regards,
Elton Ji
Please remember to mark the replies as answers if they help and unmark them if they provide no help. If you have feedback for TechNet Subscriber Support, contact [email protected] . -
FIM MA Export errors. There is an error executing a web service object creation.
While checking for the permission, we have figured that the Built-In Synchronization account is being deleted by an Expiration Workflow.
FIM MA Export errors. There is an error executing a web service object creation.
While checking for the permission, we have figured that the Built-in Synchronization account was deleted by an Expiration Workflow
Is there a way to restore. Thanks.I would re-run FIM setup - I think it can re-create this account
If you found my post helpful, please give it a Helpful vote. If it answered your question, remember to mark it as an Answer. -
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
-
how the **** do i talk to someone at apple since this ******* website keeps taking me in circles
-
To start with, these sites worked fine before the upgrade. Both of my kids enjoy the webkinz website ( for what reason I do not know!!!) but when one clicks logon it works fine. The other one get's blocked, even though it's been permitted in parental
-
Can Business Partner number and Vendor Number, Plant Numbe be same in SRM ?
Hi Experts, We are configuring SRM7.0 with ECC6 ( Ehp4) having Classic Scenario . I configured sandbox, and everything working fine. I have one query. The Business Partner Number and the Vendor Code or Plant code are different. So while entewring th
-
Add new product to already existing PPR ID through BAPI_PPR_MAINTAIN_40
Hi, My requirement is to add new product to already existing PPR ID through the BAPI BAPI_PPR_MAINTAIN_40 but it is not working. Normally at the time of creation we pass HANDLE and REF_HANDLE. As in this case PPR ID already exist but adding new produ
-
E90 Sofware Updater doesn't work
I downloaded and tried to install the Software Updater, but with really bad results. I got error message stating that Critical Components are missing and after that with error message 1706 no valid source for Nokia Software Updater. The saddest thing