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
124
125
126
127
128
129
130
131
132
|
// **********************************************************************
//
// Copyright (c) 2001
// ZeroC, Inc.
// Huntsville, AL, USA
//
// All Rights Reserved
//
// **********************************************************************
#include <Ice/Ice.h>
#include <IcePack/ServerDeployerI.h>
#include <IcePack/ServerFactory.h>
#include <IcePack/ServerBuilder.h>
#include <IcePack/TraceLevels.h>
using namespace std;
using namespace IcePack;
IcePack::ServerDeployerI::ServerDeployerI(const NodeInfoPtr& nodeInfo) :
_nodeInfo(nodeInfo)
{
}
IcePack::ServerDeployerI::~ServerDeployerI()
{
}
void
IcePack::ServerDeployerI::add(const string& name, const string& descriptor, const string& binPath,
const string& libPath, const Targets& targets, const Ice::Current&)
{
//
// Setup required variables.
//
map<string, string> variables;
variables["parent"] = _nodeInfo->getNode()->getName();
variables["name"] = name;
variables["fqn"] = _nodeInfo->getNode()->getName() + "." + name;
variables["binpath"] = binPath;
variables["libpath"] = libPath;
string dataDir = _nodeInfo->getCommunicator()->getProperties()->getProperty("IcePack.Node.Data");
variables["datadir"] = dataDir + (dataDir[dataDir.length() - 1] == '/' ? "" : "/") + "servers/" + name;
ServerBuilder builder(_nodeInfo, variables, targets);
//
// Parse the server deployment descriptors.
//
builder.parse(descriptor);
//
// Execute the builder tasks.
//
builder.execute();
}
void
IcePack::ServerDeployerI::remove(const string& name, const Ice::Current&)
{
ServerRegistryPrx registry = _nodeInfo->getServerRegistry();
//
// Component path is used to identify the component. For example:
// node1.server1.service3
//
string componentPath = _nodeInfo->getNode()->getName() + "." + name;
ServerPrx server;
try
{
server = registry->findByName(name);
}
catch(const ServerNotExistException&)
{
ServerDeploymentException ex;
ex.server = name;
ex.reason = "server doesn't exist";
ex.component = componentPath;
throw ex;
}
ServerDescription desc;
try
{
desc = server->getServerDescription();
}
catch(const Ice::ObjectNotExistException&)
{
ServerDeploymentException ex;
ex.server = name;
ex.reason = "server doesn't exist";
ex.component = componentPath;
throw ex;
}
//
// Ensure the server is from this node.
//
if(desc.node != _nodeInfo->getNode()->getName())
{
ServerDeploymentException ex;
ex.server = name;
ex.reason = "server is not managed by this node";
ex.component = componentPath;
throw ex;
}
map<string, string> variables;
variables["parent"] = _nodeInfo->getNode()->getName();
variables["name"] = name;
variables["fqn"] = _nodeInfo->getNode()->getName() + "." + name;
variables["binpath"] = desc.path;
variables["libpath"] = "";
string dataDir = _nodeInfo->getCommunicator()->getProperties()->getProperty("IcePack.Node.Data");
variables["datadir"] = dataDir + (dataDir[dataDir.length() - 1] == '/' ? "" : "/") + "servers/" + name;
ServerBuilder builder(_nodeInfo, variables, desc.theTargets);
//
// Parse the server deployment descriptors.
//
builder.parse(desc.descriptor);
//
// Execute the builder tasks.
//
builder.undo();
}
|