Опыт использования активных объектов ORM для Java?

Я смотрю на ORM для Java и Active Objects привлек мое внимание. По-видимому, это был вдохновленный ActiveRecord Rails. Основываясь на том, что я прочитал, этот подход, по-видимому, решает множество проблем с существующими Java ORM, обнимая соглашение по конфигурации.

Каким был ваш опыт?

Ответы

Ответ 1

Будьте осторожны, чтобы вы не блуждали по "синдрому серебряной пули"... Я просто слышал, как разработчики говорили "соглашение о конфигурации" и считают, что это замечательно...

Даниэль Спивак - прочный программист, я многому научился в своем блоге, но это довольно простой API. Это означает, что не ожидайте тонны опыта использования продукции, работы в среде с высокой нагрузкой и т.д. Но иногда все, что вам нужно, простое, и хорошо, есть и другие проекты, такие как Databinder, которые интегрируются с активными объектами. (Wicket + Databinder - довольно приятная, легкая веб-среда для Java.)

Но, например, я бы держался подальше от структуры сохранения, если бы я делал много пакетной обработки. В основном, потому что я хочу:

  • Необязательные объекты по умолчанию, которые, естественно, втекают в многопоточную обработку, потому что вы вынуждаете людей "удалять/создавать новые" вместо "обновить" своего рода парадигму, что экономит много дискового пространства во многих БД.
  • Доступ к БД, который рассматривает упрощение ввода-вывода с помощью специализированных команд, таких как COPY

Я решил много проблем с производительностью DB, просто написав прямой код SQL, заменив использование ORM, которое не подходит для задачи.

Ответ 2

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я являюсь основным разработчиком, работающим над проектом под названием ActiveJDBC, который разделяет некоторые цели разработки с помощью ActiveRecord и активно развивается:

http://javalite.io

Ответ 3

Активные объекты находятся в активной разработке на данный момент, отчасти благодаря тому, что Atlassian подхватил Atlassian как вероятный движок персистентности данных плагинов для использования с его пакетом корпоративного программного обеспечения.

Проект "Активные объекты" теперь размещен на http://java.net/projects/activeobjects/pages/Home

Плагин Atlassian, который использует Active Objects, отслеживается https://studio.atlassian.com/browse/AO

В частности, обратите внимание, что Atlassian только начали создавать документацию для библиотеки Active Objects, https://developer.atlassian.com/display/AO/Active+Objects

Хостинг кода переносится на BitBucket, а SCM - из svn в mercurial. Смотрите bitbucket.org/activeobjects/для прогресса на этом фронте.

Ответ 4

Вот цитата из why-another-orm.txt, включенная в ядро ​​ActiveObjects: ActiveObjects разработан с земля должна быть максимально простой в использовании, с минимальным минимумом конфигурации. В отрасли наблюдается тенденция к "конгрессу над конфигурации. "... Фактически, ActiveObjects так сложно быть простым и простым в использовании что некоторые функциональные возможности (такие как распределенные транзакции) был просто опущен. Причиной этого является то, что 99% случаев использования не требуйте таких крайних мер. Если ваш проект требует такого сложное поведение в вашем ORM, вы должны использовать Hibernate. Это как просто как тот. Объекты ActiveObject не предназначены для замены Hibernate. Скорее, его цель - быть более легкой и легкой альтернативой для многих общие сценарии, которые не требуют для всей Hibernate огромной силы. Короче говоря, ActiveObjects пытается сделать разработку базы данных простой и весело снова.

Рассмотрите такие компании, как Atlassian, используя ActiveObjects в JIRA.

Вот пример использования объектов ActiveObject:

Хранилища:

https://maven2-repository.dev.java.net/

Используйте следующие зависимости:

  <dependency>
      <groupId>net.java.dev.activeobjects</groupId>
      <artifactId>activeobjects</artifactId>
      <version>0.8.2</version>
  </dependency>

Создайте следующие файлы:

Entity.java

    import net.java.ao.RawEntity;
    import net.java.ao.schema.AutoIncrement;
    import net.java.ao.schema.NotNull;
    import net.java.ao.schema.PrimaryKey;

    public interface Entity extends RawEntity<Integer>{

        @AutoIncrement
        @NotNull
        @PrimaryKey("id")
        Integer getExportId();
    }      

TestAO.java

    import net.java.ao.Preload;
    import java.sql.Timestamp;

    @Preload
    public interface TestAO extends Entity {

        String getFirstName();
        void setFirstName(String firstName);

        String getLastName();
        void setLastName(String lastName);

        Timestamp getUpdateTimestamp();
        void setUpdateTimestamp(Timestamp updateTimestamp);
    }

Test.java

    EntityManager entityManager = EntityManager("jdbc:mysql://localhost:3306/test","test","test");
    ao.migrate(TestAO.class);
    TestAO testAO = ao.create(TestAO.class);

    testAO.setFirstName("firstName");
    testAO.setLastName("lastName");
    testAO.save();