1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 package org.ogf.graap.wsag.samples;
36
37 import java.text.MessageFormat;
38
39 import org.apache.log4j.Logger;
40 import org.apache.xmlbeans.XmlObject;
41 import org.ggf.schemas.jsdl.x2005.x11.jsdl.ExactType;
42 import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDefinitionDocument;
43 import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDefinitionType;
44 import org.ogf.graap.wsag.server.monitoring.IMonitoringContext;
45 import org.ogf.graap.wsag.server.monitoring.IServiceTermMonitoringHandler;
46 import org.ogf.schemas.graap.wsAgreement.ServiceTermStateDefinition;
47 import org.ogf.schemas.graap.wsAgreement.ServiceTermStateType;
48 import org.w3c.dom.Node;
49
50
51
52
53
54
55
56 public class SampleServiceTermMonitor implements IServiceTermMonitoringHandler
57 {
58
59 private static final Logger LOG = Logger.getLogger( SampleServiceTermMonitor.class );
60
61
62
63
64 public void monitor( IMonitoringContext context ) throws Exception
65 {
66
67 try
68 {
69
70 ServiceTermStateType sampleServiceTerm = context.getServiceTermStateByName( "SAMPLE1_SDT" );
71
72 JobDefinitionType sampleJob = loadJobDefinition( sampleServiceTerm );
73 sampleJob.getJobDescription().addNewResources().addNewCandidateHosts().addHostName( "target_host" );
74 ExactType[] exactCPUs = new ExactType[0];
75 exactCPUs[0].setDoubleValue( 2.0 );
76 sampleJob.getJobDescription().getResources().addNewIndividualCPUCount().setExactArray( exactCPUs );
77
78 sampleServiceTerm.setState( ServiceTermStateDefinition.COMPLETED );
79
80 }
81 catch ( Exception e )
82 {
83 String message =
84 MessageFormat.format( "Failed to update service term state. Reason: {0}",
85 new Object[] { e.getMessage() } );
86 LOG.error( message );
87 throw new Exception( message, e );
88 }
89 }
90
91 private synchronized JobDefinitionType loadJobDefinition( ServiceTermStateType state )
92 {
93
94 XmlObject[] jobDefinition =
95 state.selectChildren( JobDefinitionDocument.type.getDocumentElementName() );
96
97 if ( jobDefinition.length == 0 )
98 {
99 LOG.trace( "Initialize job definition in service term state." );
100
101 JobDefinitionDocument jobdef = JobDefinitionDocument.Factory.newInstance();
102 jobdef.addNewJobDefinition().addNewJobDescription();
103
104 Node imported =
105 state.getDomNode().getOwnerDocument().importNode( jobdef.getJobDefinition().getDomNode(),
106 true );
107 state.getDomNode().appendChild( imported );
108
109 jobDefinition = state.selectChildren( JobDefinitionDocument.type.getDocumentElementName() );
110 }
111
112 if ( jobDefinition.length > 1 )
113 {
114 String msgDebug =
115 "Multiple job definitions founds in service term state. "
116 + "Keeping the first, removing the others.";
117 LOG.debug( msgDebug );
118
119 for ( int i = 1; i < jobDefinition.length; i++ )
120 {
121 state.getDomNode().removeChild( jobDefinition[i].getDomNode() );
122 }
123
124 jobDefinition = state.selectChildren( JobDefinitionDocument.type.getDocumentElementName() );
125 }
126
127 JobDefinitionType result = (JobDefinitionType) jobDefinition[0];
128
129 return result;
130 }
131
132 }