Estoy desarrollando una aplicación que usa la base de datos SQLite y la primavera. Tengo problemas cuando varios subprocesos intentan modificar la base de datos - Me aparece un error:spring + SQLite en la aplicación de subprocesos múltiples
'El archivo de base de datos está bloqueado'
que tienen una única fuente de datos configurada:
<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close" lazy-init="true">
<property name="driverClassName" value="org.sqlite.JDBC" />
<property name="url" value="jdbc:sqlite:sample.db" />
<property name="initialSize" value="2" />
<property name="maxActive" value="20" />
<property name="maxIdle" value="5" />
<property name="poolPreparedStatements" value="true" />
</bean>
y en cada hilo tengo una instancia independiente de la JdbcDaoSupport que realiza una inserción a la base de datos:
getJdbcTemplate().update(
"insert into counts values(15)"
);
la función que realiza la actualización de base de datos es Transac tional (he probado todos los niveles de aislamiento, en cada caso recibo el mismo error).
El mismo código funciona bien cuando se usa otra base de datos (MySql).
¿Cómo puedo solucionar esto (sin agregar una sincronización 'manual' en mi código)?
¿Qué tan concurrente espera que sea su aplicación? Recuerde que, por diseño, SQLite está destinado a ser un reemplazo para fopen() y -not- para MySQL. Si necesita un RDBMS que haya sido diseñado para manejar 2PL o MVCC para acceso a datos simultáneos, entonces puede considerar otro RDBMS. MySQL, HSQLDB o Derby tienen soporte real de cliente-servidor. – scottb