рекурсивный вызов 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.

Сервер работает без проблем, но регистрация не работает. Я переустановил стеклянную рыбу и 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 обходной путь указан как:

Если я перед вызовом readConfiguration сбрасываю System.out и System.err, чтобы они указывали на временный файл, и не сбрасываю их, чтобы они указывали на регистратор, тогда все работает нормально.

Вы можете создать собственный 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