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/>
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/>
Similar Messages
-
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/> -
Hi Forum members,
We have a client that has intermittent issues with RDS on a 2012 R2 server.
As an overview of the environment, the client has a single VMWare host support 2 x Windows 2012 R2 VMs one is the File/Print/Email server and the 2nd is the RDS server used to allow the client to run MYOB Enterprise. Both servers have the AD DS role and
DNS roles amongst others.
The 1st issue is that the RD Connection Broker shows the error: "The server pool does not match the RD Connection Brokers that are in it. and then "1. Cannot connect to any of the specified RD Connection Broker servers".
The above issue seems to be caused by the RDMS service not starting. When you attempt to start it, the service stops and the error in the title is logged in the "System" event log. Full transcript below:
Log Name: System
Source: Service Control Manager
Date: 21/01/2015 4:50:32 PM
Event ID: 7024
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: intentionally removed.local
Description:
The Remote Desktop Management service terminated with the following service-specific error: %%2284126209
Event Xml:
<Event xmlns="
<System>
<Provider Name="Service Control Manager" Guid="{555908d1-a6d7-4695-8e1e-26931d2012f4}" EventSourceName="Service Control Manager" />
<EventID Qualifiers="49152">7024</EventID>
<Version>0</Version>
<Level>2</Level>
<Task>0</Task>
<Opcode>0</Opcode>
<Keywords>0x8080000000000000</Keywords>
<TimeCreated SystemTime="2015-01-21T05:50:32.129949400Z" />
<EventRecordID>53721</EventRecordID>
<Correlation />
<Execution ProcessID="568" ThreadID="12436" />
<Channel>System</Channel>
<Computer> intentionally removed.local</Computer>
<Security />
</System>
<EventData>
<Data Name="param1">Remote Desktop Management</Data>
<Data Name="param2">%%2284126209</Data>
<Binary>520044004D0053000000</Binary>
</EventData>
</Event>
In addition in the "Application" event log, the following error is logged:
Log Name: Application
Source: MSSQL$MICROSOFT##WID
Date: 21/01/2015 5:24:47 PM
Event ID: 18456
Task Category: Logon
Level: Information
Keywords: Classic,Audit Failure
User: NETWORK SERVICE
Computer: intentionally removed.local
Description:
Login failed for user 'NT AUTHORITY\NETWORK SERVICE'. Reason: Could not find a login matching the name provided. [CLIENT: <named pipe>]
Event Xml:
<Event xmlns="
<System>
<Provider Name="MSSQL$MICROSOFT##WID" />
<EventID Qualifiers="49152">18456</EventID>
<Level>0</Level>
<Task>4</Task>
<Keywords>0x90000000000000</Keywords>
<TimeCreated SystemTime="2015-01-21T06:24:47.000000000Z" />
<EventRecordID>4228336</EventRecordID>
<Channel>Application</Channel>
<Computer>intentionally removed.local</Computer>
<Security UserID="S-1-5-20" />
</System>
<EventData>
<Data>NT AUTHORITY\NETWORK SERVICE</Data>
<Data> Reason: Could not find a login matching the name provided.</Data>
<Data> [CLIENT: <named pipe>]</Data>
<Binary>184800000E0000001F00000055004E0047004500520045005200410055005300530056005200300033005C004D004900430052004F0053004F0046005400230023005700490044000000070000006D00610073007400650072000000</Binary>
</EventData>
</Event>
I have been attempting to resolve these errors for some time, without success. I have read the many KBs and forum entries related to the above and applied a number of the suggested fixes, including the one which suggests to add the NT SERVICE\ALL SERVICES
to the "Logon as a Service" in the "User Rights Assignment" of the "Default Domain Policy" which is linked to the domain level, that both servers are objects of.
My question to the forum is, can anyone come up with a solution to resolve the above issues and all the RDMS service to start which will then hopefully resolve the broker error?
Regards,
David West.Hi David,
If virtual machines on the server are Windows Server 2012, then it is not supported to install Remote Desktop Connection Broker on a Domain Controller.
More information for you:
Remote Desktop Services role cannot co-exist with AD DS role on Windows Server 2012
http://support.microsoft.com/kb/2799605/de
Guidelines for installing the Remote Desktop Session Host role service on a computer running Windows Server 2012 without the Remote Desktop Connection Broker role service
http://support.microsoft.com/kb/2833839
If the VMs are Windows Server 2012 R2, I suggest you install RDS on a separate machine to see if the issue persists.
Best Regards,
Amy
Please remember to mark the replies as answers if they help and un-mark them if they provide no help. If you have feedback for TechNet Subscriber Support, contact [email protected] -
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 -
EPMA Windows Services not starting
Before you all jump on me, I've read almost all of the threads and documentation concerning this issue that are out there. I've checked the databases and they are configured appropriately, I've checked the IPv6 settings and they are ok. this EPMA installation is on a windows server 2008 r2 platform, Planning and other components are installed in a LINUX environment. I've got everything just about working except for the Dimension Server. The service will not start:
Log Name: Application
Source: Hyperion EPMA DimensionServer
Date: 8/23/2012 11:59:52 AM
Event ID: 0
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: my-server-name
Description:
Service cannot be started. Hyperion.DimensionServer.Interface.Exceptions.EPMAServiceException: Cannot initialize the Session Manager. ---> Hyperion.CommonServices.Exceptions.SessionManagerException: Session Manager could not start because database connectivity could not be established. ---> Oracle.DataAccess.Client.OracleException at Hyperion.DimensionServer.SessionManager.SessionManager.InitializeSqlConnectionString()
--- End of inner exception stack trace ---
at Hyperion.DimensionServer.SessionManager.SessionManager.InitializeSqlConnectionString()
at Hyperion.DimensionServer.SessionManager.SessionManager.Initialize(String configFileName, Boolean restorePastInstanceSessions, Boolean enableCaching)
--- End of inner exception stack trace ---
at Hyperion.DimensionServer.Service.Main.InitializeSessionManager()
at Hyperion.DimensionServer.Service.Main.Start()
at System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Hyperion EPMA DimensionServer" />
<EventID Qualifiers="0">0</EventID>
<Level>2</Level>
<Task>0</Task>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime="2012-08-23T15:59:52.000000000Z" />
<EventRecordID>4404</EventRecordID>
<Channel>Application</Channel>
<Computer>my-server-name</Computer>
<Security />
</System>
<EventData>
<Data>Service cannot be started. Hyperion.DimensionServer.Interface.Exceptions.EPMAServiceException: Cannot initialize the Session Manager. ---> Hyperion.CommonServices.Exceptions.SessionManagerException: Session Manager could not start because database connectivity could not be established. ---> Oracle.DataAccess.Client.OracleException at Hyperion.DimensionServer.SessionManager.SessionManager.InitializeSqlConnectionString()
--- End of inner exception stack trace ---
at Hyperion.DimensionServer.SessionManager.SessionManager.InitializeSqlConnectionString()
at Hyperion.DimensionServer.SessionManager.SessionManager.Initialize(String configFileName, Boolean restorePastInstanceSessions, Boolean enableCaching)
--- End of inner exception stack trace ---
at Hyperion.DimensionServer.Service.Main.InitializeSessionManager()
at Hyperion.DimensionServer.Service.Main.Start()
at System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)</Data>
</EventData>
</Event>
Dimension SErver log:
[2012-08-23T11:58:06.501-04:00] [EPMADIM] [NOTIFICATION:32] [EPMADIM-1] [EPMADIM.Hyperion.NetJNIBridge.Process.Program] [tid: EPMA NetJNIBridge] [ecid: disabled,0] Binding to port: 5255
[2012-08-23T11:58:06.657-04:00] [EPMADIM] [NOTIFICATION:32] [EPMADIM-1] [EPMADIM.Hyperion.DimensionServer.Utility.ChannelUtility] [tid: EPMA NetJNIBridge] [ecid: disabled,0] Detected pure IPv4 environment. Using default binding.
[2012-08-23T11:59:52.176-04:00] [EPMADIM] [NOTIFICATION:32] [EPMADIM-1] [EPMADIM.Hyperion.DimensionServer.Global] [tid: EPMA Server Startup] [ecid: disabled,0] Dimension Server terminated.
[2012-08-23T11:59:52.380-04:00] [EPMADIM] [INTERNAL_ERROR:32] [EPMADIM-1] [EPMADIM.Hyperion.CommonServices.Exceptions.BaseException] [tid: EPMA Server Startup] [ecid: disabled,0] SVR_ERR_PROCESSMGR_CANT_INIT_SESSIONMGR:Cannot initialize the Session Manager. at Hyperion.DimensionServer.Service.Main.InitializeSessionManager()
at Hyperion.DimensionServer.Service.Main.Start()
I don't know if this is relevant but here's a snippet from the shared services security log:
[2012-08-23T11:41:18.958-04:00] [EPMCSS] [TRACE] [] [oracle.EPMCSS.CSS] [tid: 29] [ecid: 0000J_K7LfyComI_mp0FyZ1GD^h3000009,0] Duplicate Entry[[
com.hyperion.css.dal.DALUniqueConstraintException: ORA-00001: unique constraint (EBASEADM.PK_PROV_INFO) violated
at com.hyperion.css.dal.jdbc.oracle.OracleExceptionHandler.handle(OracleExceptionHandler.java:20)
at com.hyperion.css.dal.jdbc.wrapper.CSSPreparedStatement.executeUpdate(CSSPreparedStatement.java:129)
at com.hyperion.css.store.policy.PolicyStoreImpl.addRolesForEntry(PolicyStoreImpl.java:985)
at com.hyperion.css.facade.impl.CSSUserProvisioningAPIImpl.setRolesList(CSSUserProvisioningAPIImpl.java:2352)
at com.hyperion.css.facade.CSSUserProvisioningFacade.setRolesList(CSSUserProvisioningFacade.java:1059)
at com.hyperion.interop.lib.helper.RegistryHelper.reRegisterApplication(RegistryHelper.java:646)
at com.hyperion.interop.lib.helper.RegistrationHelper.register(RegistrationHelper.java:565)
at com.hyperion.interop.lib.CMSClient.register(CMSClient.java:738)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:160)
at org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:243)
at org.mozilla.javascript.optimizer.OptRuntime.callN(OptRuntime.java:86)
at org.mozilla.javascript.gen.c66._c0(D:\Oracle\EPMSystem11R1\common\config\11.1.2.0\resources\repository\product\epmawebtier\58-register-instance-file.js:45)
at org.mozilla.javascript.gen.c66.call(D:\Oracle\EPMSystem11R1\common\config\11.1.2.0\resources\repository\product\epmawebtier\58-register-instance-file.js)
at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:401)
at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3003)
at org.mozilla.javascript.gen.c66.call(D:\Oracle\EPMSystem11R1\common\config\11.1.2.0\resources\repository\product\epmawebtier\58-register-instance-file.js)
at org.mozilla.javascript.gen.c66.exec(D:\Oracle\EPMSystem11R1\common\config\11.1.2.0\resources\repository\product\epmawebtier\58-register-instance-file.js)
at org.mozilla.javascript.Context.evaluateReader(Context.java:1119)
at com.hyperion.hit.tool.deploy.script.ProductDeployScriptRunner.runNextScript(ProductDeployScriptRunner.java:187)
at com.hyperion.cis.config.DeploymentApiAdapter.deploy(DeploymentApiAdapter.java:118)
at com.hyperion.config.wizard.impl.RunAllTasks.executeAppDeploymentTask(RunAllTasks.java:804)
at com.hyperion.config.wizard.impl.RunAllTasks.execute(RunAllTasks.java:498)
at com.hyperion.config.wizard.impl.RunnAllTasksState.run(RunnAllTasksState.java:90)
at java.lang.Thread.run(Thread.java:619)
Any insight as to what I can do here will be appreciated!You should take a look at the *"Database Installation"* part from the Installation Start here guide since if you are using Oracle Database to configure the EPMA components you need to install the Full Oracle Database Client since the PATH variable includes the path to the /bin folder for the Database client.
Following is from the installation start here guide for EPM 11.1.2.2
Install the full Oracle Database client on the following machines before you start your installation of EPM System products:
Performance Management Architect Dimension server.
Note:
1. It is important to install the full database client as part of the installation because the PATH variable is updated to include the path to the /bin folder of the Oracle client.This setting is required for successful configuration.
2. If you are using Oracle Database 10.2.0.4+, you must use a minimum of Oracle Database client 11.1.0.6.0.
3. Performance Management Architect and Financial Management both require that a 64-bit Oracle Database client be installed.
Thanks
HyperEPM -
Hello all,
I am struggling with getting the streaming media service to start. Fresh build of 2012 r2 after moving my existing content over to the appropriate pictures/music/videos folders that were created with the initial install. I installed the
Media Pack. The install went fine, but the Essentials Media Streaming Service will not start. Find the relevant logs below, I cant figure out why it refuses to start. Looking for some troubleshooting ideas.
MEDIASTREAMINGPROVIDER.LOG
[12256] 140205.102101.4268: MediaStreamingProvider: Starting the Media Streaming Provider in service mode
[13156] 140205.102101.4580: MediaStreamingProvider: ServiceShell.OnStart() starting
[13156] 140205.102101.5049: StorageOM: StorageBacked created successfully.
[13156] 140205.102101.5830: PfBinding: Information: [0] : Adding service dns identity [VADER] in proxy endpoint.
[13156] 140205.102101.6612: StorageOM: Set connection identifier to 1
[3832] 140205.102101.7549: StorageOM: Getting storage data from server
[13156] 140205.102104.6299: MediaStreamingManager: IsMediaSharingEnabled called
[13156] 140205.102104.6299: MediaStreamingManager: IsMediaSharingEnabled: CoCreateInstance returned with HResult 0x00000000.
[13156] 140205.102104.6299: MediaStreamingManager: IsMediaSharingEnabled: get_computerHomeMediaSharingAllowedState returned with HResult 0x00000000.
[13156] 140205.102135.1135: MediaStreamingManager: IsMediaSharingEnabled: put_computerHomeMediaSharingAllowedState returned with HResult 0x80070435.
[12256] 140205.102135.1135: MediaStreamingProvider: Exiting the Media Streaming Provider
MEDIASTREAMINGENABLER:
at System.Management.Automation.Runspaces.PipelineBase.Invoke(IEnumerable input)
at System.Management.Automation.PowerShell.Worker.ConstructPipelineAndDoWork(Runspace rs, Boolean performSyncInvoke)
at System.Management.Automation.PowerShell.Worker.CreateRunspaceIfNeededAndDoWork(Runspace rsToUse, Boolean isSync)
at System.Management.Automation.PowerShell.CoreInvokeHelper[TInput,TOutput](PSDataCollection`1 input, PSDataCollection`1 output, PSInvocationSettings settings)
at System.Management.Automation.PowerShell.CoreInvoke[TInput,TOutput](PSDataCollection`1 input, PSDataCollection`1 output, PSInvocationSettings settings)
at System.Management.Automation.PowerShell.CoreInvoke[TOutput](IEnumerable input, PSDataCollection`1 output, PSInvocationSettings settings)
at Microsoft.Windows.ServerEssentials.MediaPack.MediaStreamingEnabler.Program.TryEnableMediaServer()
ThreadId=1
DateTime=2014-02-05T14:36:25.4730262Z
Microsoft.Windows.ServerEssentials.MediaStreamingEnabler.exe Information: 0 : Trying to enable media feature (iteration#1)...
ThreadId=1
DateTime=2014-02-05T14:36:35.4884592Z
Microsoft.Windows.ServerEssentials.MediaStreamingEnabler.exe Information: 0 : PS> Import-Module -Name:WssCmdlets -Cmdlet:Set-WssMediaServerEnabled
ThreadId=1
DateTime=2014-02-05T14:36:35.4884592Z
Microsoft.Windows.ServerEssentials.MediaStreamingEnabler.exe Information: 0 : PS> Set-WssMediaServerEnabled -Enable:True
ThreadId=1
DateTime=2014-02-05T14:36:35.5821944Z
Microsoft.Windows.ServerEssentials.MediaStreamingEnabler.exe Error: 0 : Failed to enable Windows Server Essentials media feature.
System.Management.Automation.CmdletInvocationException: Connecting to the Media Streaming Provider timed out. ---> Microsoft.WindowsServerSolutions.MediaStreaming.MediaStreamingProviderNotAvailableException: Connecting to the Media Streaming Provider timed
out. ---> System.TimeoutException: Timeout occurred waiting for connection to complete. Connection attempt is still in progress.
at Microsoft.WindowsServerSolutions.Common.ProviderFramework.internal.ConnectorInternals.TimeoutWait`1.ThreadWaitHolder.WaitForTimeout(TimeSpan duration, ProviderConnector`1 providerConnector)
at Microsoft.WindowsServerSolutions.Common.ProviderFramework.ProviderConnector`1.WaitForConnection(TimeSpan duration)
at Microsoft.WindowsServerSolutions.MediaStreaming.ProxyManager.get_MediaStreamingProxy()
EVENT LOG
Service cannot be started. System.Runtime.InteropServices.COMException (0x80070435): No attempts to start the service have been made since the last boot. (Exception from HRESULT: 0x80070435)
at Microsoft.WindowsServerSolutions.MediaStreaming.Log.CheckHResultAndThrow(String format, Int32 hr)
at Microsoft.WindowsServerSolutions.MediaStreaming.WmpNssManager.IsMediaSharingEnabled()
at Microsoft.WindowsServerSolutions.MediaStreaming.MediaStreamingProviderCore..ctor(IDlnaServerManager dsm, IServerLibraryManager slm, ISharedFolderManager sfm, IHdmiOutManager hom, IAssessmentManager am, ISqmManager sqm)
at Microsoft.WindowsServerSolutions.MediaStreaming.MediaStreamingProviderCore..ctor()
at Microsoft.WindowsServerSolutions.MediaStreaming.MediaStreamingProviderCore.GetInstance()
at Microsoft.WindowsServerSolutions.MediaStreaming.ServiceShell.OnStart(String[] args)
at System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)
PatrickHi,
Regarding the current issue, please first make sure you have disabled the firewall on the machine. Then please check whether Windows Search service is running correctly. This issue may be caused
by the Windows Search service is not running. Please set the Windows Search service to Automatic, and Essentials Media Streaming Service to "Automatic (Delayed)", and the service will auto-start within 10 minutes, after first boot/reboot, and you'll then see
"Media" option in the Dashboard Settings.
Hope this helps.
Best Regards,
Andy Qi
Andy Qi
TechNet Community Support -
Load Balancing, User Visible Service objects, Runningman
1. Load Balancing
Load Balancing a partition has nothing to do with single or multi-threaded
behaviour of that partition. If you load balance a partition it means that
you can start 1 or more copies of that partition. How many to start can be
specified. If the partition is load balanced there will be router partition
that routes calls to any of the services in that partition.
Now let us look at a special kind of partition (load balanced partition
that has an Env visible SO and a user visible DbSession). This is one of
the design patterns to acccess the database efficiently. Each of these
partitions are single threaded because DbSession is inherently single
threaded. This partition is single threaded because Dbsession is single
threaded and not because the partition is replicated.
Another case is when you make a partition load balanced and it has only
SO(s) made out of tool classes and does not have Dbsessions then each of
these partitions can run multi-threaded beacuse there are no
single-threaded objects to make the partition single threaded
2. User Visibility
Case A - If you have only User visible SO(s) in a partition then each
behaves like a global named object. Whoever accesses it will get a copy of
their own.
Case B - If you have a user visible SO and an Env Visible SO in the same
partition then the user visible SO will be private to the partition and
cannot be accessed from outside that partition.
3. Running Man
When you run an application by clicking on the running man Forte uses its
default partitioning scheme and runs the application. The partition scheme
that you made will be used only when you run the application distributed or
from the partition workshop. This is the time you might encounter errors if
your partitioning is not right.
Hope this helps.
NirmalDon,
You are right. I should have said - Forte uses its own partitioning scheme
not the default scheme you see when you open partition workshop.
Nirmal
From: Don Nelson <[email protected]>
To: Nirmal P Uppalapati <[email protected]>
Cc: [email protected]
Subject: Re: Load Balancing, User Visible Service objects, Running man
Date: Wednesday, October 22, 1997 10:45 PM
Nirmal,
One note on the "running man"...
At 08:12 PM 10/22/97 -0500, Nirmal P Uppalapati wrote:
3. Running Man
When you run an application by clicking on the running man Forte uses
its
default partitioning scheme and runs the application. The partitionscheme
that you made will be used only when you run the application distributedor
from the partition workshop. This is the time you might encounter errorsif
your partitioning is not right.
Actually, clicking on the "running man" from the repository or project
workshop will cause the application to be run VERY differently thanrunning
it distributed.
It's not technically correct to say that the default partitioning schemeis
used with the running man.
Forte consulting offers a deployment workshop that covers the finerpoints
of this and other distributed issues.
Don
============================================
Don Nelson
Regional Consulting Manager - Rocky Mountain Region
Forte Software, Inc.
Denver, CO
Corporate voice mail: 510-986-3810
aka: [email protected]
============================================
"If you ask me, though, any game without push-ups, hits, burns or noogies
is a sissy game." - Calvin -
Single transaction through multiple service objects [Spring]
Hello.
I have multiple service objects, while methods in service objects represent use cases.
If I call the method from the other method in the same service object, then the second (called) method uses the same transaction as the first (caller), because of default propagation REQUIRED is applied.
.. as is shown in the following pseudo code:
@Transactional
public class PersonService {
private PersonDAO personDAO;
public void otherMethod() {
public void savePerson(Person person) {
otherMethod();
personDAO.save(person);
}But I need to call service methods of different service objects, because some use cases use other use cases. I also need all those called methods to be done as a single transaction.
@Transactional
public class OrderService {
private OrderDAO orderDAO;
public void saveOrder(Person person, Order order) {
PersonService personService = CONTEXT.getBean("personService");
personService.savePerson(person);
orderDAO.save(order);
}If I do it like that, the new transaction proxy is created and all personService stuff is executed in the new transaction. How to configure @Transactional annotated objects or Spring beans to do all service stuff in single transaction?
I have Hibernate sessionfactory, DAOs and services beans simply configured in Spring configuration XML, using autowiring and transaction annotation config. I prefer using @transactional annotated service classes, but if I had to use more complex Spring transaction configuration to achieve the goal I won't have any problem with it.
Thank you in advance.I would like it to be done is single transaction but it isn't. As the bean is retrieved from the spring context in OrderService's method
PersonService personService = CONTEXT.getBean("personService");a new transaction for PersonService is started. So then I have two transactions in progress - one for OrderService and second for PersonService. I need the PersonService (or any other service object) to detect already pending transaction and use that. Not create new (it's own). I use no arguments in @Transactional annotation so default propagation REQUIRED should be used, but it still creates a new transaction for PersonService stuff.
I'm posting my applicationContext.xml (simplified slightly)
<beans default-autowire="byType">
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
</bean>
<!-- Hibernate SessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property>
</bean>
<bean id="hibernateTxManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<tx:annotation-driven transaction-manager="hibernateTxManager" />
<!-- DAOs -->
<bean id="personDAO" class="net.package.dao.PersonDAO" />
<bean id="orderDAO" class="net.package.dao.OrderDAO" />
<!-- Services -->
<bean id="personService" class="net.package.service.PersonService" />
<bean id="orderService" class="net.package.service.OrderService" />
</beans>Thank you -
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 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. ” -
Referencing Service Objects after FailOver
I have a service object Manager1SO in partition1, that calls a Start method on
another service object WorkerSO in partition3.
Manager1SO then monitors WorkerSO by registering for the RemoteAccessEvent on
WorkerSO.
When partition2 is brought offline, Manager1SO catches the RemoteAccessEvent on
WorkerSO successfully, and calls the Start method on WorkerSO again.
This seems to work a few times in a single environment, but after a while the
call to the Start method seems to hang.
When I attempt this kind of processing on 2 connected environments using
failover, the Manager1SO in partition1 in the environment on which WorkerSO
failed from cannot reference WorkerSO at all (hangs).
The Manager2SO in partition2 in the environment on which WorkerSO has failed
over to, references it okay i.e. the Start method completes.
If I restart Manager1SO, it then references WorkerSO in its environment rather
than the environment it failed over to.
I know this is very light on information, but any help would be appreciated.
Regards,
Moris Mihailidis
Consulting & Technology Department
CSC
570 St. Kilda Road, Melbourne VIC 3004
Ph: 61-3-95364675 Email: mmihailicsc.com.auI have a service object Manager1SO in partition1, that calls a Start method on
another service object WorkerSO in partition3.
Manager1SO then monitors WorkerSO by registering for the RemoteAccessEvent on
WorkerSO.
When partition2 is brought offline, Manager1SO catches the RemoteAccessEvent on
WorkerSO successfully, and calls the Start method on WorkerSO again.
This seems to work a few times in a single environment, but after a while the
call to the Start method seems to hang.
When I attempt this kind of processing on 2 connected environments using
failover, the Manager1SO in partition1 in the environment on which WorkerSO
failed from cannot reference WorkerSO at all (hangs).
The Manager2SO in partition2 in the environment on which WorkerSO has failed
over to, references it okay i.e. the Start method completes.
If I restart Manager1SO, it then references WorkerSO in its environment rather
than the environment it failed over to.
I know this is very light on information, but any help would be appreciated.
Regards,
Moris Mihailidis
Consulting & Technology Department
CSC
570 St. Kilda Road, Melbourne VIC 3004
Ph: 61-3-95364675 Email: mmihailicsc.com.au -
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 -
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] -
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
Maybe you are looking for
-
CR 2008, missing parameter values in parameter list
somehow this thread got posted in the .NET SDK section, so re-posting here... When my users run the report, the list of values in the paramter list does not include all the possible values that exist in the view on SQL server. How can I get ALL the
-
Hi I have a 8703e and the DELETE ON: Prompt option doesn't work. It show me only "delete/cancel" with out the option to choise from where i want to do that I have only one account email from a Lotus Notes Server 8 Any recommendation? thank you so mu
-
I have up loaded a gallery of viedos and photos to my URL page, which I can bring up on my computer, but cannot be seen on another computer. How do I upload a gallery to my photshop.com web page, which can be seen by people I send the URL?
-
ABAP commands are obsolete.
Hi all, Currently my firm is doing the 4.6C to ECC6 upgrade, there's a few programs having obsolete errors and I'm tasked to correcting the coding of this certain program. Here is the coding and the errors i encounter: report YPU0014 line-size 360
-
HOW TO ADD APPS BACK TO MY FINDER
I deleted my APP icon from the Finder and don't know how to add it back to Finder, I can't access my application