Index: src/main/java/cn/ac/csns/microscope/managed/BL02StatusController.java
===================================================================
--- src/main/java/cn/ac/csns/microscope/managed/BL02StatusController.java	(revision b6a012f8b9db532e83d99e81c17fe18a430dbcec)
+++ src/main/java/cn/ac/csns/microscope/managed/BL02StatusController.java	(revision b6a012f8b9db532e83d99e81c17fe18a430dbcec)
@@ -0,0 +1,98 @@
+package cn.ac.csns.microscope.managed;
+
+import cn.ac.csns.microscope.StatusMapper;
+import cn.ac.csns.microscope.ejb.BL02StatusFacade;
+import cn.ac.csns.microscope.entity.BL02Status;
+import cn.ac.csns.microscope.exception.TransferException;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.annotation.PostConstruct;
+import javax.ejb.EJB;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+import javax.inject.Named;
+import javax.faces.view.ViewScoped;
+
+/**
+ *
+ * @author tangm <a href="mailto:tangm@ihep.ac.cn">Tang Ming</a>
+ */
+@Named
+@ViewScoped
+public class BL02StatusController implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    private List<BL02Status> status;
+    private List<BL02Status> filteredStatus;
+    private Calendar updateTime;
+    private boolean updating;
+    private int updateInterval = 10;
+
+    @EJB
+    BL02StatusFacade facade;
+
+    /**
+     * Creates a new instance of BL02Controller
+     */
+    public BL02StatusController() {
+        status = new ArrayList<>();
+    }
+
+    @PostConstruct
+    private void init() {
+        updateStatus();
+    }
+
+    synchronized public void updateStatus() {
+        if (updating) {
+            return;
+        }
+        updating = true;
+        try {
+            status = facade.findAll();
+            status.sort((p1, p2) -> p2.getRun().compareToIgnoreCase(p1.getRun()));
+            updateTime = Calendar.getInstance();
+        } catch (TransferException ex) {
+            Logger.getLogger(BL02StatusController.class.getName()).log(Level.SEVERE, ex.getLocalizedMessage(), ex);
+            FacesContext.getCurrentInstance()
+                    .addMessage(null,
+                            new FacesMessage(FacesMessage.SEVERITY_ERROR,
+                                    ex.getLocalizedMessage(),
+                                    ex.getLocalizedMessage()));
+        }
+        updating = false;
+    }
+
+    public String getStringStatus(Integer statusId) {
+        return StatusMapper.getStringStatus(statusId);
+    }
+
+    public List<BL02Status> getStatus() {
+        return status;
+    }
+
+    public List<BL02Status> getFilteredStatus() {
+        return filteredStatus;
+    }
+
+    public void setFilteredStatus(List<BL02Status> filteredStatus) {
+        this.filteredStatus = filteredStatus;
+    }
+
+    public Calendar getUpdateTime() {
+        return updateTime;
+    }
+
+    public int getUpdateInterval() {
+        return updateInterval;
+    }
+
+    public void setUpdateInterval(int updateInterval) {
+        this.updateInterval = updateInterval;
+    }
+
+}
Index: src/main/webapp/bl02status.xhtml
===================================================================
--- src/main/webapp/bl02status.xhtml	(revision b6a012f8b9db532e83d99e81c17fe18a430dbcec)
+++ src/main/webapp/bl02status.xhtml	(revision b6a012f8b9db532e83d99e81c17fe18a430dbcec)
@@ -0,0 +1,88 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:h="http://xmlns.jcp.org/jsf/html"
+      xmlns:p="http://primefaces.org/ui"
+      xmlns:f="http://xmlns.jcp.org/jsf/core">
+    <h:head>
+        <f:facet name="first">
+            <meta charset="UTF-8" />
+            <meta name="viewport" content="width=device-width, initial-scale=1" />
+            <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
+            <title>MR Transfer Status</title>
+        </f:facet>
+    </h:head>
+    <h:body>
+        <p:outputPanel style="text-align: center">
+            <h1>MR Data Transfer Status</h1>
+        </p:outputPanel>
+        
+        <p:messages id="global_msg" globalOnly="true" autoUpdate="true"/>
+
+        <h:form>
+            <p:dataTable id="bl02_transfer_status"
+                         value="#{bL02StatusController.status}"
+                         var="current"
+                         filteredValue="#{bL02StatusController.filteredStatus}"                         
+                         paginator="true" reflow="true" rows="30"
+                         rowsPerPageTemplate="10,30,50,100"
+                         resizableColumns="true" liveResize="true"
+                         draggableColumns="true" stickyHeader="true"
+                         style="text-align: center">
+                <f:facet name="header">
+                    <h:outputText value="Status of Runs (total: #{bL02StatusController.status.size()})"/><br/>
+                    <h:outputText value="Updated at: " style="font-size: small"/>
+                    <h:outputText value="#{bL02StatusController.updateTime.time}"
+                                  style="font-size: small">
+                        <f:convertDateTime pattern="YYYY-MM-dd HH:mm:ss"
+                                           timeZone="#{bL02StatusController.updateTime.timeZone}" />                
+                    </h:outputText><p/>
+                    <h:outputText value="Update Interval(min): "
+                                  style="font-size: small"/>
+                    <p:selectOneMenu value="#{bL02StatusController.updateInterval}">
+                        <f:selectItem itemLabel="1" itemValue="1"/>
+                        <f:selectItem itemLabel="5" itemValue="5"/>
+                        <f:selectItem itemLabel="10" itemValue="10"/>
+                        <f:selectItem itemLabel="30" itemValue="30"/>
+                        <f:selectItem itemLabel="60" itemValue="60"/>                        
+                        <p:ajax update="@form" process="@this"/>
+                    </p:selectOneMenu>
+                </f:facet>
+                <p:column headerText="RUN"
+                          filterBy="#{current.run}" filterMatchMode="contains">
+                    <h:outputText value="#{current.run}"/>
+                </p:column>
+                <p:column headerText="Control" filterBy="#{current.ctrl}">
+                    <h:outputText rendered="#{current.ctrl}" class="fa fa-check"/>
+                </p:column>
+                <p:column headerText="Detector" filterBy="#{current.daq}">
+                    <h:outputText rendered="#{current.daq}" class="fa fa-check"/>
+                </p:column>
+                <p:column headerText="Monitor Histogram" filterBy="#{current.monHis}">
+                    <h:outputText rendered="#{current.monHis}" class="fa fa-check"/>
+                </p:column>
+                <p:column headerText="Monitor Event" filterBy="#{current.monEvt}">
+                    <h:outputText rendered="#{current.monEvt}" class="fa fa-check"/>
+                </p:column>
+                <p:column headerText="NeXus" filterBy="#{current.nexus}">
+                    <h:outputText rendered="#{current.nexus}" class="fa fa-check"/>
+                </p:column>
+                <p:column headerText="Begin"
+                          filterBy="#{current.begin}" filterMatchMode="contains">
+                    <h:outputText value="#{current.begin}"/>
+                </p:column>
+                <p:column headerText="End"
+                          filterBy="#{current.end}" filterMatchMode="contains">
+                    <h:outputText value="#{current.end}"/>
+                </p:column>
+                <p:column headerText="Status" filterBy="#{current.stat}">
+                    <h:outputText value="#{bL02StatusController.getStringStatus(current.stat)}"/>
+                </p:column>
+            </p:dataTable>            
+            <p:poll interval="#{bL02StatusController.updateInterval * 60}"
+                    listener="#{bL02StatusController.updateStatus}"
+                    update="bl02_transfer_status"/>
+        </h:form>
+    </h:body>
+</html>
+
Index: src/main/webapp/index.xhtml
===================================================================
--- src/main/webapp/index.xhtml	(revision 6ffaf736b1fcf8cb877c153b64d0328c03cd0709)
+++ src/main/webapp/index.xhtml	(revision b6a012f8b9db532e83d99e81c17fe18a430dbcec)
@@ -20,5 +20,5 @@
                 </f:facet>
                 <h:outputLink value="bl01status.xhtml">SANS</h:outputLink>
-                <p:commandLink value="MR"/>
+                <h:outputLink value="bl02status.xhtml">MR</h:outputLink>
                 <h:outputLink value="bl18status.xhtml">GPPD</h:outputLink>
             </p:panelGrid> 
