PrimeFaces + EclipseLink / JPA + MongoDB-Integration

In diesem Tutorial wird die Integration von PrimeFaces + JPA + MongoDD erläutert. Wir werden eine Kreisdiagrammanwendung erstellen, die die PrimeFaces-Komponentenbibliothek mit der zusätzlichen Software JPA und MongoDB für den Persistenzmechanismus verwendet. Bevor Sie einen Codeausschnitt schreiben, sollten Sie eine ordnungsgemäße Installation und Konfiguration sowohl für die Datenbank (MongoDB) als auch für die EclipseLink JPA/NOSQL-Persistenzschicht durchführen.

  • Lesen Sie auch: PrimeFaces-Tutorials

Tutorial-Tools

  • Mongo-Datenbank 2.6
  • Eclipselink JPA/NOSQL 2.5.0
  • PrimeFaces 4.0
  • Apache Tomcat Server 7.0.35
  • Windows 7

MongoDB-Installation und -Konfiguration

In unserem vorherigen Artikel haben wir es erklärt So installieren Sie MongoDB unter Windows. Wenn Sie MongoDB nicht installiert haben, folgen Sie bitte diesem Artikel und richten Sie MongoDB in Ihrem System ein

Sehen Sie sich die folgenden Abbildungen an, die Ihnen eine ordnungsgemäß ausgeführte MongoDB und eine offene Verbindung über die Befehlszeile zeigen.

Laufender Mongo

  • Die obige Abbildung zeigt Ihnen das Ergebnis der Ausführung mongod.exe Befehl.

Mongo verbinden

  • Der obige Bildschirm zeigt Ihnen das Ergebnis der Ausführung monog.exe Befehl.

Maven hat die Bibliothek zum Anbinden der MONGODB bereitgestellt, indem es die folgende Abhängigkeit hinzugefügt hat. Fügen Sie den Maven für die Mongo Java Driver-Abhängigkeit hinzu.

Maven für Mongo-Datenbank-Java-Treiber

	<dependency>
		<groupId>org.mongodb</groupId>
		<artifactId>mongo-java-driver</artifactId>
		<version>2.11.4</version>
	</dependency>

EclipseLink JPA/NOSQL-Installation und -Konfiguration

Wir haben zuvor im EclipseLink – JPA-Tutorial die EclipseLink-Bibliothek besprochen, die für die Verbindung zur relationalen Datenbank verantwortlich ist. Für die Anbindung nicht relationaler Datenbanken wie MongoDB – Document Based – müssen Sie jedoch die EclipseLink JPA/NOSQL-Bibliothek in Betracht ziehen.

Für die Installation und Konfiguration dieser Bibliothek sind Maven-Konfigurationen erforderlich. Es lohnt sich daher, einen Blick auf das oben erwähnte EclipseLink-JPA-Tutorial zu werfen, um zu sehen, wie Maven für diesen Zweck verwendet werden kann. In den folgenden Zeilen wird davon ausgegangen, dass Sie mit der Installation und Konfiguration von EclipseLink mit Maven vertraut sind.

Um EclipseLink – JPA/NOSQL zu installieren und zu konfigurieren, müssen Sie die folgenden Schritte ausführen:

  • Fügen Sie die erforderlichen Einträge für EclipseLink – JPA/NOSQL-Maven-Repositorys und -Abhängigkeiten hinzu.
  • Erstellen Sie Ihre Geschäftsdomäne (Klassen).
  • Schreib die persistence.xml mit den erforderlichen Domänenklassen und Eigenschaften für die zu verbindende Datenbank.

Maven EclipseLink – JPA/NoSQL-Repositorys

<repositories>
  <repository>
	<id>oss.sonatype.org</id>
	<name>OSS Sonatype Staging</name>
	<url>https://oss.sonatype.org/content/groups/staging</url>
  </repository>
  <repository>
	<id>EclipseLink</id>
	<url>http://download.eclipse.org/rt/eclipselink/maven.repo</url>
  </repository>
</repositories>

