Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
xpages java多线程说明上下文未初始化错误_Java_Multithreading_Xpages - Fatal编程技术网

xpages java多线程说明上下文未初始化错误

xpages java多线程说明上下文未初始化错误,java,multithreading,xpages,Java,Multithreading,Xpages,我正在尝试编写一些Java代码,这些代码将通过线程读取视图。我使用的是Callable而不是Runnable,如果我将其作为远程应用程序运行,也就是说,使用NCSO.jar使用Java CORBA/DIIOP方式连接到Domino,它就可以正常工作。 现在,当我试图将相同的代码移动到我的数据库时,我遇到了多个错误。最新的是 HTTP JVM:java.util.concurrent.ExecutionException:java.lang.IllegalStateException:NotesC

我正在尝试编写一些Java代码,这些代码将通过线程读取视图。我使用的是Callable而不是Runnable,如果我将其作为远程应用程序运行,也就是说,使用NCSO.jar使用Java CORBA/DIIOP方式连接到Domino,它就可以正常工作。 现在,当我试图将相同的代码移动到我的数据库时,我遇到了多个错误。最新的是 HTTP JVM:java.util.concurrent.ExecutionException:java.lang.IllegalStateException:NotesContext未为线程初始化。这是我的密码。AccessRequests(后面的类)是主AccessRequestsViewNav类的工作程序。我正在以1000个条目为单位阅读视图,所以我正在动态创建线程池和线程。当我从eclipse将其作为外部应用程序运行时,这是有效的代码,但当我在NSF文件中实现相同的代码时,则不是。 这是NSF中的代码 AccessRequestsViewNav.java

package com.company.apse.admin;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

import lotus.domino.Database;
import lotus.domino.Session;
import lotus.domino.View;
import lotus.domino.ViewNavigator;
import com.ibm.commons.util.io.json.*;
import com.ibm.xsp.extlib.util.ExtLibUtil;
import com.ibm.domino.xsp.module.nsf.NSFComponentModule;
import com.ibm.domino.xsp.module.nsf.NotesContext;
import com.ibm.domino.xsp.module.nsf.SessionCloner;

public class AccessRequestsViewNav {

    static JsonJavaObject jso = new JsonJavaObject();
    static JsonJavaArray jsarr = new JsonJavaArray();
    static SessionCloner sessionCloner;
    static NSFComponentModule module;

    public static String mainly() {

        Session s = null;
        Database database = null;
        View accReqView = null;
        int threadCount = 0;

        Date sdate = new Date();
        try {

            /**
             * we need handle current user session to compute common name in
             * user names field
             */
            s = ExtLibUtil.getCurrentSession();

            module = NotesContext.getCurrent().getModule();
            sessionCloner = SessionCloner.getSessionCloner();

            database = ExtLibUtil.getCurrentDatabase();
            accReqView = database.getView("MyView");

            accReqView.setAutoUpdate(false);

            threadCount = accReqView.getEntryCount();
            if (threadCount % 1000 > 0) {
                threadCount = threadCount / 1000 + 1;
            } else {
                threadCount = threadCount / 1000;
            }
            System.out.println(threadCount);
            ViewNavigator nav = accReqView.createViewNav();
            nav.setBufferMaxEntries(400);

            jso.putArray("data", jsarr);

            // Get ExecutorService from Executors utility class, thread pool
            // size is decided based on viewentries ..one thread is supposed to
            // handle 1000 entries

            System.out.println("Creating executor service");
            //ExecutorService executor = Executors.newFixedThreadPool(threadCount);
            ExecutorService executor = Executors.newFixedThreadPool(5);

            // create a list to hold the Future object associated with Callable
            System.out.println("Creating list to hold future job");
            List<Future<JsonJavaArray>> list = new ArrayList<Future<JsonJavaArray>>(threadCount);

            for (int i = 0; i < threadCount; i++) {

                System.out.println("Adding jobs to the list : " + i);
                // submit Callable tasks to be executed by thread pool
                Future<JsonJavaArray> future = executor.submit(new AccessRequests(module, sessionCloner, nav, 1 + i * 1000, 1000));

                // add Future to the list, we can get return value using Future
                list.add(future);
            }

            for (Future<JsonJavaArray> fut : list) {

                try {
                    jsarr.add(fut.get());
                } catch (InterruptedException e) {
                    System.out.println("Interrupt Exception : " + e.toString());
                    e.printStackTrace();
                } catch (ExecutionException e) {
                    System.out.println("Executor Exception : " + e.toString());
                    System.out.println("");
                    e.printStackTrace();
                }
            }
            // shut down the executor service now
            System.out.println("Seems like processing is done.. shutdown executor");
            executor.shutdown();
            nav.recycle();
            accReqView.recycle();
            database.recycle();
            s.recycle();
            Date edate = new Date();
            System.out.println(jso.size());
            System.out.println("Finished .... finally ... Start: " + sdate + "    Finish: " + edate);
            jso.putJsonProperty("error", false);
        } catch (Exception ex) {
            // tbd: handle exception
            jso.putJsonProperty("error", true);
            jso.putJsonProperty("errorMessage", ex.toString());
            ex.printStackTrace();
            System.out.println(ex.getStackTrace().toString());
        } finally {
            jsarr = null;
        }
        return jso.toString();
    }
}

