Pokazywanie postów oznaczonych etykietą Java. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą Java. Pokaż wszystkie posty

wtorek, 13 października 2009

Komentowanie kodu

Jestem w trakcie lektury "Clean Code. A Handbook of Agile Software Craftsmanship". Książka zawiera ogrom wiedzy, która mogłoby się wydawać niewiele zmienia w naszym codziennym pisaniu. Jestem dopiero na jej początku (rozdział 4 - Comments), jednak już zauważyłem że na kilka spraw zaczynam spoglądać trochę inaczej.
Wszyscy, zawsze i wszędzie mówią: "komentarze muszą być wszędzie", a tu proszę:

Comments are not like Schindler's List. They are not "pure good." Indeed, comments are, at best, a necessary evil.

I dalej:

The proper use of comments is to compensate for our failure to express ourself in code. Note that I used the word failure. I meant it.


Chyba się zgodzicie, że coś w tym jest? Swoją drogą polecam książkę, a sam jestem ciekaw co dalej.

piątek, 31 lipca 2009

Java, wyrażenia regularne i "\"

Mamy ciąg znaków, żeby daleko nie szukać NAZWADOMENY\uzytkownik. Chcemy podzielić go względem "\". Jeżeli się wie jak to jest w miarę prosto :)
Dlaczego aż cztery "\"?
Jak pamiętamy (lub sprawdzimy w Java API) split przyjmuje jako parametr wyrażenie regularne. W wyrażeniach regularnych "\" jest znakiem "specjalnym". Dlatego:
  • \ - w Javie jest to escape character (tłumaczenia na polski nie pasują mi...)
  • \\ - mamy już naszego backslasha w wyrażeniu regularnym, ale w nim jest on właśnie escape character ;) dlatego potrzebujemy jeszcze jednego backslasha
  • \\\\ - w wyrażeniu regularnym będzie to \\ a więc \ :)
Uf...

ś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