This function has two areas of application;
- Closes a repository within a locally connected database. This feature has implemented to provide all EDMInterface functionality through the remote EDMInterface calls. Only applicaple for the LOCAL_CONTEXT communication type. See example 1.
- Closes a repository within one or optionally all the EDMapplicationServer processes used by the EDMserver. This is a password protected feature ment for system administrators only. See example 2.
An EDMapplicationServer is a process that implements the remote EDMInterface operations invoked by the EDMclients. An EDMserver may have from one to any number of EDMapplicationServer processes. In most cases the EDMdatabaseServer and the EDMapplicationServers constitute the EDMserver. This is denoted an EDMserverRoom.
Except for the communication type LOCAL_CONTEXT, all remote EDMInterface operations are stateless.
Related functions: edmiRemoteOpenRepository, edmiRemoteOpenModel, edmiRemoteCloseModel.
Header:
#include "sdai.h"
Prototype:
EdmiError edmiRemoteCloseRepository(SdaiServerContext serverContextId,
SdaiString remoteRepositoryName,
SdaiString superUserPassword,
SdaiClientId clientId,
SdaiOptions options,
SdaiInvocationId *edmiInvocationId);
Arguments:
serverContextId |
Context identification, from edmiDefineServerContext |
remoteRepositoryName |
The name of the repository to close in the remote EDMdatabase. Repository names are case sensitive. |
superUserPassword |
The password for the superuser within the remote database. This argument is not required when the server context specifies communication type LOCAL_CONTEXT. |
clientId |
The client Id of the Main Client connection of the EDMapplicationServer for which the repository shall be closed. |
options |
See description of available options below. |
edmiInvocationId |
Currently not used. |
Options: Descriptions:
ALL_SERVERS |
Close the repository from all the EDMapplicationServer processes in the EDMserverRoom. |
Returns:
A completion code of datatype EdmiError is the returned function value. The completion code has the following values:
Completion code = 0 : Operation successfully performed.
Completion code != 0: Error in operation. Completion code is an _EDMinterface_ error code. Use edmiGetErrorText to get the error text corresponding to the error code.
Example:
EdmiError rstat;
SdaiSession sessionId;
SdaiServerContext myLocalContext;
SdaiRepository repId;
SdaiModel modId;
SdaiAggr aggrId;
SdaiInteger nInst;
SdaiString unavailMsg;
/* Define Remote Server Context */
rstat = edmiDefineServerContext("MyLocalContext",
NULL, NULL, NULL, "LOCAL_CONTEXT", NULL, NULL,
NULL, NULL, NULL, NULL, NULL, &myLocalContext);
/* Connect to a local database. This operation will
connect the EDMthick client to the EDMserver. It
will fail if the server has no more available
named users. After the connect, the client may
be identified on the server by edmiRemoteWhoIsOn() */
rstat = edmiRemoteConnect(myLocalContext, "Johnny",
"Supervisor", "cf37ftr", &unavailMsg, NULL);
/* Open a session in the local database */
rstat = edmiRemoteOpenSession(myLocalContext, &sessionId, NULL);
/* Open the 'MyRepository' repository */
rstat = edmiRemoteOpenRepository(myLocalContext,
"MyRepository", sdaiRW, NULL, 0, 0, &repId, NULL);
/* Open the 'MyModel' model. This loads a
copy of the model to the local file system. */
rstat = edmiRemoteOpenModel(myLocalContext, "MyRepository",
"MyModel", sdaiRW, NULL, 0, 0, &modId, NULL);
. . .
/* The local copy of 'MyModel' is loaded when
the model is opened. It remains unchanged
until a transaction is started. Then the local
copy will be syncronized with the EDMserver to
include any changes made by other users in the
meantime */
rstat = edmiStartTransaction();
/* Count the current number of instances
of type MyEntity in MyModel */
rstat = edmiRemoteGetEntityExtentBN(myLocalContext,
"MyRepository", "MyModel", "MyEntity", 0,
&aggrId, &nInst, NULL, NULL);
printf("\n%d instances of MyEntity in MyModel.", nInst);
/* Terminate the transaction */
rstat = edmiAbortTransaction();
/* Close the model. Some operations may not be
performed on the model by other users for
as long as it is opened by this client. */
rstat = edmiRemoteCloseModel(myLocalContext,
"MyRepository", "MyModel", NULL, 0, 0, NULL);
. . .
/* Close the repository. This would implicitely have
closed the model as well. Some operations may not be
performed on the repository by other users for
as long as it is opened by this client. */
rstat = edmiRemoteCloseRepository(myLocalContext,
"MyRepository", NULL, 0, 0, NULL);
. . .
/* Close the session. This will implicitely
close all open models and repositories. */
rstat = edmiRemoteCloseSession(myLocalContext, NULL);
/* Disconnect. The occupied named user on the
EDMserver will be released. */
rstat = edmiRemoteDisconnect(myLocalContext, NULL);
. . .