czwartek, 25 marca 2010

Seam-gen + DB2

Udało mi się w końcu połączyć działanie seam-gen z DB2, co nie było takim prostym zadaniem jak myślałem. Ogólnie DB2, jak na komercyjne rozwiązanie, sprawia wiele problemów dla użytkownika, który ma pierwszy raz z nim styczność. Żeby wygenerować projekt używając seam-gen na podstawie bazy danych w DB2 (v. 9.7), musimy zmienić kilka rzeczy:

1. Potrzebujemy odpowiedni sterownik JDBC, który możeby znaleźć standardowo w: "C:\Program Files\IBM\SQLLIB\java\db2jcc.jar"
2. W pliku konfiguracyjnym seam-gen musimy nanieść kilka zmian:
2.1. hibernate.connection.driver_class=com.ibm.db2.jcc.DB2Driver
2.2. hibernate.default_schema=ANDRZEJ
//oczywiście powinien być to odpowiednia wartość dla danej bazy
2.3. użytkownika i hasło pozostawić puste, ponieważ nie są wymagane przy łączeniu się z localhost'a
2.4. hibernate.connection.url=jdbc\:db2\:NAZWA_BAZY //jeśli używamy kreatora, podajemy oczywiście: jdbc:db2:NAZWA_BAZY
2.5. driver.jar=c\:/java_libs/db2jcc.jar
3. Po uruchomieniu polecenia: seam generate, posypie się jeden błąd, który niema znaczenia i cała operacja powinna zakończyć się sukcesem
4. Co mnie najbardziej zdziwiło, to fakt, że tak wygenerowany projekt w moim przypadku nie chciał się deployować na serwerze z powodu błędu:
2010-03-25 11:45:27,781 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/DB2Test3]] Exception sending context initialized event to listener instance of class org.jboss.seam.servlet.SeamListener
org.jboss.seam.InstantiationException: Could not instantiate Seam component: DB2Test3EntityManagerFactory
Powodowanego przez:
Caused by: org.hibernate.HibernateException: Wrong column type: CO_CD, expected: varchar(3)
Rozwiązaniem problemu była zmiana typu kolumn w bazie z CHARACTER na VARCHAR, przypuszczam, że wiąże się to z jakimiś niepasującymi dialektami, i bardzo możliwe, że istnieje lepsze rozwiązanie, aczkolwiek na chwilę obecną nie jest mi ono znane.

2 komentarze:

  1. Mógłbyś wyjaśnić to zdanie: Ogólnie DB2, jak na komercyjne rozwiązanie, sprawia wiele problemów dla użytkownika, który ma pierwszy raz z nim styczność.? Co dokładnie było problemem? Samo działanie Hibernate nie wliczasz w to, prawda?

    OdpowiedzUsuń
  2. Chodziło mi bardziej o moje osobiste wrażenia, spodziewałem się chyba czegoś innego, czegoś co będzie się przyjemnie obsługiwało już od samego początku. Powoli zaczynam się przekonywać... możliwe, że brakowało mi po prostu większego poziomu intuicyjności w obsłudze.

    OdpowiedzUsuń