Maven Eclipselink – JPA/NoSQL-Abhängigkeiten

   <dependency>
	<groupId>org.eclipse.persistence</groupId>
	<artifactId>eclipselink</artifactId>
	<version>2.5.0-RC1</version>
		<exclusions>
			<exclusion>
				<groupId>org.eclipse.persistence</groupId>
				<artifactId>commonj.sdo</artifactId>
			</exclusion>
		</exclusions>
	</dependency>
	<dependency>
		<groupId>org.eclipse.persistence</groupId>
		<artifactId>org.eclipse.persistence.nosql</artifactId>
		<version>2.4.2-SNAPSHOT</version>
	</dependency>

Geschäftsbereich

Da dieses Tutorial eine hohe Intensität an Konzepten und Codeausschnitten aufweist, haben wir zum besseren Verständnis eine einfache Geschäftsdomäne eingeführt. Die vorgeschlagene Domäne besteht aus zwei Klassen: „Benutzer“ und „Adresse“. Sie stellen die Domäne dar, in der die Klasse „Benutzer“ eine Zuordnung zur Adresse hat.
Benutzer.java

package net.javabeat.eclipselink.persistence.data;

import javax.persistence.Embedded;
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 User {
	@Id
	@GeneratedValue
	@Field(name="_id")
	private String id;
	@Field(name="USERID")
	private String userId;
	@Field(name="fullName")
	private String fullName;
	@Field(name="AGE")
	private String age;
	@Field(name="STATUS")
	private String status;
	@Embedded
	private Address address = new Address();

	public String getUserId() {
		return userId;
	}
	public void setUserId(String userId) {
		this.userId = userId;
	}

	public String getFullName() {
		return fullName;
	}
	public void setFullName(String fullName) {
		this.fullName = fullName;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public String getStatus() {
		return status;
	}
	public void setStatus(String status) {
		this.status = status;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public Address getAddress() {
		return address;
	}
	public void setAddress(Address address) {
		this.address = address;
	}
}

Adresse.java

package net.javabeat.eclipselink.persistence.data;

import javax.persistence.Embeddable;

import org.eclipse.persistence.nosql.annotations.DataFormatType;
import org.eclipse.persistence.nosql.annotations.Field;
import org.eclipse.persistence.nosql.annotations.NoSql;

@Embeddable
@NoSql(dataFormat=DataFormatType.MAPPED)
public class Address {
	@Field(name="addressId")
	private String addressId = "";
	@Field(name="addressValue")
	private String addressValue = "";

	public String getAddressId() {
		return addressId;
	}
	public void setAddressId(String addressId) {
		this.addressId = addressId;
	}
	public String getAddressValue() {
		return addressValue;
	}
	public void setAddressValue(String addressValue) {
		this.addressValue = addressValue;
	}
}
  • Beachten Sie, dass wir verwenden @NoSql-Anmerkung
  • Anstelle von @Column zum Binden eines Felds an eine Spalte in einer relationalen Datenbank wurde @Field verwendet
  • @Embedded ist eine Persistenzstrategie, die zum Einbetten von Dokumenten in den Textkörper anderer Dokumente verwendet wird

PrimeFaces-Kreisdiagrammkomponente

Die Darstellung von Daten ist eine der größten Herausforderungen für den JSF-Implementierungsanbieter. Diagramme sind eine der Hauptkomponenten der PrimeFaces-Distribution, eine davon ist das Kreisdiagramm. Das Kreisdiagramm zeigt Kategoriedaten in einer Kreisgrafik an.

Hier sind die mit dem PieChart definierten PieChart-Tag-Informationen und -Attribute.

Allgemeine Informationen zu PieChart

Kuchenattribute

Die Aussicht

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>
	</h:head>
	<f:view>
		<h:form prependId="false">
			<h1>JavaBeat Primefaces Example</h1>
			<h2>Primefaces - DataTable - User Registration </h2>
			<h:panelGrid columns="2">
				<h:outputText value="Enter Full Name:"/>
				<p:inputText value="#{registerationBean.user.fullName}"/>
				<h:outputText value="Enter Age:"/>
				<p:inputText value="#{registerationBean.user.age}"/>
				<h:outputText value="Enter Status (Example A, B, C or D):"/>
				<p:inputText value="#{registerationBean.user.status}"/>
				<h:outputText value="Enter Address"/>
				<p:inputText value="#{registerationBean.user.address.addressValue}"/>
			</h:panelGrid>
			<h:panelGrid columns="1">
				<p:pieChart value="#{registerationBean.model}" legendPosition="w"></p:pieChart>
			</h:panelGrid>
			<h:commandButton value="Save User" action="#{registerationBean.saveUser}"/>
			<br/>

		</h:form>
	</f:view>
</html>

Verwaltete Bohne

RegistrationBean.java

package net.javabeat.primefaces.presenation;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

import net.javabeat.eclipselink.persistence.data.User;

import org.primefaces.component.chart.pie.PieChart;
import org.primefaces.model.chart.PieChartModel;

@ManagedBean
@SessionScoped
public class RegisterationBean {
	static EntityManagerFactory factory = null;
	static EntityManager em = null;

	static {
		factory = Persistence.createEntityManagerFactory("mongoPU");
		em = factory.createEntityManager();
	}

	private User user = new User();
	private PieChartModel model = new PieChartModel();

	int aCounter = 0;
	int bCounter = 0;
	int cCounter = 0;
	int dCounter = 0;

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	@SuppressWarnings("unchecked")
	public PieChartModel getModel() {

		// At each rendering of data, a query has made upon mongo data.
		Query query = em.createQuery("SELECT u FROM User u");
		// Fetch the all users
		List<User> users = query.getResultList();
		// Categorize Users
		for(User u : users){
			if(u.getStatus().equals("A")){
				aCounter++;
			}
			if(u.getStatus().equals("B")){
				bCounter++;
			}
			if(u.getStatus().equals("C")){
				cCounter++;
			}
			if(u.getStatus().equals("D")){
				dCounter++;
			}
		}
		this.model = new PieChartModel();
		// Fill the model
		model.set("A", aCounter);
		model.set("B", bCounter);
		model.set("C", cCounter);
		model.set("D", dCounter);
		return model;
	}

	public void setModel(PieChartModel model) {
		this.model = model;
	}

	public String saveUser(){
		em.getTransaction().begin();
		em.persist(user);
		em.getTransaction().commit();
		this.user = new User();
		return "";
	}
}

Persistenzkontext

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence"
				xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
				xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
	<persistence-unit name="mongoPU" transaction-type="RESOURCE_LOCAL">
		<class>net.javabeat.eclipselink.persistence.data.User</class>
		<class>net.javabeat.eclipselink.persistence.data.Address</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="JavaBeat"/>
            <property name="eclipselink.logging.level" value="FINEST"/>
		</properties>
	</persistence-unit>
</persistence>

Primefaces + EclipseLink JPA / NOSQL + MongoDB-Integration

Die folgenden Schnappschüsse zeigen Ihnen die Verwendung von MongoDB zum Speichern der Benutzer und zum erneuten Abrufen zum Zeichnen des Kreisdiagramms. Das Kreisdiagramm wird basierend auf dem Status kategorisiert, der den Wert A, B, C und D hat.

Gleichzeitig eine Suchabfrage db.USER.find() wurde ausgeführt, um sicherzustellen, dass das Kreisdiagramm eine korrekte Abfrage in USER-Sammlungen ausgeführt hat.

Kreisdiagramm, das im Registrierungsformular verwendet wird

  • Der Benutzer „Speichern“ hat die Methode „saveUser“ aufgerufen, was wiederum dazu führt, dass der Speichervorgang fortgesetzt wird.
  • GetModel setzt das Pie-Modell für die nächste Füllung zurück.

Mongo Records

  • Wenn die Datenbank über mongo.exe verbunden ist, hat der Benutzer die Möglichkeit, die Datenbank abzufragen.
  • Der db Das implizite Objekt stellt die verbundene Datenbank dar, die den Wert hat JavaBeat.
  • Mit dem Befehl db.USER.find()hat der Benutzer die Möglichkeit, alle registrierten Benutzer zu sehen.

(wpdm_file id=77)

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen