- PVSM.RU - https://www.pvsm.ru -
Не так давно на Хабре был хороший пост [1] посвященный проекту Spring Data-JPA [2].
Проект меня очень впечатлил, т.к. он предлагал хорошо продуманное решение для работы с репозиториями [3].
Собственные наработки на эту тему у нас имелись, однако Spring Data-JPA был намного более элегантным и функциональным решением.
Была одна загвоздка — проекты с которыми я работаю построены с применением Google Guice.
В свое время это был мой осознанный выбор и в целом он до сих пор устраивает как команды проектов, так и заказчиков.
… но концепция репозиториев от Spring Data-JPA была слишком вкусной…
В итоге некоторых размышлений было принято решение создать интеграционный модуль между Spring Data-JPA и подсистемой guice-persist [4] из набора стандартных интеграционных модулей Google Guice.
Архитектура Spring Data-JPA грамотно спроектирована, благодаря чему такая интеграция и стала возможной.
Перечень основных возможностей интеграционного модуля:
Здесь можно выделить три основных шага:
1. Создание вашего варианта Репозитория [10]:
public interface AccountRepository extends JpaRepository<Account, Long>,
EntityManagerProvider {Account findAccountByUuid(String uuid);
@Query("select a from Account a where a.name = :name")
Account findAccountByName(@Param("name") String name);
}
2. Установка интеграционного Guice-модуля:
install(new JpaRepositoryModule("my-persistence-unit") {
protected void configureRepositories() {
bind(AccountRepository.class).toProvider(new JpaRepositoryProvider<AccountRepository>());
}
});
3. Инъекция и использование:
public class AccountService {
@Inject
private AccountRepository accountRepository;public void registerUser(String login, String password) throws RegistrationException{
// ... some checks & etc
accountRepository.save(new Account(login, password));
// ... something else
}public Account findAccount(String login) throws FinderException{
return accountRepository.findAccountByLogin(login);
}
}
Проект доступен всем желающим под лицензией Apache License 2.0:
http://code.google.com/p/guice-repository/ [11]
Документация:
http://code.google.com/p/guice-repository/wiki/DevGuide [12]
Артефакт в центральном Maven-репозитории:
<dependency>
<groupId>com.google.code.guice-repository</groupId>
<artifactId>guice-repository</artifactId>
<version>1.0.0</version>
</dependency>
Живые примеры использования можно посмотреть в исходников JUnit-тестов модуля:
http://code.google.com/p/guice-repository/source/browse/tags/1.0.0/src/test/java/com/google/code/guice/repository/ [13]
Буду рад если проект окажется полезным для кого-то еще :)
Всем спасибо за внимание!
Автор: lampsound
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/java/5243
Ссылки в тексте:
[1] пост: http://habrahabr.ru/post/139421/
[2] Spring Data-JPA: http://www.springsource.org/spring-data/jpa
[3] репозиториями: http://martinfowler.com/eaaCatalog/repository.html
[4] guice-persist: http://code.google.com/p/google-guice/wiki/GuicePersist
[5] спецификации: http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html/
[6] batch-вставок: http://www.objectdb.com/java/jpa/persistence/store#Batch_Store_
[7] здесь: http://code.google.com/p/guice-repository/wiki/BatchStore
[8] здесь: http://code.google.com/p/guice-repository/wiki/AutoBind
[9] здесь: http://code.google.com/p/guice-repository/wiki/ImplementationSpecifics
[10] Репозитория: http://static.springsource.org/spring-data/data-jpa/docs/current/api/org/springframework/data/jpa/repository/JpaRepository.html
[11] http://code.google.com/p/guice-repository/: http://code.google.com/p/guice-repository/
[12] http://code.google.com/p/guice-repository/wiki/DevGuide: http://code.google.com/p/guice-repository/wiki/DevGuide
[13] http://code.google.com/p/guice-repository/source/browse/tags/1.0.0/src/test/java/com/google/code/guice/repository/: http://code.google.com/p/guice-repository/source/browse/tags/1.0.0/src/test/java/com/google/code/guice/repository/
Нажмите здесь для печати.