sobota, 18 sierpnia 2007

Blogger i wykopywarka

W celu dodania do postów publikowanych na Blogger wykopywarki należy w szablonie (po wybraniu opcji Rozszerz szablony widgetów dodać kod:



W celu modyfikacji wyglądu zachęcam do zapoznania się z przykładami na stronie http://wykop.pl/narzedzia.

środa, 15 sierpnia 2007

Sybase CONNECTION_AUTHENTICATION

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.properties
c3p0.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