/[xulu]/trunk/src/appl/parallel/data/XuluClientLoader.java
ViewVC logotype

Annotation of /trunk/src/appl/parallel/data/XuluClientLoader.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 78 - (hide annotations)
Wed Feb 10 16:43:46 2010 UTC (14 years, 10 months ago) by alfonx
File size: 5867 byte(s)
Merged branch 1.8-gt2-2.6 to trunk. Now the trunk is based on GeoTools 2.6.1 and schmitzm-2.0.x
1 mojays 2 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