Консоль администратора Glassfish выдает исключение java.lang.IllegalStateException при создании пула JDBC
Неделю назад я скачал Glassfish 4.1. Сделал zip установку. Попытка использовать консоль администратора для создания пула соединений JDBC. Получил это сообщение об ошибке:
java.lang.IllegalStateException: getOutputStream() has already been called for this response
Много ссылок на эту ошибку. Многие люди объявили это "Спросил и ответил". Но я не могу найти нигде ссылки на эту проблему, не говоря уже о решении.
Но если кто-то считает, что ответ получен, обязательно добавьте ссылку на решение этой проблемы: Новая установка. Ничего не делал, только открыл консоль и попытался создать новый пул соединений JDBC.
Resource Type: javax.sql.DataSource.
Vendor: MySql.
Я храню mysql-connector-java-5.1.35.jar в \glassfish4\glassfish\lib
Вот самое близкое решение, которое я нашел. Но это было для GF v3.
Наконец-то я нашел реальную проблему в моем домене.xml:
-Dorg.glassfish.web.rfc2109_cookie_names_enforced=false
отсутствовал в домене.xml, созданном asupgrade. Я просто добавил его в jvm-опции domain.xml, и теперь GF v3 работает как положено. Добавлено:<jvm-options>-Dorg.glassfish.web.rfc2109_cookie_names_enforced=false</jvm-options>
Попробовал это. Не сработало (Я вставил запись журнала GF, чтобы показать, что рекомендуемая строка добавлена в домен domain.xml GF, используемый при запуске.)
Я попытался откопать domain.xml со своего старого сервера v3 и использовать его в новом v4. Это не сработало.
Другие вопросы, связанные с моим сообщением об исключении, были связаны с получением развернутого приложения - в основном сервлетов. Но это чистый сервер. Приложения не были установлены.
Я нашел много ссылок на людей, работающих над этим исключением, как на ошибку GF. Большинство из них недавно. Никто не дал обходного пути и даже не сказал, что они когда-либо решали это.
Кто-нибудь может предложить решение?
Или дайте мне знать, если это просто ошибка, которую Oracle решил не исправлять?
Или знаете, где я могу найти помощь? Это убивает меня.
В случае, если это поможет, это журнал GF для чистого запуска (с вставкой jvm в domain.xml.) Он также показывает трассировку стека для неудачной попытки создания пула соединений JDBC.
ПРИМЕЧАНИЕ. Я вытащил все записи журнала [INFO]. И все оставленные записи [ПРЕДУПРЕЖДЕНИЕ], похоже, относятся к Гризли.
[2015-10-09T12:21:24.598-1000] [] [INFO] [NCLS-GFLAUNCHER-00005] [javax.enterprise.launcher] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1444429284598] [levelValue: 800] [[
JVM invocation command line:
C:\Program Files\Java\jdk1.8.0_05\bin\java.exe
-cp
C:/glassfish4/glassfish/modules/glassfish.jar
-XX:+UnlockDiagnosticVMOptions
-XX:NewRatio=2
-XX:MaxPermSize=192m
-Xmx512m
-javaagent:C:/glassfish4/glassfish/lib/monitor/flashlight-agent.jar
-client
-Djavax.xml.accessExternalSchema=all
-Djavax.net.ssl.trustStore=C:\glassfish4\glassfish\domains\domain1/config/cacerts.jks
-Djdk.corba.allowOutputStreamSubclass=true
-Dfelix.fileinstall.dir=C:\glassfish4\glassfish/modules/autostart/
-Dorg.glassfish.additionalOSGiBundlesToStart=org.apache.felix.shell,org.apache.felix.gogo.runtime,org.apache.felix.gogo.shell,org.apache.felix.gogo.command,org.apache.felix.shell.remote,org.apache.felix.fileinstall
-Dcom.sun.aas.installRoot=C:\glassfish4\glassfish
-Dfelix.fileinstall.poll=5000
-Djava.endorsed.dirs=C:\glassfish4\glassfish/modules/endorsed;C:\glassfish4\glassfish/lib/endorsed
-Djava.security.policy=C:\glassfish4\glassfish\domains\domain1/config/server.policy
-Dosgi.shell.telnet.maxconn=1
-Dfelix.fileinstall.bundles.startTransient=true
-Dcom.sun.enterprise.config.config_environment_factory_class=com.sun.enterprise.config.serverbeans.AppserverConfigEnvironmentFactory
-Dfelix.fileinstall.log.level=2
-Dorg.glassfish.web.rfc2109_cookie_names_enforced=false
-Djavax.net.ssl.keyStore=C:\glassfish4\glassfish\domains\domain1/config/keystore.jks
-Djava.security.auth.login.config=C:\glassfish4\glassfish\domains\domain1/config/login.conf
-Dfelix.fileinstall.disableConfigSave=false
-Dfelix.fileinstall.bundles.new.start=true
-Dcom.sun.aas.instanceRoot=C:\glassfish4\glassfish\domains\domain1
-Dosgi.shell.telnet.port=6666
-Dgosh.args=--nointeractive
-Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as
-Dosgi.shell.telnet.ip=127.0.0.1
-DANTLR_USE_DIRECT_CLASS_LOADING=true
-Djava.awt.headless=true
-Dcom.ctc.wstx.returnNullForDefaultNamespace=true
-Djava.ext.dirs=C:\Program Files\Java\jdk1.8.0_05/lib/ext;C:\Program Files\Java\jdk1.8.0_05/jre/lib/ext;C:\glassfish4\glassfish\domains\domain1/lib/ext
-Djdbc.drivers=org.apache.derby.jdbc.ClientDriver
-Djava.library.path=C:/glassfish4/glassfish/lib;C:/ProgramData/Oracle/Java/javapath;C:/Windows/Sun/Java/bin;C:/Windows/System32;C:/Windows;C:/glassfish4/glassfish/ C:/Program Files/Dell/Dell Data Protection/Drivers/TSS/bin;C:/Program Files (x86)/Common Files/Intuit/QBPOSSDKRuntime;C:/Program Files (x86)/QuickTime/QTSystem;D:/Bulletproof/bpMySql/bin;C:/glassfish4/glassfish
com.sun.enterprise.glassfish.bootstrap.ASMain
-upgrade
false
-domaindir
C:/glassfish4/glassfish/domains/domain1
-read-stdin
true
-asadmin-args
--host,,,localhost,,,--port,,,4848,,,--secure=false,,,--terse=false,,,--echo=false,,,--interactive=true,,,start-domain,,,--verbose=false,,,--watchdog=false,,,--debug=false,,,--domaindir,,,C:\glassfish4\glassfish\domains,,,domain1
-domainname
domain1
-instancename
server
-type
DAS
-verbose
false
-asadmin-classpath
C:/glassfish4/glassfish/lib/client/appserver-cli.jar
-debug
false
-asadmin-classname
com.sun.enterprise.admin.cli.AdminMain]]
[2015-10-09T12:21:27.864-1000] [glassfish 4.1] [WARNING] [] [org.glassfish.grizzly.config.Utils] [tid: _ThreadID=17 _ThreadName=RunLevelControllerThread-1444429287050] [timeMillis: 1444429287864] [levelValue: 900] [[
Instance could not be initialized. Class=interface org.glassfish.grizzly.http.server.AddOn, name=http-listener-1, realClassName=org.glassfish.grizzly.http2.Http2AddOn]]
[2015-10-09T12:21:27.962-1000] [glassfish 4.1] [WARNING] [] [org.glassfish.grizzly.config.Utils] [tid: _ThreadID=17 _ThreadName=RunLevelControllerThread-1444429287050] [timeMillis: 1444429287962] [levelValue: 900] [[
Instance could not be initialized. Class=interface org.glassfish.grizzly.http.server.AddOn, name=http-listener-2, realClassName=org.glassfish.grizzly.http2.Http2AddOn]]
[2015-10-09T12:21:27.970-1000] [glassfish 4.1] [WARNING] [] [org.glassfish.grizzly.config.Utils] [tid: _ThreadID=17 _ThreadName=RunLevelControllerThread-1444429287050] [timeMillis: 1444429287970] [levelValue: 900] [[
Instance could not be initialized. Class=interface org.glassfish.grizzly.http.server.AddOn, name=admin-listener, realClassName=org.glassfish.grizzly.http2.Http2AddOn]]
[2015-10-09T12:21:31.120-1000] [glassfish 4.1] [WARNING] [] [org.glassfish.grizzly.config.Utils] [tid: _ThreadID=75 _ThreadName=pool-13-thread-1] [timeMillis: 1444429291120] [levelValue: 900] [[
Instance could not be initialized. Class=interface org.glassfish.grizzly.http.server.AddOn, name=http-listener-1, realClassName=org.glassfish.grizzly.http2.Http2AddOn]]
[2015-10-09T12:21:31.135-1000] [glassfish 4.1] [WARNING] [] [org.glassfish.grizzly.config.Utils] [tid: _ThreadID=75 _ThreadName=pool-13-thread-1] [timeMillis: 1444429291135] [levelValue: 900] [[
Instance could not be initialized. Class=interface org.glassfish.grizzly.http.server.AddOn, name=http-listener-2, realClassName=org.glassfish.grizzly.http2.Http2AddOn]]
[2015-10-09T12:21:37.895-1000] [glassfish 4.1] [WARNING] [] [javax.enterprise.system.container.web.com.sun.web.security] [tid: _ThreadID=48 _ThreadName=admin-listener(4)] [timeMillis: 1444429297895] [levelValue: 900] [[
Context path from ServletContext: differs from path from bundle: /]]
[2015-10-09T12:22:46.963-1000] [glassfish 4.1] [WARNING] [] [javax.enterprise.web] [tid: _ThreadID=48 _ThreadName=admin-listener(4)] [timeMillis: 1444429366963] [levelValue: 900] [[
StandardWrapperValve[FacesServlet]: Servlet.service() for servlet FacesServlet threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.catalina.connector.Response.getWriter(Response.java:777)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:224)
at com.sun.faces.context.ExternalContextImpl.getResponseOutputWriter(ExternalContextImpl.java:851)
at com.sun.faces.context.PartialViewContextImpl.createPartialResponseWriter(PartialViewContextImpl.java:504)
at com.sun.faces.context.PartialViewContextImpl.access$300(PartialViewContextImpl.java:79)
at com.sun.faces.context.PartialViewContextImpl$DelayedInitPartialResponseWriter.getWrapped(PartialViewContextImpl.java:642)
at javax.faces.context.PartialResponseWriter.startDocument(PartialResponseWriter.java:120)
at com.sun.faces.context.AjaxExceptionHandlerImpl.handlePartialResponseError(AjaxExceptionHandlerImpl.java:202)
at com.sun.faces.context.AjaxExceptionHandlerImpl.handle(AjaxExceptionHandlerImpl.java:127)
at javax.faces.context.ExceptionHandlerWrapper.handle(ExceptionHandlerWrapper.java:100)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:119)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:659)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
at com.sun.webui.jsf.util.UploadFilter.doFilter(UploadFilter.java:233)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
at org.apache.catalina.core.StandardPipeline.doChainInvoke(StandardPipeline.java:678)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)
at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
at java.lang.Thread.run(Thread.java:745)
]]
8 ответов
По следующим билетам JIRA:
- Невозможно создать ресурс JDBC или пул соединений в консоли администратора
- Не удается создать пул соединений JDBC
это все еще нерешенная проблема. Несмотря на то, что мы можем ожидать таких вещей, так как Oracle отказалась от коммерческой поддержки Glassfish, все еще ужасно, что такая базовая функциональность не работает.
Однако, если вы действительно в отчаянии, есть очень неприятный обходной путь. Glassfish поставляется с предопределенным пулом JDBC DerbyPool, который вам, вероятно, не понадобится, если вы не имеете дело с Java DB. Не стесняйтесь редактировать его, изменив имя класса источника данных на com.mysql.jdbc.jdbc2.optional.MysqlDataSource
и настройка дополнительных свойств для указания на экземпляр MySQL Server. Прежде чем приступить к такому взлому, убедитесь, что вы установили MySQL-коннектор в папку lib Glassfish.
ОБНОВИТЬ
Только что заметил, что есть исправленная версия Glassfish, она называется Payara и доступна для скачивания здесь. Согласно документации, это клон GlassFish 4.1, исправленный и доработанный сообществом.
Я только что откатился на 4.1.0 с 4.1.1 - работает нормально. Действительно безумная ошибка GlassFish:(
У меня та же проблема, и это, безусловно, заставит меня выбрать другие серверы приложений, почему бы не Tomee, Jboss, Wildfly, ...
В любом случае, здесь есть другой обходной путь, просто вставьте этот мир xml в domain.xml (между другими пулами соединений)
<jdbc-connection-pool connection-validation-method="auto-commit" datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" wrap-jdbc-objects="false" res-type="javax.sql.DataSource" name="mysql_dbuser_rootPool">
<property name="URL" value="jdbc:mysql://localhost:3306/ANYDB?zeroDateTimeBehavior=convertToNull"></property>
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="Password" value="THEPASS"></property>
<property name="portNumber" value="3306"></property>
<property name="databaseName" value="ANYDB"></property>
<property name="User" value="THEUSER"></property>
<property name="serverName" value="localhost"></property>
</jdbc-connection-pool>
Надеюсь, что помощь
Можно управлять соединениями JDBC с asadmin
Утилита - графический интерфейс администратора AFAIK - это только внешний вид.
asadmin
использование описано здесь: https://docs.oracle.com/cd/E26576_01/doc.312/e24928/jdbc.htm
Например
asadmin> create-jdbc-connection-pool --datasourceclassname org.apache.derby.jdbc.ClientDataSource \\
--restype javax.sql.XADataSource \\
--property portNumber=1527:password=APP:user=APP:serverName=localhost:databaseName=sun-appserv-samples:connectionAttributes=\;create\\=true \\
sample_derby_pool
Ура,
Если вы используете Oracle, просто отредактируйте файл..glassfish / domains / domain1 / config / domain.xml. Найдите тег ресурсов и добавьте:
<jdbc-connection-pool datasource-classname="oracle.jdbc.pool.OracleConnectionPoolDataSource" name="MyPoolName" res-type="javax.sql.ConnectionPoolDataSource">
<property name="User" value="UserName"></property>
<property name="URL" value="jdbc:oracle:thin:@//localhost:1521/xe"></property>
<property name="Password" value="UserPassword"></property>
</jdbc-connection-pool>
Не забудьте скопировать драйвер jdbc в lib и изменить URL-адрес в соответствии с вашими потребностями. Затем запустите glassfish, перейдите в пулы соединений JDBC и проверьте свое соединение.
Я должен был сделать это в своем назначении и получал ту же ошибку при создании ресурсов JDBC (исключение времени выполнения Java) и пулов соединений JDBC (java.lang.IllegalStateException: getOutputStream() уже был вызван для этого ответа)
Позже я понял, что это ошибочная версия, и наш проф уже сказал нам использовать Glassfish 4.1 ( https://glassfish.java.net/download-archive.html), и все работало нормально. Если вам не нужно использовать 4.1.1. пожалуйста, перейдите на 4.1 вместо.
Ночная сборка содержит исправление! Вы можете скачать ночную сборку из Oracle