ActiveJDBC имеет флеш? - PullRequest
       23

ActiveJDBC имеет флеш?

0 голосов
/ 25 мая 2018

У меня следующая проблема в приложении 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");

1 Ответ

0 голосов
/ 25 мая 2018

ActiveJDBC не такой.Если у вас возникла такая проблема, скорее всего, у вас есть ошибка в вашем коде.

В любом случае ActiveJDBC представляет собой сквозную инфраструктуру : в момент, когда вы вызываете любой из методов CRUD, платформа вызывает базовый JDBC.Исключением являются Пакетные операции , но это будет сделано намеренно.

Если ваше приложение работало в течение года и не имело проблем, а теперь у вас есть проблемы, вам нужно посмотреть, что изменилось.

...