I'm an OrientDb newbie. I'm using the 2.0 snapshot. I'm writing a custom command that will execute on an Object Database.
This command simply get a Person by name by an Object Database (Person class is registered in the database and the schema is automatically generated).
I don't understand how to get my OObjectDatabaseTx from the execute method.
The method getProfiledDatabaseInstance returns the underlying ODocumentDatabaseTx.
Code is below, with the question part highlighted.
public class GetPersonCommand extends OServerCommandAuthenticatedDbAbstract {
private final static Logger LOGGER = Logger.getLogger(GetPersonCommand.class.getName());
private static final String[] NAMES = { "GET|getPerson/*" };
public GetPersonCommand(final OServerCommandConfiguration iConfiguration) {
super();
}
@Override
public boolean execute(OHttpRequest iRequest, OHttpResponse iResponse) throws Exception {
LOGGER.log(Level.INFO, "GetPersonCommand, enter");
// CHECK THE SYNTAX. 3 IS THE NUMBER OF MANDATORY PARAMETERS
String[] urlParts = checkSyntax(iRequest.url, 3, "Syntax error: getPerson/<database>/<personName>");
// TELLS TO THE SERVER WHAT I'M DOING (IT'S FOR THE PROFILER)
iRequest.data.commandInfo = "getPerson";
iRequest.data.commandDetail = urlParts[2];
// GET THE PARAMETERS
String name = urlParts[2];
OObjectDatabaseTx db = null;
Person person = null;
try {
// COMPILE ERROR! HOW TO GET IT?
db = getProfiledDatabaseInstance(iRequest);
List<Person> persons = db.query(new OSQLSynchQuery<Person>("select * from Person where name = \"" + name
+ "\""));
if (persons.size() == 0) {
iResponse.send(OHttpUtils.STATUS_NOTFOUND_CODE, "Not Found", OHttpUtils.CONTENT_JSON, "Person with name '"
+ urlParts[2] + "' was not found.", null);
} else {
person = persons.get(0);
iResponse.writeResult(person);
}
} catch (Exception e) {
iResponse.send(OHttpUtils.STATUS_INTERNALERROR_CODE, "General Error", OHttpUtils.CONTENT_JSON, "Error: "
+ e.getClass().getName(), null);
LOGGER.log(Level.WARNING, "Error", e);
} finally {
if (db != null)
db.close();
}
return false;
}
@Override
public String[] getNames() {
return NAMES;
}
}