Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

hibernate i log4j

0 views
Skip to first unread message

Konrad Roziewski

unread,
Jun 22, 2003, 4:53:33 PM6/22/03
to
Mam dziwne przeczucie, że popełniam jakiś podstawowy szkolny
błąd... ale po kolei.

Napisałem prosty program korzystający z hibernate (wersja 1.2.5), ale
nie mogę przeskoczyć logowania. Log4J (wersja 1.2.8) albo olewa plik
konfiguracyjny, albo sypie niejasnymi wyjątkami.

CLASSPATH zawiera m.in. następujące jary:
#v+
ant.jar, c3p0.jar, cglib.jar, commons-collections.jar,
commons-dbcp.jar, commons-lang.jar, commons-logging.jar,
commons-pool.jar, hibernate-1.2.jar, j2ee.jar, jcs.jar, jdom.jar,
junit.jar, log4j.jar, odmg.jar, optional.jar,
pg73b1jdbc3.jar, xalan.jar, xerces.jar, xml-apis.jar
#v-
(część z nich zapewne niepotrzebnie, przekopiowałem wszystkie
z paczki hibernate).

Używam standardowego log4j.properties (też skopiowanego
z hibernate):
#v+
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=warn, stdout
log4j.logger.cirrus.hibernate=info
log4j.logger.cirrus.hibernate.type=info
log4j.logger.cirrus.hibernate.ps.PreparedStatementCache=info
#v-

Przy próbie użycia dostaję wyjątek:
#v+
Exception in thread "main" java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:140)
at org.apache.log4j.PropertyConfigurator.class$(PropertyConfigurator.java:457)
at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:632)
at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:603)
at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:500)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:406)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:432)
at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:460)
at org.apache.log4j.LogManager.<clinit>(LogManager.java:113)
at org.apache.log4j.Category.getInstance(Category.java:514)
at org.apache.commons.logging.impl.Log4jFactory.getInstance(Log4jFactory.java:153)
at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:285)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:409)
at cirrus.hibernate.type.NullableType.<clinit>(NullableType.java:22)
at cirrus.hibernate.Hibernate.<clinit>(Hibernate.java:35)
at proj.Main.initDatastore(Main.java:64)
at proj.Main.<init>(Main.java:32)
at proj.Main.main(Main.java:80)
Caused by: java.lang.NullPointerException
at org.apache.log4j.Layout.<clinit>(Layout.java:25)
... 19 more
#v-

log4j.properties jest w CLASSPATH; wiem, że log4j próbuje się do niego
dostać -- zostawiłem tam tylko wpis:
#v+
log4j.rootLogger=warn, stdout
#v-

i dostałem inny wyjątek:
#v+
log4j:ERROR Could not find value for key log4j.appender.stdout
log4j:ERROR Could not instantiate appender named "stdout".
Exception in thread "main" java.lang.ExceptionInInitializerError
at org.apache.commons.logging.impl.Log4JCategoryLog.initialize(Log4JCategoryLog.java:132)
at org.apache.commons.logging.impl.Log4JCategoryLog.<init>(Log4JCategoryLog.java:118)
...
#v-

Czy macie pomysł, jak to razem spiąć?

--
Konrad Roziewski
kon...@suwalki.com.pl, k.roz...@elka.pw.edu.pl
http://www.suwalki.com.pl/~konrad/

Marcin Cenkier

unread,
Jun 22, 2003, 5:37:33 PM6/22/03
to
Konrad Roziewski wrote:
> Mam dziwne przeczucie, że popełniam jakiś podstawowy szkolny
> błąd... ale po kolei.
[...]

> Czy macie pomysł, jak to razem spiąć?

Może spróbuj skonfigurować log4j samemu w swoim programie
[PropertyConfigurator.configure(String configFilename)]? Nie jest to
może eleganckie, ale możliwe, że sam hibernate (albo inny jarek) coś w
tym względzie miesza - miałem problem z xml-security.jar, okazało się
właśnie, że sama biblioteka sobie konfigurowała (tj. wyłączała)
logowanie i dlatego nic nie działało.

--
Greetings, [mail to mcenkier at poczta fm]
Marcin Cenkier "Let's assume that there's only one truth."

Konrad Roziewski

unread,
Jun 23, 2003, 12:41:41 PM6/23/03
to
Marcin Cenkier:

> > Czy macie pomysł, jak to razem spiąć?
> Może spróbuj skonfigurować log4j samemu w swoim programie
> [PropertyConfigurator.configure(String configFilename)]?

Dzięki!
Owszem, poszło... chociaż nie do końca, bo teraz są problemy
z charsetem (?):