**this is worker class**
**AccessRequests.java**


    package com.company.apse.admin;

    import java.util.concurrent.Callable;
    import java.util.Date;
    import java.util.Vector;
    import lotus.domino.*;
    import com.ibm.commons.util.io.json.*;
    import com.ibm.domino.xsp.module.nsf.NSFComponentModule;
    import com.ibm.domino.xsp.module.nsf.NotesContext;
    import com.ibm.domino.xsp.module.nsf.SessionCloner;

    public class AccessRequests implements Callable<JsonJavaArray> {
        private ViewNavigator nav;
        private int start;
        private int ecount;
        private SessionCloner sessionCloner;
        private NSFComponentModule module;
        Session session = null;
        static JsonJavaArray jsarr = new JsonJavaArray();

        public AccessRequests(NSFComponentModule module1, SessionCloner sc1, ViewNavigator nav1, int start1, int ecount1) {
            this.sessionCloner = sc1;
            this.module = module1;
            this.nav = nav1;
            this.start = start1;
            this.ecount = ecount1;
        }

        @SuppressWarnings("unchecked")
        public JsonJavaArray call() throws Exception {
            System.out.println("Start : " + start);

            Date sdate = new Date();

            try {
                NotesContext context = new NotesContext(this.module);
                NotesContext.initThread(context);
                Session session = this.sessionCloner.getSession();
                Database db = session.getCurrentDatabase();
                System.out.println(db.getTitle());

                View view = db.getView("myView");
                ViewNavigator nv = view.createViewNav();
                nv.setBufferMaxEntries(400);

                ViewEntry ve = nv.getNth(start);
                int count = 1;
                while (null != ve && count <= ecount) {
                    Vector v = ve.getColumnValues();
                    JsonJavaObject curObj = new JsonJavaObject();
                    curObj.put("rb", v.get(0)); // raised by
                    curObj.put("ro", v.get(1)); // raised on
                    curObj.put("rmd", v.get(2)); // Remedy
                    curObj.put("unid", v.get(3)); // Universal ID
                    curObj.put("excompany", v.get(4));
                    curObj.put("client", v.get(5));
                    curObj.put("newcompany", v.get(6));
                    curObj.put("apseuser", v.get(7));
                    jsarr.add(curObj);
                    curObj = null;
                    v = null;
                    count++;
                    ve = nav.getNext();
                }
                Date edate = new Date();
                System.out.println("Start : " + start + " at " + sdate + "    Finish: " + edate);
            } catch (NotesException e) {
                System.out.println("NotesException occured in worker class");
                e.printStackTrace();
            } catch (Exception e) {
                System.out.println("Exception occured in worker class");
                e.printStackTrace();
            } finally {
                NotesContext.termThread();
                try {
                    this.sessionCloner.recycle();
                } catch (NotesException nex) {
                    System.out.println("NEX Exception occured in worker class");
                    nex.printStackTrace();
                }
            }
            return jsarr;
        }
    }

**this is working code as eclipse project**
**AccessRequestsViewNav.java**

    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;

    import lotus.domino.*;

    import org.json.JSONArray;
    import org.json.JSONObject;
    import com.company.apse.admin.*;

    public class AccessRequestsViewNav {

        public static void main(String[] args) {

            int threadCount = 0;
            JSONObject jso = new JSONObject();
            JSONArray jsarr = new JSONArray();
            Date sdate = new Date();

            try {

                System.out.println("Creating a new session");
                Session s = NotesFactory.createSession(hostname, user, password);
                Database db = s.getDatabase("", "Testing/Demo.nsf");

                View view = db.getView("myView");
                view.setAutoUpdate(false);

                threadCount = view.getEntryCount();
                if (threadCount % 1000 > 0) {
                    threadCount = threadCount / 1000 + 1;
                } else {
                    threadCount = threadCount / 1000;
                }
                System.out.println(threadCount);
                ViewNavigator nav = view.createViewNav();

                jso.put("data", jsarr);
                // Get ExecutorService from Executors utility class, thread pool
                // size is decided based on viewentries ..one thread is supposed  to
                //handle 1000 entries
                ExecutorService executor = Executors.newFixedThreadPool(threadCount);

                // create a list to hold the Future object associated with Callable
                List<Future<JSONArray>> list = new ArrayList<Future<JSONArray>>(threadCount);

                for (int i = 0; i < threadCount; i++) {

                    // submit Callable tasks to be executed by thread pool
                    Future<JSONArray> future = executor.submit(new AccessRequests(nav, 1 + i * 1000, 1000));

                    // add Future to the list, we can get return value using Future
                    list.add(future);
                }

                for (Future<JSONArray> fut : list) {

                    try {
                        jsarr.put(fut.get());
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    } catch (ExecutionException e) {
                        e.printStackTrace();
                    }
                }

                // shut down the executor service now
                executor.shutdown();
                nav.recycle();
                view.recycle();
                db.recycle();
                s.recycle();
                /*
                 * FileWriter file = new FileWriter("c:\\test.json");
                 * 
                 * System.out.println("writing to file started");
                 * file.write(sdate.toString());
                 * 
                 * file.write(jso.toString());
                 */

                Date edate = new Date();
                /*
                 * file.write(edate.toString());
                 * System.out.println("writing to file finished"); file.flush();
                 * file.close();
                 */

                jsarr = null;
                jso = null;

                System.out.println("Finished .... " + sdate + "    Finish: " + edate);
            } catch (Exception e) {
                e.printStackTrace();
            }

        }
    }

