2
// The nordugrid-arc-java package is required. To compile and run this example:
4
// export CLASSPATH=/usr/lib64/java/arc.jar:.
5
// export LD_LIBRARY_PATH=/usr/lib64/java
6
// javac DTRGenerator.java
7
// java DTRGenerator /bin/ls /tmp/dtrtest
9
// The PATHs above may vary depending on ARC install location and system
12
import nordugrid.arc.*; // For the sake of brevity in this example import everything from arc
14
// Implementation of DTR Generator.
15
// Cannot inherit from DTRCallback as it is a pure virtual class and swig does not
16
// create a default constructor, so extend Scheduler which inherits from DTRCallback.
17
class DTRGenerator extends Scheduler {
18
private Logger logger;
19
private LogDestination logdest;
20
private SimpleCondition cond;
22
// Create a new Generator and set up logging to stdout
23
public DTRGenerator() {
24
logger = new Logger(Logger.getRootLogger(), "Generator");
25
logdest = new LogStream_ostream(arc.getStdout());
26
Logger.getRootLogger().addDestination(logdest);
27
Logger.getRootLogger().setThreshold(LogLevel.DEBUG);
28
cond = new SimpleCondition();
31
// Implementation of callback from DTRCallback
32
public void receiveDTR(DTRPointer dtr) {
33
// root logger is disabled in Scheduler thread so need to add it here
34
Logger.getRootLogger().addDestination(logdest);
35
logger.msg(LogLevel.INFO, "Received DTR " + dtr.get_id() + " in state " + dtr.get_status().str());
36
Logger.getRootLogger().removeDestinations();
40
// Run the transfer and wait for the callback on completion
41
private void run(final String source, final String dest) {
42
// Set log level for DTR (must be done before starting Scheduler)
43
DTR.setLOG_LEVEL(LogLevel.DEBUG);
45
// Start Scheduler thread
46
Scheduler scheduler = new Scheduler();
49
// UserConfig contains information such as the location of credentials
50
UserConfig cfg = new UserConfig();
52
// The ID can be used to group DTRs together
56
DTRLogger dtrlog = arc.createDTRLogger(Logger.getRootLogger(), "DTR");
57
dtrlog.addDestination(logdest);
59
// Use current user's uid for the transfer
60
User user = new User();
62
DTRPointer dtr = arc.createDTRPtr(source, dest, cfg, id, user.get_uid(), dtrlog);
63
logger.msg(LogLevel.INFO, "Created DTR "+ dtr.get_id());
65
// Register this callback in order to receive completed DTRs
66
dtr.registerCallback(this, StagingProcesses.GENERATOR);
67
// This line must be here in order to pass the DTR to the Scheduler
68
dtr.registerCallback(scheduler, StagingProcesses.SCHEDULER);
70
// Push the DTR to the Scheduler
71
DTR.push(dtr, StagingProcesses.SCHEDULER);
73
// Wait until callback is called
74
// Note: SimpleCondition.wait() is renamed to _wait() as wait() is a java.lang.Object method
77
// DTR is finished, so stop Scheduler
81
public static void main(String[] args) {
82
if (args.length != 2) {
83
System.out.println("Usage: java DTRGenerator source destination");
86
DTRGenerator gen = new DTRGenerator();
87
gen.run(args[0], args[1]);