W przypadku korzystania z Adaptive Server Anywhere w wersji OEM konieczna jest autoryzacja każdego połączenia w bazie. Jeżeli połączenie nie zostanie zautoryzowane baza pozwoli tylko na dostęp do odczytu (
read-only). Próba dokonania operacji zapisu na takiej bazie powoduje wystąpienie błędu:
ASA Error- 98: Authentication violation.W celu dokonania autoryzacji połączenia należy skorzystać z interfejsu
ConnectionCustomizer dostarczanego przez zarządcę połączeniami
C3P0.
W pierwszej kolejności należy stworzyć klasę, dla potrzeb przykładu
C3P0ConnectionCustomizer, która zaimplementuje wspomniany wcześniej interfejs. Interfejs dostarcza następujące metody:
- onAcquire
- onCheckIn
- onCheckOut
- onDestroy
Autoryzacja powinna być wykonywana w przypadku nawiązania nowego połączenia z bazą danych. W związku z tym należy w metodzie
onAcquire wysłać do bazy danych komendę
SET zgodnie z instrukcją, którą można znaleźć na płycie instalacyjnej. Poniżej została przedstawiona wspomniana klasa wraz z instrukcjami autoryzującymi połączenie.
Klasa C3P0ConnectionCustomizer:public class C3P0ConnectionCustomizer implements ConnectionCustomizer {
public void onAcquire(Connection arg0, String arg1) throws Exception {
Statement Stmt1 = arg0.createStatement();
Stmt1.executeUpdate("SET TEMPORARY OPTION CONNECTION_AUTHENTICATION='Company=ComapnyName;Application=ApplicationName;Signature=0...4'");
}
public void onCheckIn(Connection arg0, String arg1) throws Exception {
}
public void onCheckOut(Connection arg0, String arg1) throws Exception {
}
public void onDestroy(Connection arg0, String arg1) throws Exception {
}
}Drugim i ostatnim krokiem jest poinformowanie C3P0 o konieczności korzystania z klasy
C3P0ConnectionCustomizer przy zarządzaniu połączeniami. W tym celu przypisujemy właściwości
c3p0.connectionCustomizerClassName nazwę klasy wykonującej to zadanie. Może to zostać dokonane np. w pliku
c3p0.properties (przykład wpisu poniżej)
C3P0.propertiesc3p0.connectionCustomizerClassName=C3P0ConnectionCustomizer
Jeżeli kod autoryzujący połączenie będzie nieprawidłowy to przy próbie nawiązania połączenia zostanie zwrócony błąd
ASA Error- 218: Authentication violation.
Więcej o interfejsie ConnectionCustomizer