**AccessRequests.Java**

    package com.company.apse.admin;

    import java.util.concurrent.Callable;
    import java.util.Date;
    import java.util.Vector;

    import lotus.domino.*;
    import org.json.*;

    public class AccessRequests implements Callable<JSONArray> {
        private ViewNavigator nav;
        private int start;
        private int ecount;

        public AccessRequests(ViewNavigator nav1, int start1, int ecount1) {
            this.nav = nav1;
            this.start = start1;
            this.ecount = ecount1;
        }

        @Override
        public JSONArray call() throws Exception {
            System.out.println("Start : " + start);
            JSONArray jsarr = new JSONArray();
            Date sdate = new Date();
            try {

                /*
                 * FileWriter file = new FileWriter("c:\\test-start-at-" + start +
                 * ".json");
                 * 
                 * file.write(sdate.toString());
                 */

                ViewEntry ve = nav.getNth(start);
                int count = 1;
                while (null != ve && count <= ecount) {
                    @SuppressWarnings("rawtypes")
                    Vector v = ve.getColumnValues();
                    JSONObject curObj = new JSONObject();
                    curObj.put("a1", v.get(0)); // raised by
                    curObj.put("a2", v.get(1)); // raised on
                    curObj.put("a3", v.get(2)); // Remedy
                    curObj.put("unid", v.get(3)); // Universal ID
                    curObj.put("a4", v.get(4));

                    // file.write(curObj.toString());
                    jsarr.put(curObj);
                    // System.out.println(curObj.toString());

                    curObj = null;
                    v = null;
                    count++;
                    // System.out.println(count);
                    ve = nav.getNext();
                }
                // file.write(jsarr.toString());
                // nav.recycle();
                Date edate = new Date();
                /*
                 * file.write(edate.toString()); file.flush(); file.close();
                 */
                System.out.println("Start : " + start + " at " + sdate + "    Finish: " + edate);
            } catch (NotesException e) {

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

            return jsarr;
        }

    }
package com.company.apse.admin;
导入java.util.ArrayList;
导入java.util.Date;
导入java.util.List;
导入java.util.concurrent.ExecutionException;
导入java.util.concurrent.ExecutorService;
导入java.util.concurrent.Executors;
导入java.util.concurrent.Future;
导入lotus.domino.Database;
导入lotus.domino.Session;
导入lotus.domino.View;
导入lotus.domino.ViewNavigator;
导入com.ibm.commons.util.io.json.*;
导入com.ibm.xsp.extlib.util.ExtLibUtil;
导入com.ibm.domino.xsp.module.nsf.nsfc组件模块;
导入com.ibm.domino.xsp.module.nsf.NotesContext;
导入com.ibm.domino.xsp.module.nsf.SessionCloner;
公共类AccessRequestsViewNav{
静态JsonJavaObject jso=新的JsonJavaObject();
静态JsonJavaArray jsarr=新JsonJavaArray();
静态SessionCloner SessionCloner;
静态NSF组件模块;
公共静态字符串(){
会话s=null;
数据库=null;
视图:qview=null;
int threadCount=0;
日期sdate=新日期();
试一试{
/**
*我们需要处理当前用户会话以计算中的公共名称
*用户名字段
*/
s=ExtLibUtil.getCurrentSession();
module=NotesContext.getCurrent().getModule();
sessionCloner=sessionCloner.getSessionCloner();
database=ExtLibUtil.getCurrentDatabase();
accReqView=database.getView(“MyView”);
acgreqview.setAutoUpdate(false);
threadCount=acgreqview.getEntryCount();
如果(线程数%1000>0){
threadCount=threadCount/1000+1;
}否则{
threadCount=threadCount/1000;
}
System.out.println(线程数);
ViewNavigator nav=acgreqview.createViewNav();
资产净值(400);
putArray(“数据”,jsarr);
//从Executors实用程序类、线程池获取ExecutorService
//大小根据viewentries确定。应该有一个线程
//处理1000个条目
System.out.println(“创建执行器服务”);
//ExecutorService executor=Executors.newFixedThreadPool(线程计数);
ExecutorService executor=Executors.newFixedThreadPool(5);
//创建一个列表以保存与Callable关联的未来对象
System.out.println(“创建保存未来作业的列表”);
List List=新的ArrayList(线程数);
对于(int i=0;i  java.lang.SecurityException: ECL Permission Denied (java.lang.RuntimePermission modifyThread