У меня следующая проблема в приложении REST-сервера (Jersey + ActiveJDBC + Shiro + TomcatJDBC), работающем в Tomcat 8, а база данных - это PostgreSQL, также он работает в VPS.
Иногда после большой / многих операций CRUDчерез приложение REST вставленные данные в базу данных не существуют.
Примечание: я использую вставку в ActiveJDBC, так как у меня есть пользовательский PK и не использую кеш.
Например: через REST, когдаВызывая общее количество данных, он говорит 100, но при проверке базы данных напрямую он говорит 80. Затем, если я перезапущу Tomcat, REST ответит 80, таким образом, данные пропали ...
Я уже отлаживаю все потенциальные ошибки (ПровереноTomcat Log, Postgresql Log и App log, также VPS), но ничего не нашли!Вставленные данные, это как никогда не вставленные.
Данные исчезли случайно, и я не могу их воспроизвести.Таким образом, я не могу исправить ошибку.
( Отредактировано, неправильная ссылка ранее) : Тогда я нашел это Q & A: Hibernate не сохраняет объект в базе данных
Есть ли вероятность, что ActiveJDBC имеет проблему сброса, как описано выше, поскольку, как и в случае с ответами на вопросы выше, это происходит только с PostgreSQL.
Сохранение кода:
try(DB db = new DB()){
db.open(DataSourcePool.getInstance().ds_pooled);
dbModel dbModel = new dbModel();
dbModel.setPojoModel(PojoModel);
CheckRulesCreate(dbModel); //Bussines Rule Check, throw on Fail
if (dbModel.insert())
return Response.status(201).entity(new Outputs("OK",201,"Data saved!")).build();
}
Пул источника данных:
//Singelton Based On Bill Pugh Singeltom Design
import org.apache.tomcat.jdbc.pool.DataSource;
DataSource ds = new DataSource();
ds.setDriverClassName("org.postgresql.Driver");
ds.setUrl("jdbc:postgresql://localhost/database");
ds.setUsername("blahblah");
ds.setPassword("hisshiss");
ds.setInitialSize(10);
ds.setMaxActive(300);
ds.setMinIdle(2);
ds.setValidationQuery("select 1");
ds.setTestOnBorrow(true);
ds.setRemoveAbandoned(true);
ds.setRemoveAbandonedTimeout(60);
ds.setMaxWait(10000);
ds.setName("DataSourcePool");