實踐背景:在wildfly中使用hibernate-ogm框架操做mongodb數據庫html
條件: java
(轉載請註明來源:cnblogs coder-fang)web
步驟:sql
<datasource jta="true" jndi-name="java:/ExampleDS" pool-name="ExampleDS" enabled="true" use-ccm="true"> <connection-url>null</connection-url> <driver-class>org.h2.Driver</driver-class> <driver>h2</driver> <security> <user-name>sa</user-name> <password>sa</password> </security> </datasource>
<default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:/ExampleDS" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>
注:此時便可啓動服務,服務已支持hibernate-ogm模塊.mongodb
package com.sj.mrics.db.model;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.annotations.Type;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.sj.mrics.util.JsonDateSerializer;
@Entity
@Table(name = "weblog")
public class WebLog implements Serializable{
/**
* weblog即爲數據庫中的collection名稱
*/
private static final long serialVersionUID = -914369413813954644L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Type(type = "objectid")
private String id;
private String msg;
private String level;
@JsonSerialize(using=JsonDateSerializer.class)
private Date uptime;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
@Temporal(TemporalType.TIMESTAMP)
public Date getUptime() {
return uptime;
}
public void setUptime(Date uptime) {
this.uptime = uptime;
}
}
<dependency> <groupId>org.hibernate.ogm</groupId> <artifactId>hibernate-ogm-core</artifactId> <version>5.0.0.Final</version> <exclusions> <exclusion> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> </exclusion> </exclusions> </dependency>
<persistence-unit name="mongo-log" transaction-type="JTA"> <!-- Hibernate OGM provider --> <provider>org.hibernate.ogm.jpa.HibernateOgmPersistence</provider> <class>com.sj.mrics.db.model.WebLog</class> <properties> <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" />
<!-- 此處能夠填寫任何hibernate-ogm支持的Nosql數據庫 -->
<property name="hibernate.ogm.datastore.provider" value="mongodb" /> <property name="hibernate.ogm.datastore.database" value="logdb"/> <property name="hibernate.ogm.datastore.host" value="192.168.50.123"/> </properties> </persistence-unit>
package com.sj.mrics.das; import java.util.List; import javax.ejb.Remote; import javax.ejb.Stateless; import javax.persistence.Query; import com.sj.mrics.dasinterface.QueryResult; import com.sj.mrics.dasinterface.WebLogManagerRemote; import com.sj.mrics.db.model.WebLog; import com.sj.mrics.util.MsgException; @Stateless @Remote public class WebLogManager implements WebLogManagerRemote { @PersistenceContext(unitName="mongo-log") protected EntityManager em; @SuppressWarnings("unchecked") @Override public QueryResult<WebLog> listWebLog(int start, int max) { // TODO Auto-generated method stub QueryResult<WebLog> result = new QueryResult<>(); result.setTotalRow((long) 0); try { Query q = em.createQuery( "FROM WebLog w order by w.uptime desc", WebLog.class ); if (start >= 0) { q = q.setFirstResult(start); } if (max > 0) { q = q.setMaxResults(max); } List<WebLog> logs = q.getResultList(); result.setList(logs); result.setTotalRow((long) logs.size()); em.flush(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } return result; } @Override public void save(WebLog arg0) throws MsgException { // TODO Auto-generated method stub try { em.persist(arg0); } catch (Exception e) { // TODO: handle exception logger.error(e.getMessage()); throw new MsgException("save failed"); } } }
Dependencies: org.hibernate.ogm:5.0 services,org.hibernate.ogm.mongodb:5.0 services
9.將此ejb部署到wildfly10中。數據庫
10. 調用ejb,代碼以下:框架
QueryResult<WebLog> weblogs getWebLogManager().listWebLog(0, 10);
親測可返回代碼與插入數據。less