Glassfish 管理控制台在创建 JDBC 池时抛出 java.lang.IllegalStateException
Posted
技术标签:
【中文标题】Glassfish 管理控制台在创建 JDBC 池时抛出 java.lang.IllegalStateException【英文标题】:Glassfish Admin Console throws java.lang.IllegalStateException when creating JDBC Pool 【发布时间】:2016-01-08 00:03:46 【问题描述】:一周前,我下载了 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。
我终于在我的 domain.xml 中找到了实际问题:
-Dorg.glassfish.web.rfc2109_cookie_names_enforced=false
asupgrade 创建的 domain.xml 中缺少。我刚刚将它添加到 domain.xml jvm-options 中,GF v3 现在可以按预期工作。 补充:<jvm-options>-Dorg.glassfish.web.rfc2109_cookie_names_enforced=false</jvm-options>
试过了。没用。 (我粘贴了 GF 日志条目以显示推荐的行已添加到启动时使用的 domain.xml GF。)
我尝试从旧的 v3 服务器中挖掘出 domain.xml 并在新的 v4 中使用它。那没有用。
涉及我的异常消息的其他问题都与使用已部署的应用程序获取它有关——主要是 servlet。但这是一个干净的服务器。未安装任何应用程序。
我发现很多链接都指向在这个异常上工作的人作为一个 GF 错误。大多数是不久前的。没有人给出解决方法,甚至说他们曾经解决过它。
谁能提供解决方案? 或者让我知道这是否只是 Oracle 决定不修复的错误? 或者知道我在哪里可以找到帮助?这可要了我的命。
如果有帮助,这里是用于干净启动的 GF 日志(在 domain.xml 中插入 jvm。)它还显示了尝试创建 JDBC 连接池失败的堆栈跟踪。
注意:我提取了所有 [INFO] 日志条目。剩下的 [WARNING] 条目似乎都与 Grizzly 有关。
[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)
]]
【问题讨论】:
也遇到过。恐怕这仍然是未解决的问题:java.net/jira/browse/GLASSFISH-21353。由于 Oracle 放弃了对 Glassfish 的商业支持,这些事情是可以预料的,但这是一个如此基本的功能,让我非常失望。 【参考方案1】:根据以下 JIRA 票证:
Cannot Create JDBC Resource or Connection Pool in Admin Console Cannot create JDBC Connection Pool这仍然是一个未解决的问题。尽管我们可以从Oracle abandoned a commercial support for Glassfish 开始期待这样的事情,但这样的基本功能不起作用仍然很可怕。
但是,如果您真的很绝望,有一个非常讨厌的解决方法。 Glassfish 附带一个预定义的 JDBC 池 DerbyPool,除非您正在处理 Java DB,否则您可能不需要它。通过将 Datasource 类名更改为 com.mysql.jdbc.jdbc2.optional.MysqlDataSource
并调整其他属性以指向 MySQL 服务器实例,随意对其进行编辑。在进行此 hack 之前,请确保将 MySQL 连接器放入 Glassfish 的 lib 文件夹。
更新
刚刚注意到有一个Glassfish版本已经打了补丁,它叫做Payara,可以下载here。根据文档,它是 GlassFish 4.1 的克隆,由社区修补和进一步开发。
【讨论】:
这可能很讨厌,但对我来说似乎很优雅。不幸的是,我还需要一个 JMS 连接工厂(我认为您的建议也解决了这个问题,因为有一个 jms/_defaultConnectionFactory)。但是...然后我需要一个没有配置任何内容的 JMS 目标资源,并使用管理控制台创建一个抛出类 java.lang.RuntimeException。因此,如果问题是使用带有 JMS 的 GF 4,它仍然没有解决。 @George 在第二张 JIRA 票下有一条评论,“请注意,不仅 JDBC 连接池损坏,由于这个问题,我们无法创建以下任何资源..”。不幸的是,这似乎是一个非常严重的问题。 @George 我很难说,因为我在 Glassfish 度过了很多美好的岁月,但是您是否考虑过切换到例如野蝇?天知道什么时候能修好。看看票下的这条评论:“我很抱歉没有早点回复(忙于学校项目和期末考试..”?! 我超负荷了,但这里有一个更新:我破坏了 v4.1。正在通过以前的版本进行工作,因为我知道曾经有一个版本有效。如果 4.0 失败,我接下来会尝试 Payara。回复:WildFly 我很累,但我不是服务员。我 95% 的需求是对客户端 Java GUI 进行原型设计。所需要的只是与服务器数据库之间的基本 JMS 消息传递。所以我喜欢 GF 的管理控制台。并且喜欢能够自动部署“.ear”包。被 WildFly 对 XML 的需求吓到了。也许有一天真的很绝望(还有 WildFly 培训课程吗?) @George Try Payara - 它是 GF 4.1,修复了大部分错误。我还废弃了 v4.1,并继续使用 Payara 成功。【参考方案2】:有同样的问题,这肯定会让我选择其他应用服务器,为什么不选择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>
希望有所帮助
【讨论】:
感谢大家。但我接受了最后一个建议。搬到 WildFly。我喜欢 Glassfish 的方法。 Wildfly 非常不友好。但不得不放弃。我需要 JMS ......而且我讨厌“解决方法。PS:我在途中尝试了 Payara。我认为它比 Glassfish 更好,但在那里也找不到帮助。我猜太年轻了。 @George 我想您可以将此标记为已接受的答案,因为它适用于您的问题。【参考方案3】:如果您使用的是 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>
不要忘记复制 lib 中的 jdbc 驱动程序,并将 URL 更改为您的需要。接下来启动 glassfish,转到 JDBC 连接池并测试您的连接。
【讨论】:
F***,感谢您的帮助,但我为时已晚。我接受了之前的建议,转而使用 Wildfly,而且没有回头路了。希望它可以帮助其他人。圣诞快乐 另外,您可以通过 cli 使用:asadmin create-jdbc-connection-pool --datasourceclassname oracle.jdbc.pool.OracleDataSource --restype javax.sql.DataSource --property user=myuser:password=mypassword:url="jdbc\:oracle\:thin\:@myserverip\:1521\:myschema" myConnectionPool
并创建资源 asadmin create-jdbc-resource --connectionpoolid myConnectionPool jdbc/myJdbcResourceName
【参考方案4】:
可以使用asadmin
实用程序管理 JDBC 连接 - AFAIK 管理 GUI 只是它的前端。
asadmin
的用法如下所述:
https://docs.oracle.com/cd/E26576_01/doc.312/e24928/jdbc.htm#GSADG00420
例如
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
干杯,
【讨论】:
这是一个对我有用的示例:asadmin create-jdbc-connection-pool --datasourceclassname oracle.jdbc.pool.OracleDataSource --restype javax.sql.DataSource --property portNumber=1521: password=supergeheim:user=onlineshop_user:serverName=localhost Onlineshop //这些值并不重要,因为如果您编辑数据源,管理控制台中没有异常。【参考方案5】:每晚构建包含修复!您可以从 Oracle 下载每晚构建
【讨论】:
你能提供链接吗?这对你有用吗?【参考方案6】:我必须在作业中执行此操作,并且在创建 JDBC 资源(Java 运行时异常)和 JDBC 连接池(java.lang.IllegalStateException: getOutputStream() 已为此响应调用)时遇到相同的错误
我后来意识到这是一个错误的版本,我们的教授已经告诉我们使用 Glassfish 4.1 (https://glassfish.java.net/download-archive.html),一切正常。 如果您不必使用 4.1.1。请改用 4.1。
【讨论】:
【参考方案7】:我刚刚从 4.1.1 回滚到 4.1.0 - 工作正常。 GlassFish 的真正疯狂的错误 :(
【讨论】:
这是最好的答案【参考方案8】:这是GlassFish 4.1.1
中的一个错误,正如兄弟们所提到的,但它已在GlassFish 4.1.2
中解决,因此您可以简单地下载到它here,更多信息请转到here
【讨论】:
我会说这是最好的答案和最正确的解决方案。只需更新您的 GlassFish。就我而言,它有所帮助(4.1.1 -> 4.1.2)。以上是关于Glassfish 管理控制台在创建 JDBC 池时抛出 java.lang.IllegalStateException的主要内容,如果未能解决你的问题,请参考以下文章
在 GlassFish v4.1.1 中创建 jdbc 连接池 [重复]