SessionListener导致ExceptionInInitializerError

时间:2016-04-25 17:35:35

标签: xpages

我正在尝试实现一个SessionListener,我打算用它来记录活动用户会话(名称/时间),以便我可以随时让经理知道谁都可用。但是,当我添加它时,我看到sessionCreated消息,然后我在服务器控制台上看到 JVM错误。之后没有执行java代码。

  

HTTP JVM:com.ibm.xsp.webapp.FacesServlet $ ExtendedServletException:   java.lang.ExceptionInInitializerError HTTP JVM:错误类型不是   发现:java.lang.ExceptionInInitializerError导入   javax.servlet.http.HttpSessionEvent;

这是我的SessionTracker.java:

import com.ibm.xsp.application.ApplicationEx;
import com.ibm.xsp.application.events.SessionListener;

public class SessionTracker implements SessionListener {

    public void sessionCreated(ApplicationEx arg0, HttpSessionEvent arg1) {
        System.out.println("***session created***");
    }

    public void sessionDestroyed(ApplicationEx arg0, HttpSessionEvent arg1) {
        System.out.println("***session destroyed ***");
    }
}

以下是我在IBM_Technical_Support目录下的xpages_exec * .log中看到的内容。

  

Context Path:/igdmnext/igdm.nsf页面名称:/Services.xsp   java.lang.ExceptionInInitializerError at   java.lang.J9VMInternals.initialize(J9VMInternals.java:221)at   java.lang.J9VMInternals.newInstanceImpl(Native Method)at   java.lang.Class.newInstance(Class.java:1688)at   com.ibm.xsp.util.ManagedBeanUtil.getBean(ManagedBeanUtil.java:61)at   com.ibm.xsp.extlib.component.rest.CustomService.findBeanInstance(CustomService.java:225)     在   com.ibm.xsp.extlib.component.rest.CustomService $ ScriptServiceEngine.renderService(CustomService.java:257)     在   com.ibm.domino.services.HttpServiceEngine.processRequest(HttpServiceEngine.java:170)     在   com.ibm.xsp.extlib.component.rest.UIBaseRestService._processAjaxRequest(UIBaseRestService.java:259)     在   com.ibm.xsp.extlib.component.rest.UIBaseRestService.processAjaxRequest(UIBaseRestService.java:236)     在   com.ibm.xsp.util.AjaxUtilEx.renderAjaxPartialLifecycle(AjaxUtilEx.java:206)     在   com.ibm.xsp.webapp.FacesServletEx.renderAjaxPartial(FacesServletEx.java:249)     在   com.ibm.xsp.webapp.FacesServletEx.serviceAjaxPartialView(FacesServletEx.java:200)     在   com.ibm.xsp.webapp.FacesServletEx.serviceAjaxPartialViewSync(FacesServletEx.java:169)     在   com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:155)     在com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:160)at   com.ibm.xsp.webapp.FacesServletEx.service(FacesServletEx.java:138)at at   com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103)     在   com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:576)     在   com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1335)     在   com.ibm.designer.runtime.domino.adapter.ComponentModule $ AdapterInvoker.invokeServlet(ComponentModule.java:853)     在   com.ibm.designer.runtime.domino.adapter.ComponentModule $ ServletInvoker.doService(ComponentModule.java:796)     在   com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:565)     在   com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1319)     在   com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:662)     在   com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:482)     在   com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:357)     在   com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:313)     在   com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272)   引起:java.lang.NullPointerException at   org.openntf.domino.xsp.session.AbstractXPageSessionFactory.wrapSession(AbstractXPageSessionFactory.java:23)     在   org.openntf.domino.xsp.session.XPageSignerSessionFactory.createSession(XPageSignerSessionFactory.java:18)     在org.openntf.domino.utils.Factory.getSession(Factory.java:952)at    com.hcl.igdm.util.EndUserMap。(EndUserMap.java:46) - >这是我的自定义java类,如果我没有在上面实现SessionTracker ,它可以工作   java.lang.J9VMInternals.initializeImpl(Native Method)at   java.lang.J9VMInternals.initialize(J9VMInternals.java:199)... 27   更

** EndUserMap.java **

package com.hcl.igdm.util;

import java.io.PrintWriter;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.openntf.domino.Database;
import org.openntf.domino.Session;
import org.openntf.domino.View;
import org.openntf.domino.ViewEntry;
import org.openntf.domino.ViewEntryCollection;
import org.openntf.domino.utils.Factory;
import org.openntf.domino.utils.Factory.SessionType;

