Refactoring Database Access in Marauroa: Difference between revisions

Jump to navigation Jump to search
Content deleted Content added
imported>Hendrik Brummermann
imported>Hendrik Brummermann
added diff of JMaPacman
Line 75: Line 75:


Please have a look at the ...DAO classes in the marauroa.server.game.db package and split your sub class accordingly. After that is done you need to register them in the DAORegistry with the class of the original DAO and an instance of your class.
Please have a look at the ...DAO classes in the marauroa.server.game.db package and split your sub class accordingly. After that is done you need to register them in the DAORegistry with the class of the original DAO and an instance of your class.


== Porting of JMaPacman ==

The following diff shows all the changes that were required to port JMaPacman. I think it may help you to get a feeling on how to adjust your own code.

<pre>
public class MaPacmanRPRuleProcessor implements IRPRuleProcessor
{
public AccountResult createAccount(String username, String password, String email) {
- IDatabase database = DatabaseFactory.getDatabase();
+ TransactionPool transactionPool = TransactionPool.get();
- Transaction trans = database.getTransaction();
+ DBTransaction trans = transactionPool.beginWork();
+ AccountDAO accountDAO = DAORegister.get().get(AccountDAO.class);
try {
- trans.begin();
- if (database.hasPlayer(trans, username)) {
+ if (accountDAO.hasPlayer(trans, username)) {
return new AccountResult(Result.FAILED_PLAYER_EXISTS, username);
}
- database.addPlayer(trans, username, Hash.hash(password), email);
+ accountDAO.addPlayer(trans, username, Hash.hash(password), email);
- trans.commit();
+ transactionPool.commit(trans);
return new AccountResult(Result.OK_CREATED, username);
} catch (SQLException e1) {
- try {
- trans.rollback();
- } catch (SQLException e2) {
- //logger.error("Rollback failed: ", e2);
- System.out.println("Rollback failed: " + e2);
- }
+ transactionPool.rollback(trans);
return new AccountResult(Result.FAILED_EXCEPTION, username);
}
}


public CharacterResult createCharacter(String username, String character, RPObject tmpl) {
- IDatabase database = DatabaseFactory.getDatabase();
- Transaction trans = database.getTransaction();
+ TransactionPool transactionPool = TransactionPool.get();
+ DBTransaction trans = transactionPool.beginWork();
+ CharacterDAO characterDAO = DAORegister.get().get(CharacterDAO.class);
try {
- trans.begin();
- if (database.hasCharacter(trans, username, character)) {
+ if (characterDAO.hasCharacter(trans, username, character)) {
return new CharacterResult(Result.FAILED_PLAYER_EXISTS, character, tmpl);
}
@@ -196,18 +190,13 @@
object.put("y", 0);
object.put("dir", -1);
object.put("score", 0);
- database.addCharacter(trans, username, character, object);
+ characterDAO.addCharacter(trans, username, character, object);
- trans.commit();
+ transactionPool.commit(trans);
return new CharacterResult(Result.OK_CREATED, character, object);
} catch (Exception e1) {
//logger.warn("SQL exception while trying to create a new character: ", e1);
- try {
- trans.rollback();
- } catch (SQLException e2) {
- //logger.error("Rollback failed: ", e2);
- System.out.println("Rollback failed: " + e2);
- }
+ transactionPool.rollback(trans);
return new CharacterResult(Result.FAILED_EXCEPTION, character, tmpl);
}
}
</pre>