summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp')
-rw-r--r--cpp/demo/IcePack/simple/app.xml42
-rw-r--r--cpp/src/IceGrid/ServerI.cpp33
2 files changed, 46 insertions, 29 deletions
diff --git a/cpp/demo/IcePack/simple/app.xml b/cpp/demo/IcePack/simple/app.xml
index 0beefda81b8..78ab68dc7cd 100644
--- a/cpp/demo/IcePack/simple/app.xml
+++ b/cpp/demo/IcePack/simple/app.xml
@@ -13,13 +13,30 @@
<application name="Simple">
+ <variable name="icepatch.directory" value=""/>
+ <variable name="icepatch.proxy" value="IcePatch2/server:tcp -p 13000"/>
+
+ <patch id="patch1" proxy="${icepatch.proxy}" destination="${icepatch.directory}">
+ <directory>simple</directory>
+ <directory>hello/db</directory>
+ </patch>
+
+ <patch id="patch2" proxy="${icepatch.proxy}" destination="/home/benoit/icepatch_data/destination">
+ <directory>simple</directory>
+ <directory>hello</directory>
+ </patch>
+
+ <replicated-adapter id="ReplicatedHelloAdapter">
+ <object identity="hello" type="::Demo::Hello"/>
+ </replicated-adapter>
+
<server-template id="ServerTemplate">
<parameter name="name"/>
- <server id="${name}" exe="./server">
- <adapter name="Hello" endpoints="tcp" register="true">
- <object identity="${server}-hello1" type="::Demo::Hello"/>
- </adapter>
- <property name="Identity" value="${server}-hello1"/>
+ <server id="${name}" exe="./simple/server" activation="on-demand">
+ <use-patch id="patch1"/>
+ <use-patch id="patch2"/>
+ <adapter name="Hello" endpoints="tcp" register="true" id="ReplicatedHelloAdapter"/>
+ <property name="Identity" value="hello"/>
</server>
</server-template>
@@ -37,6 +54,10 @@
<server-template id="IceBoxTemplate">
<parameter name="name"/>
<icebox id="${name}" exe="icebox" interpreter="icebox" endpoints="default">
+ <env>LD_LIBRARY_PATH=$${LD_LIBRARY_PATH}:./simple</env>
+ <env>PATH=./simple:$PATH:$TOTO</env>
+ <env>TEST=$LKLK:$USER</env>
+ <use-patch id="patch1"/>
<service-instance template="HelloService" name="Hello"/>
<service name="HelloService2" entry="HelloService:create">
<adapter name="Hello" endpoints="tcp">
@@ -50,15 +71,12 @@
<node name="node">
- <server-instance template="IceBoxTemplate" name="IceBox"/>
- <server-instance template="ServerTemplate" name="Server"/>
+ <server-instance template="ServerTemplate" name="Server1"/>
<server-instance template="ServerTemplate" name="Server2"/>
+ <server-instance template="ServerTemplate" name="Server3"/>
+ <server-instance template="ServerTemplate" name="Server4"/>
- <server id="node-1" exe="icegridnode">
- <adapter name="IceGrid.Node" endpoints="default"/>
- <property name="IceGrid.Node.Name" value="${server}"/>
- <property name="IceGrid.Node.Data" value="db/${server}"/>
- </server>
+ <server-instance template="IceBoxTemplate" name="IceBox1"/>
</node>
diff --git a/cpp/src/IceGrid/ServerI.cpp b/cpp/src/IceGrid/ServerI.cpp
index 575212c5a91..ff57da37a09 100644
--- a/cpp/src/IceGrid/ServerI.cpp
+++ b/cpp/src/IceGrid/ServerI.cpp
@@ -79,24 +79,23 @@ struct EnvironmentEval : std::unary_function<string, string>
string v = value.substr(assignment + 1);
assert(v.size());
string::size_type beg = 0;
+ string::size_type end;
#ifdef _WIN32
-// char buf[32767];
-// while((beg = v.find("%", beg)) != string::npos && beg < v.size() - 1)
-// {
-// end = v.find("%");
-// if(end == string::npos)
-// {
-// return v;
-// }
-// string variable = v.substr(beg + 2, end - beg - 2);
-// int ret = GetEnvironmentVariable(variable.c_str(), buf, sizeof(buf));
-// string valstr = ret > 0 ? string(buf) : "";
-// v.replace(beg, end - beg + 1, valstr);
-// beg += strlen(value);
-// }
- return value;
+ char buf[32767];
+ while((beg = v.find("%", beg)) != string::npos && beg < v.size() - 1)
+ {
+ end = v.find("%", beg + 1);
+ if(end == string::npos)
+ {
+ break;
+ }
+ string variable = v.substr(beg + 1, end - beg - 1);
+ int ret = GetEnvironmentVariable(variable.c_str(), buf, sizeof(buf));
+ string valstr = (ret > 0 && ret < sizeof(buf)) ? string(buf) : "";
+ v.replace(beg, end - beg + 1, valstr);
+ beg += valstr.size();
+ }
#else
- string::size_type end;
while((beg = v.find("$", beg)) != string::npos && beg < v.size() - 1)
{
string variable;
@@ -105,7 +104,7 @@ struct EnvironmentEval : std::unary_function<string, string>
end = v.find("}");
if(end == string::npos)
{
- return v;
+ break;
}
variable = v.substr(beg + 2, end - beg - 2);
}