2012-09-20 127 views
4

我有一个JSF 2.0应用程序部署在Glassfish 3.1.7与JDK 7上。它与MySQL数据库一起工作。对于数据库操作,我使用由NetBeans生成的实体和JPA控制器类。 我用它来处理PostgreSQL的其他应用程序 - 没有问题。glassfish - 与mysql崩溃连接

我的应用程序在白天上午8点到下午4点之间经常使用。一切都很完美。但是,第二天有人试图使用我的应用程序(执行从数据库中读取数据,所以说),我的应用程序崩溃。

我试图在不同的mashine上安装MySQL,并将连接池重新配置为新的数据库,但所有内容都一样。我也尝试添加TcpKeepAlive = true属性到连接池,但没有成功。

请帮帮我。我完全不知道该怎么做。试图做一些谷歌工作,但没有成功。

下面是日志:

|2012-09-20T08:09:41.213+0200|SEVERE|glassfish3.1.2|javax.enterprise.resource.webcontainer.jsf.application|_ThreadID=115;_ThreadName=Thread-2;|Error Rendering View[/system/index.xhtml] 
javax.el.ELException: /system/index.xhtml @96,131 value="#{indexBean.documentNr}": javax.persistence.PersistenceException: Exception [EclipseLink-4019] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException 
Exception Description: Error while obtaining information about the database. Refer to the nested exception for more details. 
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114) 
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) 
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182) 
    at javax.faces.component.UIOutput.getValue(UIOutput.java:169) 
    at org.primefaces.util.ComponentUtils.getValueToRender(ComponentUtils.java:67) 
    at org.primefaces.component.inputtext.InputTextRenderer.encodeMarkup(InputTextRenderer.java:79) 
    at org.primefaces.component.inputtext.InputTextRenderer.encodeEnd(InputTextRenderer.java:50) 
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875) 
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312) 
    at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185) 
    at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129) 
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) 
    at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:57) 
    at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:45) 
    at org.primefaces.component.panel.PanelRenderer.encodeContent(PanelRenderer.java:185) 
    at org.primefaces.component.panel.PanelRenderer.encodeMarkup(PanelRenderer.java:108) 
    at org.primefaces.component.panel.PanelRenderer.encodeEnd(PanelRenderer.java:55) 
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764) 
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:168) 
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1757) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760) 
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402) 
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) 
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288) 
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) 
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1542) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217) 
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) 
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849) 
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746) 
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045) 
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228) 
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 
    at java.lang.Thread.run(Thread.java:722) 

引起:javax.persistence.PersistenceException:异常[的EclipseLink-4019](Eclipse持久服务 - 2.3.2.v20111125-r10461):org.eclipse.persistence .exceptions.DatabaseException 异常说明:获取有关数据库的信息时出错。有关更多详细信息,请参阅嵌套异常。

at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:517) 
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getDatabaseSession(EntityManagerFactoryDelegate.java:188) 
at org.eclipse.persistence.internal.jpa.CacheImpl.evictAll(CacheImpl.java:177) 
at jpa.DokumentJpaController.getEntityManager(DokumentJpaController.java:35) 
at jpa.DokumentJpaController.findAndSortAllDocuments(DokumentJpaController.java:264) 
at web.IndexBean.generateDocumentNr(IndexBean.java:650) 
at web.IndexBean.getDocumentNr(IndexBean.java:240) 
at web.IndexBean$Proxy$_$$_WeldClientProxy.getDocumentNr(IndexBean$Proxy$_$$_WeldClientProxy.java) 
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:601) 
at javax.el.BeanELResolver.getValue(BeanELResolver.java:363) 
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) 
at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) 
at com.sun.el.parser.AstValue.getValue(AstValue.java:138) 
at com.sun.el.parser.AstValue.getValue(AstValue.java:183) 
at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:224) 
at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50) 
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) 
... 59 more 

所致:异常[的EclipseLink-4019](Eclipse持久服务 - 2.3.2.v20111125-r10461):org.eclipse.persistence.exceptions.DatabaseException 异常描述:错误,同时获得关于数据库的信息。有关更多详细信息,请参阅嵌套异常。

at org.eclipse.persistence.exceptions.DatabaseException.errorRetrieveDbMetadataThroughJDBCConnection(DatabaseException.java:361) 
at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:602) 
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:206) 
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:488) 
... 78 more 

产生的原因:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:没有允许连接关闭之后的操作。 在sun.reflect.GeneratedConstructorAccessor454.newInstance(未知来源)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
at com.mysql.jdbc.Util.getInstance(Util.java:386) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1013) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927) 
at com.mysql.jdbc.ConnectionImpl.throwConnectionClosedException(ConnectionImpl.java:1205) 
at com.mysql.jdbc.ConnectionImpl.checkClosed(ConnectionImpl.java:1197) 
at com.mysql.jdbc.ConnectionImpl.getMetaData(ConnectionImpl.java:3061) 
at com.mysql.jdbc.ConnectionImpl.getMetaData(ConnectionImpl.java:3056) 
at com.sun.gjc.spi.base.ConnectionHolder.getMetaData(ConnectionHolder.java:345) 
at com.sun.gjc.spi.jdbc40.ConnectionWrapper40.getMetaData(ConnectionWrapper40.java:114) 
at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:589) 
... 80 more 

引起:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障

的最后一个数据包成功地从所述服务器接收是30 886 849毫秒前。成功发送到服务器的最后一个数据包是0毫秒前。

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116) 
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3102) 
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2991) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3532) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163) 
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624) 
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127) 
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2293) 
at com.sun.gjc.spi.jdbc40.PreparedStatementWrapper40.executeQuery(PreparedStatementWrapper40.java:642) 
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeSelect(DatabaseAccessor.java:931) 
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:607) 
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:535) 
at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:1717) 
at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:566) 
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:207) 
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:193) 
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:264) 
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.selectAllRows(DatasourceCallQueryMechanism.java:646) 
at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRowsFromTable(ExpressionQueryMechanism.java:2611) 
at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRows(ExpressionQueryMechanism.java:2570) 
at org.eclipse.persistence.queries.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:420) 
at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1081) 
at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:844) 
at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1040) 
at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:392) 
at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1128) 
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2871) 
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1516) 
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1498) 
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1463) 
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:485) 
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getResultList(EJBQueryImpl.java:742) 
at jpa.DokumentJpaController.findAndSortAllDocuments(DokumentJpaController.java:267) 
... 74 more 

造成的:java.net.SocketException异常:软件导致连接中止:recv的提前失败

at java.net.SocketInputStream.socketRead0(Native Method) 
at java.net.SocketInputStream.read(SocketInputStream.java:150) 
at java.net.SocketInputStream.read(SocketInputStream.java:121) 
at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:114) 
at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:161) 
at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:189) 
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2549) 
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3002) 
... 106 more 

感谢。 编辑:我忘了提及:首先,MySQL站在其他mashine。现在它在安装glassfish的本地mashine上工作。每天早上都有同样的错误。

+0

对不良的日志格式。我在这里是新的,并有格式化的一些问题:) – greenskin

+0

所以你更新JDBC驱动程序后摆脱了这个错误。我有类似的问题。你现在用的是什么驱动程序? – Zakhar

+1

我正在使用mysql-connector-java-5.1.18。一切似乎都是完美的。现在;) – greenskin

回答

4

看起来连接正在超时或关闭,但无法确定是因为数据库配置设置,网络防火墙还是服务器连接池设置。

http://docs.oracle.com/cd/E26576_01/doc.312/e24936/tuning-glassfish.htm#abehq有关于调整glassfish服务器中连接池设置的信息。具体而言,您可能需要尝试更改空闲超时值,以便池中的连接关闭并重新获得。这将阻止数据库/网络对它们进行计时,并让它们继续坐在服务器池中,尽管无法使用。

如果这个问题对于mysql来说是孤立的,那么您需要检查MySQL文档中是否存在可能导致连接在闲置一段时间后关闭的设置。在stackoverflow上有几个帖子可以解决这个问题。

+0

谢谢。看来,升级jdbc驱动程序更新版本工作。 +1的链接 - 这将是非常有益的。 – greenskin

0

如果这是一个Web应用程序尝试在不同的浏览器上运行它并检查您的输出。我在Opera上遇到了同样的问题,而不是在Chrome上,即它看起来像一个安全问题相关的设置。

对不起,我的英语