Опыт использования активных объектов 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();