#v+
2003-06-23 17:30:48,239 INFO DatastoreImpl:? - Mapping resource: proj/Hurtownia.hbm.xml
2003-06-23 17:30:51,903 INFO XMLHelper:? - Parsing XML: unknown system id
2003-06-23 17:30:52,998 ERROR DatastoreImpl:? - Could not configure datastore from input stream
java.lang.IllegalArgumentException: Null charset name
at java.nio.charset.Charset.lookup(Charset.java:376)
at java.nio.charset.Charset.isSupported(Charset.java:405)
at sun.nio.cs.StreamEncoder.forOutputStreamWriter(StreamEncoder.java:67)
at java.io.OutputStreamWriter.<init>(OutputStreamWriter.java:93)
at java.io.PrintWriter.<init>(PrintWriter.java:103)
at java.io.PrintWriter.<init>(PrintWriter.java:87)
at org.apache.xerces.util.DOMErrorHandlerWrapper.<init>(Unknown Source)
at org.apache.xerces.dom.CoreDocumentImpl.<init>(Unknown Source)
at org.apache.xerces.dom.DocumentImpl.<init>(Unknown Source)
at org.apache.xerces.dom.DeferredDocumentImpl.<init>(Unknown Source)
at org.apache.xerces.dom.DeferredDocumentImpl.<init>(Unknown Source)
at org.apache.xerces.parsers.AbstractDOMParser.startDocument(Unknown Source)
at org.apache.xerces.impl.dtd.XMLDTDValidator.startDocument(Unknown Source)
at org.apache.xerces.impl.XMLDocumentScannerImpl.startEntity(Unknown Source)
at org.apache.xerces.impl.XMLDocumentScannerImpl.startEntity(Unknown Source)
at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source)
at org.apache.xerces.impl.XMLEntityManager.startDocumentEntity(Unknown Source)
at org.apache.xerces.impl.XMLDocumentScannerImpl.setInputSource(Unknown Source)
at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at cirrus.hibernate.helpers.XMLHelper.parseInputSource(XMLHelper.java:48)
at cirrus.hibernate.impl.DatastoreImpl.storeInputStream(DatastoreImpl.java:116)
at cirrus.hibernate.impl.DatastoreImpl.storeClass(DatastoreImpl.java:140)
at proj.Main.initDatastore(Main.java:68)
at proj.Main.<init>(Main.java:35)
at proj.Main.main(Main.java:83)
#v-
(a to jest tylko ustawianie DataStore, które z poziomu junit
(czyli bez ustawiania log4j) działa bezproblemowo (ale sypie
komunikatami na System.out :/ )

Co ciekawsze, wyjątek
java.lang.IllegalArgumentException: Null charset name
pojawiał się już wcześniej (m.in. kiedy próbowałem zmusić go do
pracy w sposób "domyślny", umieszczając po prostu
log4j.properties w CLASSPATH, chociaż nie jestem teraz pewien,
czy wtedy xerces też był w StackTrace). To chyba jakiś bardziej
ogólny błąd? Tylko teraz gdzie to poprawić (korzystam z j2sdk
1.4.1_02)?

Mam niejasne przeczucie, że po dokumentacji mavena, xdocleta,
hibernate, log4j, niedługo przyjdzie pora na dokształcanie się
z xercesa... ale może się mylę?

Marcin Cenkier

unread,
Jun 23, 2003, 3:23:04 PM6/23/03
to
Konrad Roziewski wrote:
> Owszem, poszło... chociaż nie do końca, bo teraz są problemy
> z charsetem (?):
[...]

> 2003-06-23 17:30:52,998 ERROR DatastoreImpl:? - Could not configure datastore from input stream
> java.lang.IllegalArgumentException: Null charset name
[...]

> at proj.Main.initDatastore(Main.java:68)
> at proj.Main.<init>(Main.java:35)
> at proj.Main.main(Main.java:83)

Najprawdopodobniej (jak wynika z stacktrace) żle inicjalizujesz ten
datastore. (Logowanie już działa, teraz pozostaje skorzystać z jego
dobrodziejstw i znajdować błędy które wyświetla :)
A jeśli bez log4j działało bezproblemowo, to proponuję po prostu użyć
hibernate w innej wersji (albo wcześniejszej, albo najnowszej
ściągniętej zapewne z repozytorium CVS).

Konrad Roziewski

unread,
Jun 24, 2003, 3:33:59 AM6/24/03
to
Marcin Cenkier:

> A jeśli bez log4j działało bezproblemowo, to proponuję po prostu użyć
> hibernate w innej wersji (albo wcześniejszej, albo najnowszej
> ściągniętej zapewne z repozytorium CVS).

Z hibernate 1.2.5 też miałem jakieś problemy... Planuję też
przyjrzeć się wersji 2.0, ale wiąże się to z przepisaniem części
kodu, dlatego wstrzymuję się jeszcze.

W międzyczasie zrobiłem jeszcze inaczej:
#v+
ds = Hibernate.createDatastore();
ds.storeClass(Hurtownia.class);
sess = ds.buildSessionFactory().openSession();
PropertyConfigurator.configure("log4j.properties");
#v-
(poprzednio PropertyConfigurator.configure() wywoływałem przed
Hibernate.createDatastore())

I działa; nawet loguje tak, jakbym log4j skonfigurował przed
użyciem hibernate (co mnie trochę dziwi, bo spodziewałem się
jakiegoś "okresu przejściowego", w którym log4j po staremu
sypałby komunikatami na kosoli).

Piotr Bzdyl

unread,
Jun 24, 2003, 3:42:03 AM6/24/03
to
Witam,

Używałem zarówno hibernate jak i log4j w swoich dwóch projektach i nie
miałem takich problemów. Wszystko działało ok. Jakie to problemy miałeś z
wersją 1.2.5 hibernate?

Pozdrawiam,
Piotrek


Piotr Maj

unread,
Jun 24, 2003, 3:54:11 AM6/24/03
to
Dnia wto, 24 cze 2003 o 07:42 GMT Piotr Bzdyl rzekł/-a:

> Używałem zarówno hibernate jak i log4j w swoich dwóch projektach i nie
> miałem takich problemów. Wszystko działało ok. Jakie to problemy
> miałeś z wersją 1.2.5 hibernate?

Ja mialem:

[2003-06-23 15:44:05] WARN : error in action at path /index: null (java.lang.NullPointerException)
java.lang.NullPointerException
at cirrus.hibernate.ps.PreparedStatementCache.close(PreparedStatementCache.java:177)
at cirrus.hibernate.ps.PreparedStatementCache.reap(PreparedStatementCache.java:167)
at cirrus.hibernate.ps.PreparedStatementCache.closePreparedStatement(PreparedStatementCache.java:122)
at cirrus.hibernate.impl.SessionFactoryImpl.closePreparedStatement(SessionFactoryImpl.java:493)
at cirrus.hibernate.impl.BatcherImpl.closeQueryStatement(BatcherImpl.java:59)
at cirrus.hibernate.loader.Loader.doFind(Loader.java:208)
at cirrus.hibernate.loader.Loader.find(Loader.java:512)
at cirrus.hibernate.impl.SessionImpl.find(SessionImpl.java:1027)
at cirrus.hibernate.impl.SessionImpl.find(SessionImpl.java:1007)
at cirrus.hibernate.impl.SessionImpl.find(SessionImpl.java:999)

rzecz pojawia sie w momencie duzego obciazenia serwisu WWW. ma ktos
doswiadczenia z hibernate przy serwisach, w ktorych jednoczesnie leci do
kilkanascie, kilkadziesiat zapytan roznej masci (update, insert, ale
najwiecej select'ow). Zauwazylem tez, ze blad ten powraca cyklicznie co
pare godzin. Czy to moze byc wina cache'a hibernatowego?

--
pozdrawiam . . . . . . . . . . .
Piotr Maj .:. kernelpanic.pl .:.
.:. Stuff for geeks .:.
Registered Linux user #231121. . . . . . . . . . . . . . . . .

Konrad Roziewski

unread,
Jun 24, 2003, 4:33:16 AM6/24/03
to
Piotr Bzdyl:

> Używałem zarówno hibernate jak i log4j w swoich dwóch projektach i nie
> miałem takich problemów. Wszystko działało ok. Jakie to problemy miałeś z
> wersją 1.2.5 hibernate?

Sorry, miałem na myśli 1.2.3, a problem był ten sam, co z obecną 1.2.8:
albo PropertyConfigurator nie mógł znaleźć jakiejś klasy
(Exception in thread "main" java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:140)...)
albo coś mu się nie podobało z charsetem
(java.lang.IllegalArgumentException: Null charset name
at java.nio.charset.Charset.lookup(Charset.java:376)
at java.nio.charset.Charset.isSupported(Charset.java:405)...)
Dlatego napisałem, że podejrzewałem jakiś szkolny błąd, bo to
niemożliwe, żeby tak prosty kawałek kodu nie działał.

Problem z charsetem natchnął mnie jednak w innym kierunku...
Przypomniałem sobie, że klasy kompilowane jikes'em wstawiały '?' zamiast
polskich znaków (dopóki nie ustawiłem kodowania w build.properties),
zmieniłem kompilator na standardowy (czyt. woooooolny) sunowski
i wszystko działa jak powinno (czyt. zgodnie z dokumentacją).

Piotr Bzdyl

unread,
Jun 25, 2003, 9:21:52 AM6/25/03
to
Witam,

> rzecz pojawia sie w momencie duzego obciazenia serwisu WWW. ma ktos
> doswiadczenia z hibernate przy serwisach, w ktorych jednoczesnie leci do
> kilkanascie, kilkadziesiat zapytan roznej masci (update, insert, ale
> najwiecej select'ow). Zauwazylem tez, ze blad ten powraca cyklicznie co
> pare godzin. Czy to moze byc wina cache'a hibernatowego?

Ja akurat korzystałem z hibernate w aplikacji standalone. Forum albo
developerzy hibernate nie pomogli?

Pozdrawiam,
Piotrek


0 new messages