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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26