package org.geotools.gml3;
import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import org.eclipse.xsd.XSDSchema;
import org.geotools.xml.Schemas;
import org.junit.Test;
public class SchemasTest {
@Test
public void testConcurrentParse() throws Exception {
URL location = SchemasTest.class.getResource("states.xsd");
final File schemaFile = new File(location.toURI());
final List locators = Arrays.asList( GML.getInstance().createSchemaLocator() );
ExecutorService es = Executors.newFixedThreadPool(32);
List<Future<Void>> results = new ArrayList<Future<Void>>();
for(int i = 0; i < 128; i++) {
Future<Void> future = es.submit(new Callable<Void>() {
public Void call() throws Exception {
XSDSchema schema = Schemas.parse( schemaFile.getAbsolutePath(), locators, null );
Schemas.dispose(schema);
return null;
}
});
results.add(future);
}
// make sure none threw an exception
for (Future<Void> future : results) {
future.get();
}
}
}