рекурсивно извикване в SystemOutandErrhandler

този проблем ме подлудява.

Използвам glassfish V2.1 и JDK 1.6.0_27 на Kubuntu 12.04. Ако стартирам сървъра, получавам това изключение

    Starting Domain domain1, please wait.
Default Log location is /usr/share/glassfish-v2.1-b60e/domains/domain1/logs/server.log.
Redirecting output to /usr/share/glassfish-v2.1-b60e/domains/domain1/logs/server.log
recursive call into SystemOutandErrhandler
java.lang.RuntimeException: recursivecall
        at com.sun.enterprise.server.logging.SystemOutandErrHandler$LoggingByteArrayOutputStream.flush(SystemOutandErrHandler.java:359)
        at java.io.PrintStream.write(PrintStream.java:449)
        at com.sun.enterprise.server.logging.SystemOutandErrHandler$LoggingPrintStream.write(SystemOutandErrHandler.java:293)
        at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:220)
        at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:281)
        at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:124)
        at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:134)
        at java.io.OutputStreamWriter.write(OutputStreamWriter.java:220)
        at java.io.Writer.write(Writer.java:157)
        at java.util.logging.StreamHandler.publish(StreamHandler.java:209)
        at java.util.logging.ConsoleHandler.publish(ConsoleHandler.java:105)
        at java.util.logging.Logger.log(Logger.java:530)
        at java.util.logging.Logger.doLog(Logger.java:552)
        at java.util.logging.Logger.log(Logger.java:575)
        at com.sun.enterprise.server.logging.SystemOutandErrHandler$LoggingByteArrayOutputStream.flush(SystemOutandErrHandler.java:368)
        at java.io.PrintStream.write(PrintStream.java:449)
        at com.sun.enterprise.server.logging.SystemOutandErrHandler$LoggingPrintStream.write(SystemOutandErrHandler.java:293)
        at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:220)
        at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:290)
        at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:294)
        at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:140)
        at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
        at java.util.logging.StreamHandler.flush(StreamHandler.java:242)
        at java.util.logging.ConsoleHandler.publish(ConsoleHandler.java:106)
        at java.util.logging.Logger.log(Logger.java:530)
        at java.util.logging.Logger.doLog(Logger.java:552)
        at java.util.logging.Logger.log(Logger.java:616)
        at com.sun.enterprise.server.ApplicationServer.printStartupInfo(ApplicationServer.java:618)
        at com.sun.enterprise.server.ApplicationServer.onInitialization(ApplicationServer.java:170)
        at com.sun.enterprise.server.ondemand.OnDemandServer.onInitialization(OnDemandServer.java:103)
        at com.sun.enterprise.server.PEMain.run(PEMain.java:399)
        at com.sun.enterprise.server.PEMain.main(PEMain.java:336)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at com.sun.enterprise.server.PELaunch.main(PELaunch.java:415)
Domain domain1 is ready to receive client requests. Additional services are being started in background. 
Domain [domain1] is running [Sun GlassFish Enterprise Server v2.1 (9.1.1) (build b60e-fcs)] with its configuration and logs at: [/usr/share/glassfish-v2.1-b60e/domains].
Admin Console is available at [http://localhost:4848].
Use the same port [4848] for "asadmin" commands.
User web applications are available at these URLs:
[http://localhost:8080 https://localhost:8181 ].
Following web-contexts are available:
[/web1  /__wstx-services /jamon ].
Standard JMX Clients (like JConsole) can connect to JMXServiceURL:
[service:jmx:rmi:///jndi/rmi://calvi:8686/jmxrmi] for domain management purposes.
Domain listens on at least following ports for connections:
[8080 8181 4848 3700 3820 3920 8686 ].
Domain does not support application server clusters and other standalone instances.

Сървърът работи без проблеми, но логването не работи. Преинсталирах и glassfish и java. Но не помага. Ако коментирам реда за манипулатори във файла /etc/java-6-openjdk/logging.properties, сървърът стартира без изключения, но регистрирането не работи освен това.

handlers= java.util.logging.ConsoleHandler

Не знам дали това се е случило с класа ConsoleHandler.

Благодаря ви предварително за помощта.


person sylo    schedule 05.08.2013    source източник
comment
звучи като бъг. Изглежда, че опитът за регистриране на някакъв текст има тригери и грешка, която се опитва да регистрира повече текст.   -  person Peter Lawrey    schedule 05.08.2013


Отговори (1)


Изглежда, че трябва да надстроите до GlassFish V3. Вижте: GLASSFISH-8822 и GlassFish 3 означава липса на GlassFish 2.1.2

От GLASSFISH-6164 заобиколното решение е посочено като:

Ако нулирам System.out и System.err да сочат към временен файл, преди да извикам readConfiguration и не ги нулирам да сочат към регистратора, тогава всичко работи добре.

Може да сте в състояние да създадете персонализиран LogManager, който изпълнява това заобиколно решение, когато се извика readConfiguration. След това инсталирайте персонализирания LogManager, като използвате системното свойство java.util.logging.manager при стартиране.

person jmehrens    schedule 05.08.2013
comment
Можете ли да ми кажете къде мога да изтегля v2.1.2? Не мога да го намеря. Това официално издание на Glassfish ли е? - person sylo; 06.08.2013
comment
Редактирана и добавена връзка. - person jmehrens; 06.08.2013