Опыт работы с активными объектами ORM для Java? - PullRequest
13 голосов
/ 16 января 2009

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

Какой у вас был опыт с этим?

Ответы [ 4 ]

9 голосов
/ 19 января 2009

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

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

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

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

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

5 голосов
/ 21 января 2011

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

http://javalite.io

4 голосов
/ 09 июня 2011

Active Objects в настоящее время активно разрабатывается, отчасти благодаря тому, что Atlassian был выбран в качестве вероятного механизма сохранения данных подключаемых модулей для использования с его набором корпоративного программного обеспечения.

Проект Active Objects теперь размещен в http://java.net/projects/activeobjects/pages/Home

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

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

Хостинг кода переносится в BitBucket, а SCM из svn в Mercurial. Смотрите bitbucket.org/activeobjects/, чтобы узнать о прогрессе в этом направлении.

1 голос
/ 21 апреля 2014

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

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

Вот пример использования ActiveObjects:

Хранилища:

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();
...