Spring EclipseLink NoSQL - 使用MongoDB和Oracle NoSQL DB构建

 2023-09-06 阅读 26 评论 0

摘要:Spring EclipseLink NoSQL - 使用MongoDB和Oracle NoSQL DB构建 我们已经探索了如何实现EclipseLink JPA和众所周知的关系数据库(如MySQL)之间的集成。EclipseLink不仅提供与关系数据库平台的集成,还支持MongoDB和Oracle NoSQL数据库。 下一个版本还将

 

Spring EclipseLink NoSQL - 使用MongoDB和Oracle NoSQL DB构建

 

我们已经探索了如何实现EclipseLink JPA和众所周知的关系数据库(如MySQL)之间的集成。EclipseLink不仅提供与关系数据库平台的集成,还支持MongoDB和Oracle NoSQL数据库。

下一个版本还将使您能够使用:CassandraGoogle Big TableCouchDB作为NoSQL持久性存储。在本教程中,我们将为您提供一个完整的示例,帮助您与MongoDB和Oracle NoSQL数据库进行JPA集成。

目录[ 隐藏 ]

  • 1必备工具
  • 2最终项目结构
  • 3员工映射
  • 4 MongoDB - 持久化上下文
  • 5 OracleNoSQL-持久化上下文
  • 6 EclipseLink - Spring Context Integration
  • 7 Primefaces部署描述符
  • 8个 Primefaces - 面部配置
  • 9春季员工服务
  • 10 Primefaces RegisterEmployee ManagedBean
  • 11 Primefaces注册视图
  • 12 MongoDB演示
  • 13 OracleNoSQL演示
  • 14技术帮助
  • 15个 Maven依赖文件
  • 16总结

必备工具

  • MongoDB安装并运行到您的环境中
  • Oracle NoSQL数据库已安装并运行到您的环境中
  • Apache Tomcat 8
  • JDK 1.7
  • Eclipse Kepler 4.3
  • Maven 2+
  • 春天4
  • Mongo EclipseLink 2.6.0-M3。
  • Oracle NoSQL EclipseLink 2.6.0-M3
  • Mongo Driver 2.6.0-M3。
  • OracleNoSQL驱动程序3.0.5

最终项目结构

Primefaces  -  Eclipselink  -  JPA  - 最终项目结构

员工映射


package com.journaldev.jpa.data;import java.util.Date;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;import org.eclipse.persistence.nosql.annotations.DataFormatType;
import org.eclipse.persistence.nosql.annotations.Field;
import org.eclipse.persistence.nosql.annotations.NoSql;
@Entity
@NoSql(dataFormat=DataFormatType.MAPPED)
public class Employee {@Id@GeneratedValue@Field(name="_id")private String employeeId;@Fieldprivate String employeeName;@Fieldprivate Date employeeHireDate;@Fieldprivate double employeeSalary;public String getEmployeeId() {return employeeId;}public void setEmployeeId(String employeeId) {this.employeeId = employeeId;}public String getEmployeeName() {return employeeName;}public void setEmployeeName(String employeeName) {this.employeeName = employeeName;}public Date getEmployeeHireDate() {return employeeHireDate;}public void setEmployeeHireDate(Date employeeHireDate) {this.employeeHireDate = employeeHireDate;}public double getEmployeeSalary() {return employeeSalary;}public void setEmployeeSalary(double employeeSalary) {this.employeeSalary = employeeSalary;}
}

以下是上述代码的详细说明:

  • 必须使用注释对Employee实体进行@Entity注释。JPA规范要求该注释。
  • 员工标识符必须注明@Id。此属性应映射到默认的_id属性。如果您已消除此类映射,EMPLOYEEID则会在Employee集合中添加一个新  列。_id属性的值由MongoDB和Oracle NoSQL数据库自动生成。
  • 您可以选择使用@Field注释来注释Employee的属性。如果它们被淘汰,eclipselink将自动进行映射。如果您没有在自己的MongoDB或Oracle NoSQL中创建Employee集合,eclipselink将在您后面进行创建过程,它将分别插入您的文档(即员工实例)。
  • 您的实体必须注明@NoSql。此注释将确保持久化的实体不代表关系实体。DataFormat属性指定用于表示存储数据的类型。MongoDB和Oracle NoSQL使用的  Key-BSON格式类似于结构中的映射,因此使用了MAPPED值。

