java - studio - permisos riesgosos android
La aplicación de reproducción muere en estado inactivo, ¿reiniciar en una nueva solicitud? (2)
Estoy usando HikariCp, Hibernate con mi aplicación playframework en java. Después de unos minutos de estado inactivo, parece que la aplicación de reproducción muere, y cuando recibe una nueva solicitud, se inicia de nuevo. En algún momento también he visto un error de persistencia de Db con el mensaje de que SessionFastory no está disponible, lo que creo que es un efecto secundario de este problema. ¿Por qué la aplicación muere en estado inactivo, y puedo configurarla para que no lo haga?
Obtengo los siguientes registros, después de cada nueva solicitud en pocos minutos de tiempo de inactividad:
[info] application - Application shutdown...
[info] application - Stopping HikariCP connection pool...
[info] application - Starting HikariCP connection pool...
Persistence.xml: -
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
<property name="hibernate.logSql" value="true"/>
<property name="hibernate.connection.provider_class" value="com.zaxxer.hikari.hibernate.HikariConnectionProvider"/>
<property name="hibernate.hikari.dataSourceClassName" value="com.impossibl.postgres.jdbc.PGDataSource"/>
</properties>
</persistence-unit>
</persistence>
Aplicación.conf: -
# JPA configuration
# ~~~~~
# You can declare as many Ebean servers as you want.
# By convention, the default server is named `default`
jpa.default=defaultPersistenceUnit
# Assets configuration
# ~~~~~
"assets.cache./public/stylesheets/bootstrap.min.css"="max-age=360000"
# Logger
# ~~~~~
# You can also configure logback (http://logback.qos.ch/), by providing a logger.xml file in the conf directory .
# Root logger:
logger=ERROR
# Logger used by the framework:
logger.play=INFO
# Logger provided to your application:
logger.application=DEBUG
Gracias !
La razón detrás de esto podría ser que las conexiones están cerradas por la base de datos y, por lo tanto, cuando la aplicación intenta consultar esas conexiones, sessionFactory no está disponible y generará una excepción.
He enfrentado problemas similares en el pasado y la única diferencia es que estaba usando el grupo de conexiones c3p0. Así que intente establecer la propiedad connectionTestQuery
y idleTimeout
para su proveedor de conexión.
Su proveedor de conexión a la base de datos cuando está inactivo no hace nada para volver a conectarse, necesitará indicar a su proveedor qué hacer en este caso, por ejemplo:
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
<property name="hibernate.logSql" value="true"/>
<property name="hibernate.connection.provider_class" value="com.zaxxer.hikari.hibernate.HikariConnectionProvider"/>
<property name="hibernate.hikari.dataSourceClassName" value="com.impossibl.postgres.jdbc.PGDataSource"
<property name="hibernate.hikari.timeBetweenEvictionRunsMillis="30000" />
<property name="hibernate.hikari.minEvictableIdleTimeMillis="60000"/>
<property name="hibernate.hikari.removeAbandonedOnBorrow="true" /> <property name="hibernate.hikari.removeAbandonedOnMaintenance="true" />
<property name="hibernate.hikari.maxActive="30" />
<property name="hibernate.hikari.maxIdle="10" />
<property name="hibernate.hikari.maxWait="10000" />
<property name="hibernate.hikari.initialSize="5" />
<property name="hibernate.hikari.validationQuery= "SELECT 1" />
<property name="hibernate.hikari.validationInterval="30000" />
<property name="hibernate.hikari.removeAbandoned="true" />
<property name="hibernate.hikari.removeAbandonedTimeout="60" />
<property name="hibernate.hikari.logAbandoned="true"/>
</properties>
</persistence-unit>
</persistence>
ver este enlace https://github.com/brettwooldridge/HikariCP/wiki/Bad-Behavior:-Handling-Database-Down