Я пытаюсь использовать AspectJ для обнаружения не вызванных методов в вызове метода. То есть я хотел бы знать, не вызывается ли метод в другом методе.
В той же строке возможно ли отслеживать вызов метода в блоке catch или finally? Я просто хотел бы знать, вызывается ли в методе JDBC метод close соединения.
Более подробно:
1) Я хотел бы использовать его для методов JDBC. В частности, в некоторых случаях в JDBC необходимо использовать транзакционный контекст при подключении к базе данных. В частности, такой транзакционный контекст задается путем вызова инструкций con.setAutoCommit (false); con.commit (); con.rollback () ;.
Например, давайте посмотрим на фрагмент метода удаления клиента из БД:
public boolean deleteClient(String clientId){
Connection con = null;
boolean b=false;
…
try {
con = DriverManager.getConnection(this.getProperties("url"));
con.setAutoCommit(false);
….//Instructions for deleting the client
`con.commit();
} catch (SQLException e) {
e.printStackTrace();
try {
if(con != null)
con.rollback();
}catch(SQLException e1) {
e1.printStackTrace();
}
}finally {
…if (con != null)
con.close();
…
}
return b;
} `
Дело в том, что я хотел бы использовать AspectJ, чтобы сообщить своим студентам, не создают ли их методы, подобные этому, транзакционный контекст, то есть не вызывают ли они какие-либо инструкции: con.setAutoCommit (false); con.commit (); или con.rollback ();.
- Точно так же необходимо закрыть соединение, обычно в блоке finally. Я хотел бы посоветовать студентам, если они забудут вызвать метод close.
Есть идеи по любому из пунктов?