NoSQL-базы данных стали основой современной разработки приложений, предлагая масштабируемость и гибкость для работы с различными типами данных. Однако для многих разработчиков Java интеграция с NoSQL-базами данных может быть сложной и затратной по времени. В этом случае приходит на помощь Eclipse JNoSQL, предоставляя безупречный и стандартизированный способ подключения ваших Java-приложений к различным NoSQL-базам данных.
В этой статье рассматривается, как Eclipse JNoSQL 1.1.3 упрощает интеграцию баз данных, повышает производительность разработчика и предлагает гибкость при работе с различными базами данных. Мы также рассмотрим практический пример, используя Quarkus и ArangoDB, чтобы продемонстрировать его возможности.
Почему Java-разработчикам стоит обратить внимание на Eclipse JNoSQL
Для многих разработчиков работа с NoSQL-базами данных включает изучение специфических для базы данных API, что может привести к фрагментированному и не переносимому коду. Eclipse JNoSQL устраняет эти проблемы, предлагая:
- Простоту использования: С помощью интуитивных аннотаций, таких как
@Entity
,@Id
и@Column
, вы можете сопоставить Java-объекты с коллекциями NoSQL за секунды. - Гибкость: Переключайтесь между NoSQL-базами данных (например, Redis, MongoDB, ArangoDB, Oracle NoSQL) без изменения кода вашего приложения.
- Соответствие стандартам: Реализует спецификации Jakarta Data и Jakarta NoSQL, обеспечивая переносимое и будущеподготовленное решение.
- Готовность к интеграции: Безупречно работает с компонентами Jakarta EE и MicroProfile, используя CDI для внедрения зависимостей и управления конфигурацией.
Что нового в Eclipse JNoSQL 1.1.3
Недавно была выпущена версия 1.1.3 Eclipse JNoSQL, внедряющая новые функции, исправления ошибок и улучшения производительности в уже мощной экосистеме. Этот релиз является значительным этапом в упрощении взаимодействия разработчиков Java с NoSQL-базами данных. В этой статье мы рассмотрим цели Eclipse JNoSQL, новые функции, введенные в этой версии, и предоставим практический пример использования с Quarkus и ArangoDB.
Eclipse JNoSQL нацелен на упрощение интеграции Java-приложений с NoSQL-базами данных, предоставляя унифицированный API и архитектуру. Соблюдая спецификации Jakarta EE, JNoSQL дает разработчикам возможность без проблем работать с различными NoSQL-базами данных — будь то базы данных ключ-значение, документов, графов или столбцового типа.
- Взаимодействие: Эта абстракция скрывает специфические для базы данных сложности, облегчая переключение между базами данных, такими как MongoDB, Redis, ArangoDB и Oracle NoSQL.
- Ориентированность на спецификации: Реализует спецификации Jakarta Data и Jakarta NoSQL, предлагая стандартизированный подход к работе с NoSQL-базами данных.
- Интеграция с Java-экосистемой: Использует CDI для внедрения зависимостей и Eclipse MicroProfile для конфигурации, обеспечивая совместимость с современными Java-фреймворками, такими как Quarkus и Spring Boot.
Ограничения и соображения для Eclipse JNoSQL
Хотя Eclipse JNoSQL предоставляет значительные преимущества для интеграции с NoSQL базами данных, важно учитывать несколько недостатков для поддержания сбалансированной перспективы:
- Кривая обучения для новых стандартов: Разработчикам, незнакомым с Jakarta EE или MicroProfile, может потребоваться время для понимания и адаптации к спецификациям и API, используемым в JNoSQL.
- Специфические функции баз данных: Хотя JNoSQL абстрагирует общие операции NoSQL, он может не полностью поддерживать расширенные, специфические для баз данных возможности без дополнительной настройки.
- Сообщество и экосистема: Поскольку это относительно специализированный инструмент, его экосистема и поддержка сообщества меньше, чем у более широких фреймворков Java, таких как Hibernate или Spring Data.
- Настройка производительности: Обобщенные API могут ввести небольшие накладные расходы на производительность по сравнению с родными, специфическими для баз данных библиотеками, особенно для высокопроизводительных приложений.
Понимание этих ограничений помогает разработчикам принимать обоснованные решения и учитывать, где JNoSQL лучше всего подходит для их проектов.
Спецификации Jakarta EE, поддерживаемые Eclipse JNoSQL
Eclipse JNoSQL поддерживает Jakarta Data и Jakarta NoSQL, две ключевые спецификации в экосистеме Jakarta EE.
Jakarta Data
Он предоставляет стандартное API для доступа к данным и их управления, что позволяет разработчикам легко выполнять операции CRUD. Он сосредотачивается на упрощении разбиения на страницы, сортировке и динамических запросах.
Java NoSQL
Он определяет унифицированное API для взаимодействия с NoSQL базами данных. Он предоставляет аннотации, такие как @Entity
, @Id
и @Column
, для сопоставления классов Java с коллекциями NoSQL и упрощения операций с базой данных.
Эти спецификации сокращают шаблонный код и способствуют переносимости между базами данных, что делает их неотъемлемыми для Java-разработчиков.
В последнем выпуске, версии 1.1.3, акцент сделан на улучшении надежности, безопасности и производительности, а также на внедрении интересных новых функций:
- Redis: Расширенная поддержка Redis Sentinel для повышения доступности.
- ArangoDB: Обновления безопасности и управления ключами.
- Oracle NoSQL: Новые параметры учетных данных для лучшей интеграции.
- JNoSQL Lite: Добавлена поддержка записи и улучшения трассируемости.
- Обновления драйверов: Улучшенные драйверы для различных NoSQL баз данных.
- CDI Lite: Теперь он поддерживает Java record
Для демонстрации возможностей Eclipse JNoSQL 1.1.3 мы создадим приложение Quarkus, управляющее “Целями” с использованием ArangoDB. Благодаря спецификациям Jakarta EE, переход на другие NoSQL базы данных, такие как MongoDB или Oracle NoSQL, можно выполнить с минимальными изменениями.
Пошаговая инструкция
Шаг 1: Настройка Quarkus
Запустите ваш проект Quarkus, используя Quarkus Starter UI, выбрав следующие расширения:
- REST
- JSON
- ARC (CDI Lite)
- ArangoDB Driver
Ваш pom.xml
должен включать:
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-jsonb</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-arc</artifactId>
</dependency>
<dependency>
<groupId>io.quarkiverse.jnosql</groupId>
<artifactId>quarkus-jnosql-document-arangodb</artifactId>
<version>3.3.2</version>
</dependency>
<!-- Test dependencies -->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Шаг 2: Реализация подключения к базе данных
Установите подключение к базе данных в файле application.properties
:
jnosql.arangodb.host=localhost:8529
jnosql.document.database=goals
jnosql.keyvalue.database=goals
Запустите локальный экземпляр ArangoDB с использованием Docker:
docker run -e ARANGO_NO_AUTH=1 -d --name arangodb-instance -p 8529:8529 -d arangodb/arangodb
Создайте базу данных с именем goals
и коллекцию Goal
в веб-интерфейсе ArangoDB.
Шаг 3: Моделирование ваших данных
Используйте функцию записи Java с CDI Lite:
import jakarta.json.bind.annotation.JsonbProperty;
import jakarta.json.bind.annotation.JsonbPropertyOrder;
import jakarta.nosql.Column;
import jakarta.nosql.Entity;
import jakarta.nosql.Id;
import java.util.List;
"id", "title", "description", "priority", "tasks"}) ({
public record Goal(
"id") String id, (
"title") String title, (
"description") String description, (
"priority") int priority, (
"tasks") List<String> tasks) {} (
Шаг 4: Настройка репозитория
Определите репозиторий с использованием Jakarta Data:
public interface NewYearWishes extends BasicRepository<Goal, String> {}
Шаг 5: Реализация уровня сервиса
Создайте уровень сервиса для управления бизнес-логикой:
public class GoalService {
private final NewYearWishes newYearWishes;
public GoalService( (DatabaseType.DOCUMENT) NewYearWishes newYearWishes) {
this.newYearWishes = newYearWishes;
}
public List<Goal> findGoals(int page, int size) {
PageRequest pageRequest = PageRequest.ofPage(page).size(size);
return newYearWishes.findAll(pageRequest, Order.by(Sort.asc("priority"))).content();
}
public Goal save(Goal goal) {
return newYearWishes.save(goal);
}
public Optional<Goal> findById(String id) {
return newYearWishes.findById(id);
}
}
Шаг 6: Создание REST-точек доступа
Определите ресурс REST:
"/goals") (
MediaType.APPLICATION_JSON) (
MediaType.APPLICATION_JSON) (
public class GoalResource {
private final GoalService goalService;
public GoalResource(GoalService goalService) {
this.goalService = goalService;
}
public List<Goal> goals( ("page") int page, ("size") int size) {
return goalService.findGoals(page, size);
}
public Goal create(Goal goal) {
return goalService.save(goal);
}
"{id}") (
public Goal findById( ("id") String id) {
return goalService.findById(id).orElseThrow(() -> new WebApplicationException("Goal not found", 404));
}
}
Шаг 7: Тестирование приложения
Вот как протестировать ваше приложение с помощью curl
:
curl -X POST -H "Content-Type: application/json" \
-d '{
"title": "Learn JNoSQL",
"description": "Master NoSQL with JNoSQL",
"priority": 1,
"tasks": ["Read documentation", "Write sample code"]
}' \
http://localhost:8080/goals
curl -X POST -H "Content-Type: application/json" \
-d '{
"title": "Get Fit",
"description": "Adopt a healthier lifestyle",
"priority": 2,
"tasks": ["Exercise daily", "Eat balanced meals", "Stay hydrated"]
}' \
http://localhost:8080/goals
curl -X POST -H "Content-Type: application/json" \
-d '{
"title": "Learn Quarkus",
"description": "Explore Quarkus framework features",
"priority": 3,
"tasks": ["Set up Quarkus", "Create REST endpoints", "Integrate JNoSQL"]
}' \
http://localhost:8080/goals
Список целей:
curl http://localhost:8080/goals?page=1&size=10
Заключение
Eclipse JNoSQL 1.1.3 демонстрирует свою приверженность созданию безупречной работы с базами данных NoSQL для разработчиков Java. Улучшенные функции и возможности интеграции дают разработчикам возможность создавать гибкие и масштабируемые приложения. Для получения дополнительной информации ознакомьтесь с полным примером на GitHub.
Source:
https://dzone.com/articles/nosql-database-integration-in-java-with-eclipse-jnosql-1-1-3