blob: c6f4feac08c45c73ca8aee70e4065ff52e23d180 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
// **********************************************************************
//
// Copyright (c) 2003-2012 ZeroC, Inc. All rights reserved.
//
// This copy of Ice is licensed to you under the terms described in the
// ICE_LICENSE file included in this distribution.
//
// **********************************************************************
#include <Glacier2/PermissionsVerifier.h>
#include <IceGrid/WellKnownObjectsManager.h>
#include <IceGrid/Database.h>
using namespace std;
using namespace IceGrid;
WellKnownObjectsManager::WellKnownObjectsManager(const DatabasePtr& database) :
_database(database),
_initialized(false)
{
}
void
WellKnownObjectsManager::add(const Ice::ObjectPrx& proxy, const string& type)
{
assert(!_initialized);
ObjectInfo info;
info.type = type;
info.proxy = proxy;
_wellKnownObjects.push_back(info);
}
void
WellKnownObjectsManager::addEndpoint(const string& name, const Ice::ObjectPrx& proxy)
{
_endpoints.insert(make_pair(name, proxy));
}
void
WellKnownObjectsManager::finish()
{
Lock sync(*this);
_initialized = true;
}
void
WellKnownObjectsManager::registerAll(const ReplicaSessionPrx& session)
{
if(!initialized())
{
return;
}
assert(session);
//
// If initialized, the endpoints and well known objects are immutable.
//
session->setEndpoints(_endpoints);
session->registerWellKnownObjects(_wellKnownObjects);
}
void
WellKnownObjectsManager::registerAll()
{
if(!initialized())
{
return;
}
//
// If initialized, the endpoints and well known objects are immutable.
//
updateReplicatedWellKnownObjects();
_database->addOrUpdateObjectsInDatabase(_wellKnownObjects);
}
void
WellKnownObjectsManager::updateReplicatedWellKnownObjects()
{
if(!initialized())
{
return;
}
//
// Update replicated objects.
//
Ice::Identity id;
id.category = _database->getInstanceName();
ObjectInfo info;
ObjectInfoSeq objects;
Lock sync(*this);
Ice::ObjectPrx replicatedClientProxy = _database->getReplicaCache().getEndpoints("Client", _endpoints["Client"]);
id.name = "Query";
info.type = Query::ice_staticId();
info.proxy = replicatedClientProxy->ice_identity(id);
objects.push_back(info);
id.name = "Locator";
info.type = Ice::Locator::ice_staticId();
info.proxy = replicatedClientProxy->ice_identity(id);
objects.push_back(info);
_database->addOrUpdateObjectsInDatabase(objects);
}
bool
WellKnownObjectsManager::initialized() const
{
Lock sync(*this);
return _initialized;
}
Ice::ObjectPrx
WellKnownObjectsManager::getEndpoints(const string& name)
{
Lock sync(*this);
return _endpoints[name];
}
|