import com.hcl.igdm.Activity;
import com.hcl.igdm.Phases;
import com.hcl.igdm.Stages;
import com.ibm.commons.util.StringUtil;
import com.ibm.commons.util.io.json.JsonJavaArray;
import com.ibm.commons.util.io.json.JsonJavaObject;
import com.ibm.domino.services.ServiceException;
import com.ibm.domino.services.rest.RestServiceEngine;
import com.ibm.xsp.extlib.component.rest.CustomService;
import com.ibm.xsp.extlib.component.rest.CustomServiceBean;
import com.ibm.xsp.extlib.util.ExtLibUtil;

/**
 * @author agnihotri.a
 * 
 */
public class EndUserMap extends CustomServiceBean implements Serializable {
    private static final long serialVersionUID = 1L;
    private static String requestedType = "";
    static Session session = Factory.getSession(SessionType.NATIVE);
    static Database db = session.getCurrentDatabase();
    static View allView = db.getView("mapAll");

    public static void setRequestedType(String requestType) {
        requestedType = requestType;
    }

    public static String getRequestedType() {
        return requestedType;
    }

    @Override
    public void renderService(CustomService service, RestServiceEngine engine) throws ServiceException {
        HttpServletRequest request = engine.getHttpRequest();
        HttpServletResponse response = engine.getHttpResponse();

        response.setHeader("Content-Type", "application/json; charset=UTF-8");
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        FacesContext faccon = FacesContext.getCurrentInstance();

        /**** read requested type from query string parameters ****/
        String reqType = request.getParameter("type");

        try {
            JsonJavaObject jjo = new JsonJavaObject();
            PrintWriter pw = response.getWriter();
            if (reqType.equalsIgnoreCase("Map") || "".equalsIgnoreCase(reqType)) {
                setRequestedType("Map");
                pw.write(getEndUserMap().toString());

            } else if (reqType.equalsIgnoreCase("Activity")) {
                setRequestedType("Activity");
                request.getParameter("ukey");
                try {
                    jjo = getActivity(request.getParameter("ukey"));
                    // jjo.put("map", getEndUserMap());
                    pw.write(jjo.toString());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else if (reqType.equalsIgnoreCase("Phase")) {
                request.getParameter("ukey");
                try {
                    setRequestedType("Phase");
                    jjo = getPhase(request.getParameter("ukey"));
                    jjo.put("map", getEndUserMap());
                    pw.write(jjo.toString());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else if (reqType.equalsIgnoreCase("Stage")) {
                request.getParameter("ukey");
                try {
                    setRequestedType("Stage");
                    jjo = getStage(request.getParameter("ukey"));
                    // jjo.put("map", getEndUserMap());
                    pw.write(jjo.toString());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            pw.flush();

        } catch (Exception e) {
            e.printStackTrace();
        }
        faccon.responseComplete();

    }

    public static JsonJavaObject getActivity(String ukey) throws Exception {
        Activity activity = new Activity();
        activity.load(ukey);
        JsonJavaObject jjo = new JsonJavaObject();
        if (!isAdmin() && !StringUtil.equalsIgnoreCase((String) activity.getValue("Status"), "Live")) {
            jjo.put("error", "You are not authorized to view this document.");
            return jjo;
        }
        jjo.put("title", activity.getValue("Title"));
        jjo.put("teaser", activity.getValue("Teaser"));
        jjo.put("ukey", activity.getUnid());
        jjo.put("overview", activity.getValue("Overview"));
        jjo.put("inputs", activity.getValue("Inputs"));
        jjo.put("outputs", activity.getValue("Outputs"));
        jjo.put("order", activity.getValue("SortOrder"));
        jjo.put("artefacts", activity.getArtefacts());
        jjo.put("kmlinks", activity.getValue("KMLinks"));
        jjo.put("kmenabled", activity.getValue("KMEnabled"));
        jjo.put("resources", activity.getResources());
        TreeMap<String, ArrayList<String>> mappings = Mappings.loadMyMap(ukey);
        if (!mappings.isEmpty()) {
            if (mappings.containsKey("Substage")) {
                // jjo.put("substage", mappings.get("Substage").get(0));
                jjo.put("substage", getStage(mappings.get("Substage").get(0)));
            } else if (mappings.containsKey("Stage")) {
                // jjo.put("stage", mappings.get("Stage").get(0));
                jjo.put("stage", getStage(mappings.get("Stage").get(0)));
            }
        }
        return jjo;
    }

    public static JsonJavaObject getStage(String ukey) {

        Stages stage = new Stages();
        stage.load(ukey);
        String stageType = (String) stage.getValue("StageType");
        JsonJavaObject jjo = new JsonJavaObject();
        if (!isAdmin() && !StringUtil.equalsIgnoreCase((String) stage.getValue("Status"), "Live")) {
            jjo.put("error", "You are not authorized to view this document.");
            return jjo;
        }
        TreeMap<String, ArrayList<String>> mappings = Mappings.loadMyMap(ukey);

        jjo.put("title", stage.getValue("Title"));
        jjo.put("ukey", stage.getUnid());
        jjo.put("overview", stage.getValue("Overview"));
        jjo.put("order", stage.getValue("Row"));
        jjo.put("type", stageType);
        jjo.put("status", (String) stage.getValue("Status"));

        if (!mappings.isEmpty()) {

            if (mappings.containsKey("Stream")) {
                JsonJavaArray mapStreamJJA = new JsonJavaArray();
                for (String key : mappings.get("Stream")) {
                    try {
                        Map<String, Object> entryMap = allView.getFirstEntryByKey(key).getColumnValuesMap();
                        if ("Live".equalsIgnoreCase((String) entryMap.get("status")) || isAdmin()) {
                            mapStreamJJA.add(entryMap);
                        }

                    } catch (Exception ex) {
                        // do nothing
                    }
                }
                jjo.put("stream", mapStreamJJA);
            } else {
                jjo.put("stream", "");
            }
            /** below mapping check handles substages */
            if (mappings.containsKey("Stage") && !StringUtils.equalsIgnoreCase(stageType, "Stage")) {
                JsonJavaArray mapStreamJJA = new JsonJavaArray();
                JsonJavaArray mapPhaseJJA = new JsonJavaArray();

                // as this is substage ..we'll get phase from parent stage
                for (String key : mappings.get("Stage")) {
                    try {
                        Map<String, Object> entryMap = allView.getFirstEntryByKey(key).getColumnValuesMap();
                        if ("Live".equalsIgnoreCase((String) entryMap.get("status")) || isAdmin()) {
                            mapStreamJJA.add(entryMap);
                            TreeMap<String, ArrayList<String>> stageMap = Mappings.loadMyMap(key);
                            if (!stageMap.isEmpty() && stageMap.containsKey("Phase")) {
                                for (String phase : stageMap.get("Phase")) {
                                    Map<String, Object> entryMapPhase = allView.getFirstEntryByKey(phase).getColumnValuesMap();
                                    if ("Live".equalsIgnoreCase((String) entryMapPhase.get("status")) || isAdmin()) {
                                        mapPhaseJJA.add(entryMapPhase);
                                    }

                                }
                            }
                        }

                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                }
                jjo.put("stage", mapStreamJJA);
                jjo.put("phase", mapPhaseJJA);
            }

            if (mappings.containsKey("Phase") && StringUtils.equalsIgnoreCase(stageType, "Stage")) {
                JsonJavaArray mapPhJJA = new JsonJavaArray();
                for (String key : mappings.get("Phase")) {
                    Map<String, Object> entryMap = allView.getFirstEntryByKey(key).getColumnValuesMap();
                    if ("Live".equalsIgnoreCase((String) entryMap.get("status")) || isAdmin()) {
                        mapPhJJA.add(entryMap);
                    }

                }
                jjo.put("phase", mapPhJJA);
            } else {
                if (!jjo.containsKey("phase")) {
                    jjo.put("phase", "");
                }
            }
            if (mappings.containsKey("Activity")) {
                JsonJavaArray actJJA = new JsonJavaArray();
                for (String key : mappings.get("Activity")) {
                    try {
                        Map<String, Object> entryMap = allView.getFirstEntryByKey(key).getColumnValuesMap();
                        if ("Live".equalsIgnoreCase((String) entryMap.get("status")) || isAdmin()) {
                            actJJA.add(entryMap);
                        }

                    } catch (Exception ex) {
                    }
                }

                jjo.put("child", "Activities");
                jjo.put("activities", actJJA);
            } else if (mappings.containsKey("Substage") && StringUtils.equalsIgnoreCase(stageType, "Stage")) {
                JsonJavaArray ssJJA = new JsonJavaArray();
                for (String key : mappings.get("Substage")) {
                    Map<String, Object> entryMap = allView.getFirstEntryByKey(key).getColumnValuesMap();
                    if ("Live".equalsIgnoreCase((String) entryMap.get("status")) || isAdmin()) {
                        ssJJA.add(entryMap);
                    }
                }
                jjo.put("child", "Substages");
                jjo.put("substages", ssJJA);
            }
        }

        return jjo;
    }

    public static JsonJavaObject getPhase(String ukey) {
        Phases phase = new Phases();
        phase.load(ukey);
        JsonJavaObject jjo = new JsonJavaObject();
        if (!isAdmin() && !StringUtil.equalsIgnoreCase((String) phase.getValue("Status"), "Live")) {
            return null;
        }
        jjo.put("title", phase.getValue("Title"));
        jjo.put("ukey", phase.getUnid());
        jjo.put("status", phase.getValue("Status"));

        jjo.put("overview", phase.getValue("Overview"));
        jjo.put("order", phase.getValue("SortOrder"));
        try {
            jjo.put("artefacts", phase.getArtefacts());
        } catch (Exception e) {
            jjo.put("artefacts", null);
            e.printStackTrace();
        }
        TreeMap<String, ArrayList<String>> mappings = Mappings.loadMyMap(ukey);
        if (!mappings.isEmpty() && mappings.containsKey("Stage")) {
            JsonJavaArray jja = new JsonJavaArray();
            for (String key : mappings.get("Stage")) {
                ViewEntry stage = allView.getFirstEntryByKey(key);
                if (null != stage) {
                    if (isAdmin() || "Live".equalsIgnoreCase((String) stage.getColumnValue("status"))) {
                        Map<String, Object> stg = stage.getColumnValuesMap();
                        TreeMap<String, ArrayList<String>> stgMap = Mappings.loadMyMap(key);
                        if (!stgMap.isEmpty() && stgMap.containsKey("Stream")) {
                            JsonJavaArray stgStreamArr = new JsonJavaArray();
                            for (String stream : stgMap.get("Stream")) {
                                try {
                                    Map<String, Object> entryMap = allView.getFirstEntryByKey(stream).getColumnValuesMap();
                                    if ("Live".equalsIgnoreCase((String) entryMap.get("status")) || isAdmin()) {
                                        stgStreamArr.add(entryMap);
                                    }

                                } catch (Exception ex) {
                                }
                            }
                            stg.put("stream", stgStreamArr);
                        }
                        jja.add(stg);
                    }
                }
            }
            jjo.put("stages", jja);
        }
        return jjo;
    }

    public static JsonJavaObject getEndUserMap() {

        setRequestedType("Map");
        JsonJavaObject endUserMap = new JsonJavaObject();
        try {

            ArrayList<String> docTypes = new ArrayList<String>();
            docTypes.add("Phase");
            docTypes.add("Stream");
            for (String dtype : docTypes) {
                View view = db.getView("map" + dtype);
                JsonJavaArray jja = new JsonJavaArray();
                ViewEntryCollection vec;
                if (isAdmin()) {
                    vec = view.getAllEntries();
                } else {
                    vec = view.getAllEntriesByKey("Live");
                }
                for (ViewEntry ve : vec) {
                    jja.add(ve.getColumnValuesMap());
                }
                endUserMap.put(dtype, jja);

            }

        } catch (Exception e) {
            e.printStackTrace();

        }
        return endUserMap;
    }

    @SuppressWarnings("unchecked")
    public static boolean isAdmin() {

        List<String> roleList = ExtLibUtil.getXspContext().getUser().getRoles();
        if (!roleList.isEmpty() && roleList.contains("[admin]")) {
            return true;
        } else {
            return false;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

  

由org.openntf.domino.xsp.session.AbstractXPageSessionFactory.wrapSession(AbstractXPageSessionFactory.java:23)的org.openntf.domino.xsp.session.XPageSignerSessionFactory.createSession(XPageSignerSessionFactory.java)中的java.lang.NullPointerException引起:18)atg.openntf.domino.utils.Factory.getSession(Factory.java:952)at

似乎在获取签名者会话时遇到错误。

这可能是一个时间问题,因为它在ODA Factory初始化工厂会话之前在不同的ClassLoader中运行。我不确定如何确认,但如果您的错误在服务器启动时的XOTS日志记录之前遇到了日志,那几乎肯定会出现这种情况。

或者,可能特定于找不到签名者。我倾向于使用echo "Passowrd must match <a href='forgot_pass.php?code=".$code."&username=".$hidden_username".'>Try Again</a> " 而不是签名者会话。这是在服务器的身份下运行的,这应该足够高并避免出现多个签名者等问题。