¡Hola a todos!
Estoy desarrollando una aplicación con Vaadin y me devuelve el error de "espacio de Perm gen (OutOfMemoryError)".
Utilizo una validación de usuarios con una API, luego una segunda validación con una base de datos Hibernate pero una vez el usuario está logado, al navegar en la web se genera el error. No siempre lo da en el mismo menú, pero tampoco es siempre igual.
A nivel técnico:
- Se utilizan varias PageTable con IndexedContainer. He leído en webs que usan mucho espacio de memoría, es cierto? que utilizáis?
- La base de datos se crea en memoria y sólo tiene dos tablas. Hay algún parámetro de configuración a tener en cuenta?
El method de destroy tiene que ser "close" o hay algun otro más aconsejable?
<!-- Hibernate settings -->
<bean id="dataSource"
class="org.apache.tomcat.dbcp.dbcp.BasicDataSource "
destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.user}" />
<property name="password" value="${jdbc.pass}" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSes sionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="com..........." />
<property name="hibernateProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.a uto}</prop>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.cache.use_query_cache">false</prop>
<prop key="hibernate.transaction.flush_before_completion ">true</prop>
<!-- To show sql output on the screen -->
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<!-- Connection pool C3P0 -->
<prop key="hibernate.c3p0.acquire_increment">2</prop>
<prop key="hibernate.c3p0.min_size">5</prop>
<prop key="hibernate.c3p0.max_size">100</prop>
<prop key="hibernate.c3p0.timeout">20</prop>
<prop key="hibernate.c3p0.max_statements">50</prop>
<prop key="hibernate.c3p0.idle_test_period">60</prop>
</props>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.Hibernat eTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="persistenceExceptionTranslationPostProcessor"
class="org.springframework.dao.annotation.Persiste nceExceptionTranslationPostProcessor"/>
- Se hace una setAuthentication para el primer login y luego se sobreescribe con las authorities de los roles que devuelve la base de datos en el segundo login.
(SecurityContext) VaadinSession.getCurrent(). getSession().getAttribute("SPRING_SECURITY_CONTEXT ");
He probado la opción de configurar la memoria:
-Xmx2048m -Xms1024m -XXemoticonermSize256m -XX: MaxPermSize subrayado 512m pero no funciona (da igual poner 2G u otros). El error se genera igual.
¿Hay alguna otra manera de evitarlo? ¿Alguien se ha encontrado con ello?
¡Gracias de antemano!
Atentamente,
María