Revision 10376
Added by Jing Tao over 7 years ago
src/edu/ucsb/nceas/metacat/dataone/CNodeService.java | ||
---|---|---|
44 | 44 |
import org.dataone.client.v2.CNode; |
45 | 45 |
import org.dataone.client.v2.MNode; |
46 | 46 |
import org.dataone.client.v2.itk.D1Client; |
47 |
import org.dataone.cn.index.messaging.IndexTaskMessagingClient; |
|
48 |
import org.dataone.cn.index.messaging.IndexTaskMessagingClientFactory; |
|
49 |
import org.dataone.cn.index.task.IndexTask; |
|
50 |
import org.dataone.cn.index.task.IndexTaskGenerator; |
|
47 | 51 |
import org.dataone.exceptions.MarshallingException; |
48 | 52 |
import org.dataone.service.cn.v2.CNAuthorization; |
49 | 53 |
import org.dataone.service.cn.v2.CNCore; |
... | ... | |
87 | 91 |
import org.dataone.service.types.v2.SystemMetadata; |
88 | 92 |
import org.dataone.service.util.TypeMarshaller; |
89 | 93 |
|
90 |
|
|
91 | 94 |
import edu.ucsb.nceas.metacat.DBUtil; |
92 | 95 |
import edu.ucsb.nceas.metacat.EventLog; |
93 | 96 |
import edu.ucsb.nceas.metacat.IdentifierManager; |
... | ... | |
110 | 113 |
private Logger logMetacat = null; |
111 | 114 |
public final static String V2V1MISSMATCH = "The Coordinating Node is not authorized to make systemMetadata changes on this object. Please make changes directly on the authoritative Member Node."; |
112 | 115 |
|
116 |
private IndexTaskMessagingClient indexTaskClient = null; |
|
113 | 117 |
/** |
114 | 118 |
* singleton accessor |
115 | 119 |
*/ |
... | ... | |
123 | 127 |
private CNodeService(HttpServletRequest request) { |
124 | 128 |
super(request); |
125 | 129 |
logMetacat = Logger.getLogger(CNodeService.class); |
126 |
|
|
130 |
try { |
|
131 |
getIndexTaskClient(); |
|
132 |
} catch (Exception e) { |
|
133 |
logMetacat.warn("CNodeService.constructorr - the client for sumbitting the index tasks couldn't be initialized since "+e.getMessage(), e); |
|
134 |
} |
|
127 | 135 |
} |
136 |
|
|
137 |
/* |
|
138 |
* Method to get the index tasks client. |
|
139 |
*/ |
|
140 |
private void getIndexTaskClient() throws InstantiationException, IllegalAccessException, ClassNotFoundException { |
|
141 |
if(indexTaskClient == null) { |
|
142 |
indexTaskClient = IndexTaskMessagingClientFactory.getClient(); |
|
143 |
} |
|
144 |
} |
|
145 |
|
|
146 |
/* |
|
147 |
* Submit a index task to the message broker. |
|
148 |
*/ |
|
149 |
private void submitIndexTask(SystemMetadata sysmeta, String objectURI) throws ServiceFailure, InvalidSystemMetadata, InstantiationException, IllegalAccessException, ClassNotFoundException { |
|
150 |
if(indexTaskClient == null) { |
|
151 |
getIndexTaskClient(); |
|
152 |
} |
|
153 |
IndexTaskGenerator generator = new IndexTaskGenerator(); |
|
154 |
IndexTask task = generator.generateAddTask(sysmeta, objectURI); |
|
155 |
indexTaskClient.submit(task); |
|
156 |
|
|
157 |
} |
|
128 | 158 |
|
129 | 159 |
/** |
130 | 160 |
* Set the replication policy for an object given the object identifier |
... | ... | |
1869 | 1899 |
|
1870 | 1900 |
} |
1871 | 1901 |
pid = super.create(session, pid, object, sysmeta); |
1872 |
|
|
1902 |
// submit the index task to the message broker. |
|
1903 |
try { |
|
1904 |
String localId = IdentifierManager.getInstance().getLocalId(pid.getValue()); |
|
1905 |
String objectURI = IdentifierManager.getInstance().getObjectFilePath(localId, isScienceMetadata(sysmeta)); |
|
1906 |
submitIndexTask(sysmeta, objectURI); |
|
1907 |
logMetacat.info("CNodeService.create - Metacat successfully submitted the index task for the object "+sysmeta.getIdentifier().getValue()+" to the message broker. But it is NOT guarranteed that the broker can get it."); |
|
1908 |
} catch (Exception e) { |
|
1909 |
logMetacat.warn("CNodeService.create - the index task for the object "+sysmeta.getIdentifier().getValue()+" failed to be submitted to the message broker since "+e.getMessage(), e); |
|
1910 |
} |
|
1911 |
|
|
1873 | 1912 |
} else { |
1874 | 1913 |
String msg = "The subject listed as " + session.getSubject().getValue() + |
1875 | 1914 |
" isn't allowed to call create() on a Coordinating Node for pid "+pid.getValue(); |
Also available in: Unified diff
Add the client code to submit the index task to the message broker. Now I only added the code for the create method.