MongoDB - 持久化上下文

要连接NoSQL持久性存储,persistence.xml应定义一个文件。

persistence.xml

 


<persistence xmlns="http://java.sun.com/xml/ns/persistence"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"version="2.0"><persistence-unit name="eclipselink.mongodb.jpa" transaction-type="RESOURCE_LOCAL"><class>com.journaldev.jpa.data.Employee</class><properties><property name="eclipselink.target-database" value="org.eclipse.persistence.nosql.adapters.mongo.MongoPlatform"/><property name="eclipselink.nosql.connection-spec" value="org.eclipse.persistence.nosql.adapters.mongo.MongoConnectionSpec"/><property name="eclipselink.nosql.property.mongo.port" value="27017"/><property name="eclipselink.nosql.property.mongo.host" value="localhost"/><property name="eclipselink.nosql.property.mongo.db" value="JournalDev"/><property name="eclipselink.logging.level" value="FINEST"/></properties></persistence-unit>
</persistence>

以下是上面列出的代码的详细说明:

  • NoSQL持久性单元的配置与JPA持久性单元相同,persistence.xml用于定义持久性单元。
  • eclipselink.nosql.connection-spec将被用于连接NoSQL的持久性存储的EISConnectionSpec类的指定名称。
  • eclipselink.target.database指定的NoSQL平台类。

OracleNoSQL-持久化上下文

persistence.xml

<persistence-unit name="eclipselink.oraclenosql.jpa" transaction-type="RESOURCE_LOCAL"><class>com.journaldev.jpa.data.Employee</class><properties><property name="eclipselink.target-database" value="org.eclipse.persistence.nosql.adapters.nosql.OracleNoSQLPlatform"/><property name="eclipselink.nosql.connection-spec" value="org.eclipse.persistence.nosql.adapters.nosql.OracleNoSQLConnectionSpec"/><property name="eclipselink.nosql.property.nosql.host" value="mohammad-amr-lt:5000"/><property name="eclipselink.nosql.property.nosql.store" value="kvstore"/><property name="eclipselink.logging.level" value="FINEST"/></properties></persistence-unit>

以下是上面列出的代码的详细说明:

  • Oracle NoSQL数据库使您能够在引导时创建自己的存储。如果您已安装Oracle NoSQL数据库,则应执行java -Djava.net.preferIPv4Stack = true -jar lib \ kvstore.jar kvlite以启动Oracle NoSQL数据库。作为执行最后一个命令的结果,您应该注意到  条目。 Created new kvlite store with args:
    -root ./kvroot -store kvstore -host mohammad-amr-lt -port 5000 -admin 5001
  • 请注意使用kvstore持久性单元中使用的  那个。

EclipseLink - Spring Context Integration

Eclipselink可以与Spring Framework无缝集成。这种类型的集成将允许您轻松地获取所需的实体管理器,而无需您参与。

applicationContext.xml


<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"><!-- Enable Spring Annotation Configuration --><context:annotation-config /><!-- Scan for all of Spring components such as Spring Service --><context:component-scan base-package="com.journaldev.spring.service"></context:component-scan><!-- Necessary to get the entity manager injected into the factory bean --><bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> <!-- Entity Manager Factory --><bean id="entityManagerFactory"class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"><property name="persistenceUnitName" value="eclipselink.mongodb.jpa"></property></bean><!--<bean id="entityManagerFactory"class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"><property name="persistenceUnitName" value="eclipselink.oraclenosql.jpa"></property></bean>--><!-- Transaction Manager --><bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"><property name="entityManagerFactory" ref="entityManagerFactory" /></bean><!-- Detect @Transactional --><tx:annotation-driven transaction-manager="transactionManager" />
</beans>

