/[xulu]/branches/1.8-gt2-2.6/src/appl/parallel/data/XuluClientLoader.java
ViewVC logotype

Contents of /branches/1.8-gt2-2.6/src/appl/parallel/data/XuluClientLoader.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 60 - (show annotations)
Sun Oct 4 16:54:52 2009 UTC (15 years, 2 months ago) by alfonx
File size: 5867 byte(s)
* organized imports
1 package appl.parallel.data;
2
3 import java.awt.Rectangle;
4 import java.io.IOException;
5 import java.io.Serializable;
6 import java.net.InetAddress;
7 import java.net.UnknownHostException;
8 import java.rmi.Naming;
9
10 import org.apache.log4j.LogManager;
11 import org.apache.log4j.Logger;
12
13 import appl.data.LoadingException;
14 import appl.parallel.client.ClientDataServer;
15 import appl.parallel.client.DataServer;
16 import appl.parallel.spmd.split.DataPartition;
17
18 /**
19 * Loads partitioned data from a {@link ClientDataServer}. And unloads the data
20 *
21 * @author Dominik Appl
22 */
23 public class XuluClientLoader extends AbstractDataHandler implements
24 PartitionDataHandler {
25
26 protected InetAddress address;
27
28 protected String namingString;
29
30 private String unloadTarget = null;
31
32 /**
33 * constructs a new {@link XuluClientLoader}. The local IP adress at the
34 * time of construction is later used on serverside for communication (e.g.
35 * unloading).
36 *
37 * @param rootID
38 * the id of the data
39 * @param partitionBounds
40 * the bounds of the partition to be retrieved on server side
41 * @param unloadBounds
42 * the bounds of the partition which is to be uploaded to the
43 * client after calculation
44 */
45 public XuluClientLoader(int rootID, ClientDataServer client,
46 Rectangle partitionBounds, Rectangle unloadBounds) {
47 super(rootID, client, partitionBounds, unloadBounds);
48 address = null;
49 namingString = null;
50 try {
51 this.address = InetAddress.getLocalHost();
52 unloadTarget = address.getHostAddress();
53 namingString = "rmi://" + unloadTarget + "/DataServer";
54 } catch (UnknownHostException e) {
55 LOG.error("The client IP could not be determined!!", e);
56 e.printStackTrace();
57 }
58 }
59
60 /**
61 * constructs a new {@link XuluClientLoader}. The unloading is done to the
62 * {@link DataServer} at the machine given with the parameter unloadTarget
63 * (IP/Adress or Hostname).
64 *
65 * @param rootID
66 * the id of the data
67 * @param partitionBounds
68 * the bounds of the partition to be retrieved on server side
69 * @param unloadBounds
70 * the bounds of the partition which is to be uploaded to the
71 * client after calculation
72 */
73 public XuluClientLoader(int rootID, ClientDataServer client,
74 Rectangle partitionBounds, Rectangle unloadBounds,
75 String unloadTarget) {
76 spmdClient = client;
77 this.unloadTarget = unloadTarget;
78 address = null;
79 namingString = null;
80 try {
81 this.address = InetAddress.getLocalHost();
82 namingString = "rmi://" + unloadTarget + "/DataServer";
83 } catch (UnknownHostException e) {
84 LOG.error("The client IP could not be determined!!", e);
85 e.printStackTrace();
86 }
87 this.rootID = rootID;
88 this.partitionBounds = partitionBounds;
89 this.unloadBounds = unloadBounds;
90 }
91
92 public XuluClientLoader newInstance(int rootID, ClientDataServer client,
93 Rectangle partitionBounds, Rectangle unloadBounds) {
94 return new XuluClientLoader(rootID, client, partitionBounds,
95 unloadBounds);
96 }
97
98 /**
99 * Used for deserialization. Do not use for other purposes
100 */
101 public XuluClientLoader() {
102 super();
103 }
104
105 /*
106 * (non-Javadoc)
107 *
108 * @see appl.data.DataLoader#getLoadInfo()
109 */
110 public String getLoadInfo() {
111 return "XuluClientLoader tries to load data with rootID " + rootID
112 + " from IP: " + address.getHostAddress() + " with naming: "
113 + namingString;
114 }
115
116 /*
117 * (non-Javadoc)
118 *
119 * @see appl.data.DataLoader#getLoadInfo()
120 */
121 public String getUnloadInfo() {
122 return "XuluClientLoader tries to unload data with rootID " + rootID
123 + " to IP: " + address.getHostAddress() + " with naming: "
124 + namingString;
125 }
126
127 /*
128 * (non-Javadoc)
129 *
130 * @see appl.data.DataLoader#load()
131 */
132 public DataPartition load() throws LoadingException {
133 try {
134 LOG.debug(getLoadInfo());
135 DataServer client = (DataServer) Naming.lookup(namingString);
136 data = client.getPartition(rootID, partitionBounds);
137 LOG.debug("Partition with id " + rootID
138 + " successfully retrieved from client");
139 return data;
140 } catch (Exception e) {
141 LOG.error("Partition retrieval failed: " + e.getMessage());
142 }
143 return null;
144 }
145
146 /**
147 * Initializes the {@link Logger} after deserialization (used by
148 * {@link java.io.Serializable}
149 *
150 * @author Dominik Appl
151 * @param s
152 * @throws IOException
153 * @see Serializable
154 */
155 private synchronized void readObject(java.io.ObjectInputStream s)
156 throws IOException, ClassNotFoundException {
157 // reading standard fields
158 s.defaultReadObject();
159 // initialize Logger
160 LOG = LogManager.getLogger(this.getClass().getName());
161 }
162
163 /*
164 * (non-Javadoc)
165 *
166 * @see appl.data.DataUnloader#unload()
167 */
168 public void unload() {
169 try {
170 if (LOG.isDebugEnabled())
171 LOG.debug(getUnloadInfo());
172 if (data == null) {
173 if (LOG.isDebugEnabled())
174 LOG.debug("No data loaded -> nothing to unload");
175 return;
176 }
177 // construct return grid only if necessary
178 DataPartition returnPartition = null;
179 if (unloadBounds.equals(data.getPartitionBounds()))
180 returnPartition = data;
181 else
182 returnPartition = data.getPartition(unloadBounds);
183 // if there is a local spmdClient try to use it
184 if (spmdClient != null)
185 spmdClient.updatePartition(rootID, returnPartition,
186 unloadBounds);
187 // else connect remotely to client
188 else {
189 DataServer client = (DataServer) Naming.lookup(namingString);
190 client.updatePartition(rootID, returnPartition, unloadBounds);
191 }
192
193 LOG.debug("Partition with id " + rootID
194 + " was transfered back to client!");
195 } catch (Exception e) {
196 LOG.error("Backtransfer of data to client failed!", e);
197 }
198 }
199
200 }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26