J2EE之wildfly 實踐8 -- 集成NoSql(mongodb)

實踐背景:在wildfly中使用hibernate-ogm框架操做mongodb數據庫html

條件:  java

  • hibernate-ogm-wildfly10-module.zip:https://pan.baidu.com/s/1kVE1Rvh 密碼:d2hl
  • 安裝mongodb數據庫,網上自搜索教程。

 (轉載請註明來源:cnblogs coder-fang)web

步驟:sql

  1.   將hibernate-ogm-wildfly10-module.zip解壓到 WILDFLY10_HOME/modules中,產生WILDFLY10_HOME/modules/org文件夾。
  2.   添加一個ExampleDS數據源,可隨意建立,修改standalone.xml,在datasources節點下建立,代碼以下:
    <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>

     

  3.    修改默認綁定的數據源爲ExampleDS,即在standalone.xml中的<subsystem xmlns="urn:jboss:domain:ee:4.0">節點下修改代碼:
    <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

  4. 建立實體類,代碼以下:
    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;
        }
    }
    View Code

     

  5. pom.xml引入hibernate-ogm,代碼以下:
    <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>

     

  6. 建立數據庫訪問的ejb代碼,引用工程 wildfly 實踐3 --DAS服務開發  ,在persistence.xml中增長一個unit代碼以下:
    <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>

     

  7. 建立 訪問數據庫的ejb,代碼以下:
    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");
            }
        }
    
    }
    View Code

     

  8. 打包部署jar時,須要將 manifest.mf加上屬性,代碼以下:
    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

相關文章
相關標籤/搜索