以下是上面列出的代码的详细说明:

  • 一旦服务器启动其侦听器,Spring框架将查找其配置上下文 - 默认情况下为applicationContext.xml。应该在应用程序的部署描述符中定义Spring框架的监听器。请参阅下面的Primefaces Deployment Descriptor部分。
  • MongoDB是一个事务性持久性存储,因此,它需要包括所有Transactional人员以保留您的文档。
  • 这次通过传递持久性单元的名称来配置EntityManagerFactory。与Oracle和MySQL不同,为了创建它的实例,应该传递EclipseJPAVendor实例。
  • 一旦要连接Oracle NoSQL数据库,就使用为Oracle NoSQL定义的给定持久性单元名称。

Primefaces部署描述符

web.xml


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5" metadata-complete="true"><servlet><servlet-name>Faces Servlet</servlet-name><servlet-class>javax.faces.webapp.FacesServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>Faces Servlet</servlet-name><url-pattern>/faces/*</url-pattern></servlet-mapping><servlet-mapping><servlet-name>Faces Servlet</servlet-name><url-pattern>*.xhtml</url-pattern></servlet-mapping><context-param><description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description><param-name>javax.faces.STATE_SAVING_METHOD</param-name><param-value>client</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><listener><listener-class>com.sun.faces.config.ConfigureListener</listener-class></listener>
</web-app>

以下是上面列出的代码的详细说明:

  • 定义ContextLoaderListener是启动Spring框架所必需的。

Primefaces - 面部配置

faces-config.xml


<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"version="2.2">
<application><el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
</application>
</faces-config>

以下是上面列出的代码的详细说明:

 

  • SpringBeanFacesELResolver 将帮助您将Spring bean注入您自己的JSF ManagedBean

春季员工服务


package com.journaldev.spring.service;import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;import com.journaldev.jpa.data.Employee;@Component
public class EmployeeService {@PersistenceContextprivate EntityManager em;public EntityManager getEm() {return em;}public void setEm(EntityManager em) {this.em = em;}@Transactionalpublic void register(Employee emp) {// Save employeethis.em.persist(emp);}}

以下是上面列出的代码的详细说明:

  • 使用@PersistenceContext将注入EntityManager的实例。在Spring上下文中定义的EntityManagerFactory将用于创建EntityManager的实例

Primefaces RegisterEmployee ManagedBean


package com.journaldev.prime.faces.beans;import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;import com.journaldev.jpa.data.Employee;
import com.journaldev.spring.service.EmployeeService;@ManagedBean
@SessionScoped
public class RegisterEmployee {@ManagedProperty("#{employeeService}")private EmployeeService employeeService;private Employee employee = new Employee();public EmployeeService getEmployeeService() {return employeeService;}public void setEmployeeService(EmployeeService employeeService) {this.employeeService = employeeService;}public Employee getEmployee() {return employee;}public void setEmployee(Employee employee) {this.employee = employee;}public String register() {// Calling Business ServiceemployeeService.register(employee);// Add messageFacesContext.getCurrentInstance().addMessage(null,new FacesMessage("The Employee "+this.employee.getEmployeeName()+" Is Registered Successfully"));return "";}
}

Primefaces注册视图

index.xhtml

<html xmlns="http://www.w3.org/1999/xhtml"xmlns:ui="http://java.sun.com/jsf/facelets"xmlns:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"xmlns:p="http://primefaces.org/ui"><h:head><script name="jquery/jquery.js" library="primefaces"></script><title>Register Employee</title></h:head><h:form><p:growl id="messages"></p:growl><p:panelGrid columns="2"><p:outputLabel value="Enter Employee Name:"></p:outputLabel><p:inputText value="#{registerEmployee.employee.employeeName}"></p:inputText><p:outputLabel value="Enter Employee Hire Date:"></p:outputLabel><p:calendar value="#{registerEmployee.employee.employeeHireDate}"></p:calendar><p:outputLabel value="Enter Employee Salary:"></p:outputLabel><p:inputText value="#{registerEmployee.employee.employeeSalary}"></p:inputText></p:panelGrid><p:commandButton value="Register" action="#{registerEmployee.register}" update="messages"></p:commandButton></h:form></html>

MongoDB演示

在下面,您将看到所有屏幕截图,其中说明员工在注册时以及针对Mongo数据库的持久员工文档。

Primefaces员工已注册MongoDB

MongoDB  - 持久员工

