You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@manifoldcf.apache.org by "Maciej Lizewski (JIRA)" <ji...@apache.org> on 2012/08/31 16:53:07 UTC

[jira] [Comment Edited] (CONNECTORS-516) Logging causes exceptions under Tomcat

    [ https://issues.apache.org/jira/browse/CONNECTORS-516?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13446018#comment-13446018 ] 

Maciej Lizewski edited comment on CONNECTORS-516 at 9/1/12 1:51 AM:
--------------------------------------------------------------------

I am working on svn trunk and problem persist... I did solve it by writing my own ServletContextListener:

public class ManifoldCFJobServletContextListener implements ServletContextListener {

    private ServletContext context = null;
    public static final String agentShutdownSignal = org.apache.manifoldcf.agents.AgentRun.agentShutdownSignal;
    public static final String useJettyParentClassLoaderProperty = "org.apache.manifoldcf.usejettyparentclassloader";
    private Thread jobsThread = null;

    /*This method is invoked when the Web Application has been removed 
     and is no longer able to accept requests
     */
    public void contextDestroyed(ServletContextEvent event) {
        this.context = null;

        if (jobsThread != null) {
            jobsThread.interrupt();
            jobsThread = null;
        }
    }

    //This method is invoked when the Web Application
    //is ready to service requests
    public void contextInitialized(ServletContextEvent event) {
        this.context = event.getServletContext();

        try {
            ManifoldCF.initializeEnvironment();
            IThreadContext tc = ThreadContextFactory.make();

            boolean useParentClassLoader = ManifoldCF.getBooleanProperty(useJettyParentClassLoaderProperty, true);

            if (useParentClassLoader) {
                // Clear the agents shutdown signal.
                ILockManager lockManager = LockManagerFactory.make(tc);
                lockManager.clearGlobalFlag(agentShutdownSignal);

                // Do the basic initialization of the database and its schema
                ManifoldCF.createSystemDatabase(tc);

                ManifoldCF.installTables(tc);

                org.apache.manifoldcf.crawler.system.ManifoldCF.registerThisAgent(tc);

                ManifoldCF.reregisterAllConnectors(tc);
            }
            runAgents(tc);
        } catch (ManifoldCFException ex) {
            Logger.getLogger(ManifoldCFServletContextListener.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void runAgents(final IThreadContext tc)
            throws ManifoldCFException {

        final ILockManager lockManager = LockManagerFactory.make(tc);

        jobsThread = new Thread() {
            public void run() {
                while (true) {
                    try {
                        // Any shutdown signal yet?
                        if (lockManager.checkGlobalFlag(agentShutdownSignal)) {
                            break;
                        }

                        // Start whatever agents need to be started
                        ManifoldCF.startAgents(tc);

                        try {
                            ManifoldCF.sleep(5000);
                        } catch (InterruptedException e) {
                            break;
                        }
                    } catch (ManifoldCFException ex) {
                        Logger.getLogger(ManifoldCFJobServletContextListener.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
        };
        jobsThread.start();
    }
}

                
      was (Author: redguy666):
    I am working on svn trunk and problem persist... I di solve it by writing my own ServletContextListener:

public class ManifoldCFJobServletContextListener implements ServletContextListener {

    private ServletContext context = null;
    public static final String agentShutdownSignal = org.apache.manifoldcf.agents.AgentRun.agentShutdownSignal;
    public static final String useJettyParentClassLoaderProperty = "org.apache.manifoldcf.usejettyparentclassloader";
    private Thread jobsThread = null;

    /*This method is invoked when the Web Application has been removed 
     and is no longer able to accept requests
     */
    public void contextDestroyed(ServletContextEvent event) {
        this.context = null;

        if (jobsThread != null) {
            jobsThread.interrupt();
            jobsThread = null;
        }
    }

    //This method is invoked when the Web Application
    //is ready to service requests
    public void contextInitialized(ServletContextEvent event) {
        this.context = event.getServletContext();

        try {
            ManifoldCF.initializeEnvironment();
            IThreadContext tc = ThreadContextFactory.make();

            boolean useParentClassLoader = ManifoldCF.getBooleanProperty(useJettyParentClassLoaderProperty, true);

            if (useParentClassLoader) {
                // Clear the agents shutdown signal.
                ILockManager lockManager = LockManagerFactory.make(tc);
                lockManager.clearGlobalFlag(agentShutdownSignal);

                // Do the basic initialization of the database and its schema
                ManifoldCF.createSystemDatabase(tc);

                ManifoldCF.installTables(tc);

                org.apache.manifoldcf.crawler.system.ManifoldCF.registerThisAgent(tc);

                ManifoldCF.reregisterAllConnectors(tc);
            }
            runAgents(tc);
        } catch (ManifoldCFException ex) {
            Logger.getLogger(ManifoldCFServletContextListener.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void runAgents(final IThreadContext tc)
            throws ManifoldCFException {

        final ILockManager lockManager = LockManagerFactory.make(tc);

        jobsThread = new Thread() {
            public void run() {
                while (true) {
                    try {
                        // Any shutdown signal yet?
                        if (lockManager.checkGlobalFlag(agentShutdownSignal)) {
                            break;
                        }

                        // Start whatever agents need to be started
                        ManifoldCF.startAgents(tc);

                        try {
                            ManifoldCF.sleep(5000);
                        } catch (InterruptedException e) {
                            break;
                        }
                    } catch (ManifoldCFException ex) {
                        Logger.getLogger(ManifoldCFJobServletContextListener.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
        };
        jobsThread.start();
    }
}

                  
> Logging causes exceptions under Tomcat
> --------------------------------------
>
>                 Key: CONNECTORS-516
>                 URL: https://issues.apache.org/jira/browse/CONNECTORS-516
>             Project: ManifoldCF
>          Issue Type: Bug
>    Affects Versions: ManifoldCF 0.6
>            Reporter: Maciej Lizewski
>
> under jetty (with jetty-runner) everything is ok.
> But I would like to run the application also in tomcat and almost everything works except one thing: Logging component causes NullPointerException. I happens in mcf-authority-service:
> 2012-08-31 11:06:20 org.apache.catalina.core.StandardWrapperValve invoke
> SEVERE: Servlet.service() for servlet [UserACLServlet] in context with path [/mcf-authority-service] threw exception
> java.lang.NullPointerException
>         at org.apache.manifoldcf.authorityservice.servlet.UserACLServlet.doGet(UserACLServlet.java:106)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
>         at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
>         at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
>         at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
>         at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
>         at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>         at java.lang.Thread.run(Thread.java:662)
> in mcf-crawler-ui on pages which use Logging:
> 2012-08-31 10:47:03 org.apache.catalina.core.StandardWrapperValve invoke
> SEVERE: Servlet.service() for servlet [jsp] in context with path [/mcf-crawler-ui] threw exception [java.lang.NullPointerException] with root cause
> java.lang.NullPointerException
>         at org.apache.manifoldcf.agents.output.solr.HttpPoster.checkPost(HttpPoster.java:394)
>         at org.apache.manifoldcf.agents.output.solr.SolrConnector.check(SolrConnector.java:272)
>         at org.apache.jsp.viewoutput_jsp._jspService(viewoutput_jsp.java:342)
>         at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
>         at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
>         at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
>         at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
>         at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
>         at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
>         at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
>         at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
>         at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>         at java.lang.Thread.run(Thread.java:662)
> they all point to lines looking like this:
> UserACLServlet.java line 106:
> Logging.authorityService.debug("Received request");
> or HttpPoster.java line 394:
> if (Logging.ingest.isDebugEnabled())
> Why is Manfold environment not being initialized? I really need to run it under Tomcat in some cases...

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira