|
Úplně stejný problém jsem řešil já
- tedy setkal jsem se s ním teprve ve chvíli, kdy jsem přešel na Log4J
verze 1.3aplha-8, kde jsem chtěl využít logování přes DataSource
uložený v JNDI. Můj problém je v tom, že log4j (např. pokud bylo v
nějaké statické třídě jako globální proměnná logger Log4J)
inicializoval appendery a loggery ve fázi, kdy je EAR inicializován a
nebylo možné v této fázi nastartovat transakci. Musel jsem to obejít přetížením tříd log4j a vyřešení tohoto problému takto: import org.apache.log4j.db.JNDIConnectionSource; /** * Upravuje nevhodné chování DBAppenderu při inicializaci Oracle. * * @author Jan Novotný */ public class Log4JJNDIConnectionSource extends JNDIConnectionSource { /** * @see org.apache.log4j.spi.OptionHandler#activateOptions() */ public void activateOptions() { try { //pokusíme se opatrně ověřit funkčnost JNDI Connection Source System.out.println("LOG4J-JNDI - Activate options - connection source ... "); super.activateOptions(); } catch (Throwable e) { //Ups - chybka ... je možné že ještě nemáme přístupný JNDI Context ... odložíme inicializaci na později. System.out.println("LOG4J-JNDI-NOVOJ - Activate options - connection source ... failed"); e.printStackTrace(System.out); } } } A JEŠTĚ JEDNA TŘÍDA import org.apache.log4j.db.DBAppender; import org.apache.log4j.db.ConnectionSource; import org.apache.log4j.spi.LoggingEvent; /** * Upravuje nevhodné chování DBAppenderu při inicializaci Oracle. * * @author Jan Novotný */ public class Log4JDBAppender extends DBAppender { private boolean initializedProperly = false; public void activateOptions() { try { //pokusíme se opatrně aktivovat appender System.out.println("JNDI Log4J - aktivuji appender ... "); super.activateOptions(); initializedProperly = true; } catch (Throwable e) { //hups nepovedlo se .... no nic zkusíme to při další příležitosti System.out.println("JNDI Log4J - chyba při aktivaci appender (toto může být v pořádku): " + e.getLocalizedMessage()); } finally { // all nice and dandy on the eastern front this.active = true; } } protected void append(LoggingEvent event) { //něco se pokakalo při načítání konfigurace DS ... takže ho zkusíme reaktivovat ConnectionSource connectionSource = getConnectionSource(); //pokud je typ dialektu neznámý, znamená to, že se CS je zatím neinicializovaný - zkusíme to tedy znovu if (!initializedProperly && connectionSource.getSQLDialectCode() != ConnectionSource.UNKNOWN_DIALECT) { if (connectionSource instanceof Log4JJNDIConnectionSource) { System.out.println("F1 JNDI Log4J - rekonfiguruji connection source ... "); connectionSource.activateOptions(); } //pokusíme se reaktivovat i appender System.out.println("F1 JNDI Log4J - rekonfiguruji appender ... "); activateOptions(); } //pokud se povedlo napodruhé zalogujeme, jinak holt smůla if (initializedProperly) { //další oprava - DBAppender si neuměl poradit s velkými logovanými zprávami super.append(new Log4JTrimmedLoggingEvent(event)); } else System.out.println("F1 JNDI Log4J - appender neinicializován - log bude zahozen ..."); } } V podstatě jsem ignoroval chyby při neúspěšné inicializaci DS a logoval je na system out až do doby, než se inicializace povedla - pak už vše pokračuje normálně (tzn. jakmile se aplikace už nahodila a došlo k nějakému volání, kde už byly transakce k dispozici). Tím jsem si svůj problém vyřešil a běhá mi to bez problémů. Obdobné by to mohlo být i toho JMS. Honza Novotný Ing. Jan Novotný analytik návrhář Corpus Solutions a.s.
Vaclav Stumbauer napsal(a): Zdravim, rad bych na session facade v pripade vypocetne dlouho trvajicich operaci predaval informaci o jejich prubehu pres JMS. Problem nastava pri deploymentu aplikace na OC4J. V okamziku vytvareni instance prvni session beany v ramci ktere je inicializovano i log4j dojde k nasledujicimu problemu:javax.naming.NamingException: Not in an application scope - start Orion with the -userThreads switch if using user-created threads -userThreads jsem oc4jcku davat zkousel, ale nepremava. Zda se ze chyba nastava ve chvili, kdy se log4j pokousi lookupnout v jndi navazanou topic connection factory. Mate nejaky napad? diky Vasek Stumbauer |
- Re: OC4j :: Log4j :: JMSAppender Ing. Jan Novotný
- problém s certifikátem Tremi-M.Smolny
- Re: problém s certifikátem Libor Krzyžanek
- RE: problém s certifikátem Tremi-M.Smolny
- Re(2): problém s certifikátem JAVA TimeLord
- Re(2): problém s certifikátem JAVA TimeLord
- tisk PDF David Váňa