  • 我们使用MongoVUE工具显示Mongo数据库集合和记录。
  • 正如我们之前提到的,为所有已定义的集合自动添加_id列。要映射您的集合ID和_id默认值,应使用@Filed(name =“_ id”)注释。如果您没有映射它,将添加一个新列EMPLOYEEID。

OracleNoSQL演示

Primefaces员工注册OracleNoSQL

OracleNoSQL  - 持久员工

技术帮助

安装Oracle NoSQL数据库并启动到您的环境中并非易事。遵循主要步骤,您需要确保帮助您实现这一目标。

  • 下载Oracle NoSQL二进制文件。
  • 解压缩下载的文件。
  • 执行  java -Djava.net.preferIPv4Stack = true -jar lib \ kvstore.jar kvlite以启动数据库。
  • 通过在其VM参数中添加-Djava.net.preferIPv4Stack = true来 配置Apache Tomcat 8  。

Oracle NoSQL  - 终端命令

Apache Tomcat 8  - 调试 -  VM参数

Maven依赖文件

pom.xml


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.journaldev</groupId><artifactId>Primefaces-EclipseLink-Spring-Mongo-Oracle-NoSQL-Sample</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>Primefaces-EclipseLink-Spring-Mongo-Oracle-NoSQL-Sample Maven Webapp</name><url>http://maven.apache.org</url><repositories><repository><id>prime-repo</id><name>PrimeFaces Maven Repository</name><url>http://repository.primefaces.org</url><layout>default</layout></repository><repository><id>oss.sonatype.org</id><name>OSS Sonatype Staging</name><url>https://oss.sonatype.org/content/groups/staging</url></repository></repositories><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><!-- Servlet --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><!-- Faces Implementation --><dependency><groupId>com.sun.faces</groupId><artifactId>jsf-impl</artifactId><version>2.2.4</version></dependency><!-- Faces Library --><dependency><groupId>com.sun.faces</groupId><artifactId>jsf-api</artifactId><version>2.2.4</version></dependency><!-- Primefaces Version 5 --><dependency><groupId>org.primefaces</groupId><artifactId>primefaces</artifactId><version>5.0</version></dependency><!-- JSP Library --><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.3.1</version></dependency><!-- JSTL Library --><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.1.2</version></dependency><!-- MySQL driver connector library --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.31</version></dependency><!-- Spring ORM --><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>4.0.3.RELEASE</version></dependency><!-- Spring Web --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.0.3.RELEASE</version></dependency><!-- Dependencies for Eclipse JPA Persistence API --><dependency><groupId>org.eclipse.persistence</groupId><artifactId>eclipselink</artifactId><version>2.6.0-M3</version></dependency><!-- Dependency for EclipseLink NoSQL Persistence API --><dependency><groupId>org.eclipse.persistence</groupId><artifactId>org.eclipse.persistence.nosql</artifactId><version>2.6.0-M3</version></dependency><!-- MongoDB Driver --><dependency><groupId>org.mongodb</groupId><artifactId>mongo-java-driver</artifactId><version>2.12.3</version></dependency><!-- EclipseLink JPA for OracleNoSQL --><dependency><groupId>org.eclipse.persistence</groupId><artifactId>org.eclipse.persistence.oracle.nosql</artifactId><version>2.6.0-M3</version></dependency><!-- Oracle NoSQL Client Driver --><dependency><groupId>com.oracle.kv</groupId><artifactId>kvclient_3.0.5</artifactId><version>3.0.5</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.6</source><target>1.6</target></configuration></plugin></plugins></build>
</project>

摘要

不仅关系数据库可以与JPA持久层集成。EclipseLink使您能够与两个主要流行的NoSQL供应商无缝集成。本教程使用Mongo和Oracle NoSQL数据库来持久保存员工实体的实例。通过下面的评论为我们做出贡献,并找到要下载的项目源代码。

下载Primefaces Spring EclipseLink NoSQL项目

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/4066.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息