0

データベースを呼び出す init メソッドがあります。ここでの考え方は、ユーザーがアプリケーションにアクセスしたときに、init メソッドが次の方法でユーザーの資格情報をチェックするというものです。

         void initMethod() {
            /** Some setup stuff **/
            hbsession = HibernateUtil.getSessionFactory().getCurrentSession();
            buildBean();
            hbsession = HibernateUtil.getSessionFactory().getCurrentSession();
            user_level = permissionCheck(username);
        }
       /** Later on in file **/
        void login_the_user() {
         /****
         The problem happens here user_level is null because it seems to execute
         faster than the database call.  
         ****/
          if (someArray.contains(user_level)) {
            / ** Do stuff **/
          }
          else { /** Do stuff **/ }
       }

最初にユーザー Bean にデータを取り込み、次にユーザーのパーミッションをチェックします。私が抱えている問題は、このアプリケーションを通常どおり実行すると NullPointerException が発生することですが、デバッグで実行すると (ここにブレークポイントを配置します)、正常に動作します。これは、これらのデータベース呼び出しが別のスレッドで実行され、時間がかかり、アプリケーションがデータを使用するまでにまだ null であるという事実によるものだと思います。私の質問は、アプリケーションがこれらのメソッドを実際に使用する前に処理できるようにするための最良の方法は何ですか?

私は Thread.sleep(1000) を試してみましたが、これは非常にずさんなようで、半分の時間で動作します。

正常に実行された場合の以下のスタック トレース:

.... Long list of database calls getting all the information ....
    Jan 16, 2014 9:43:55 AM com.vaadin.server.DefaultErrorHandler doDefault
    SEVERE: 
    java.lang.NullPointerException
        at PatchmgmtUI.permission(PatchmgmtUI.java:331)
        at PatchmgmtUI.access$3(PatchmgmtUI.java:328)
        at PatchmgmtUI$1.beforeViewChange(PatchmgmtUI.java:154)
        at com.vaadin.navigator.Navigator.fireBeforeViewChange(Navigator.java:592)
        at com.vaadin.navigator.Navigator.navigateTo(Navigator.java:550)
        at com.vaadin.navigator.Navigator.navigateTo(Navigator.java:523)
        at PatchmgmtUI.loginUser(PatchmgmtUI.java:270)
        at PatchmgmtUI.access$0(PatchmgmtUI.java:247)
        at PatchmgmtUI$1.beforeViewChange(PatchmgmtUI.java:148)
        at com.vaadin.navigator.Navigator.fireBeforeViewChange(Navigator.java:592)
        at com.vaadin.navigator.Navigator.navigateTo(Navigator.java:550)
        at com.vaadin.navigator.Navigator.navigateTo(Navigator.java:523)
        at com.vaadin.ui.UI.doInit(UI.java:534)
        at com.vaadin.server.AbstractCommunicationManager.getBrowserDetailsUI(AbstractCommunicationManager.java:2468)
        at com.vaadin.server.AbstractCommunicationManager.handleBrowserDetailsRequest(AbstractCommunicationManager.java:2362)
        at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:325)
        at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:201)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        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:222)
        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:171)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1008)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

    Jan 16, 2014 9:43:55 AM org.apache.catalina.core.StandardWrapperValve invoke
    SEVERE: Servlet.service() for servlet [Patchmgmtproject Application] in context with path [/PatchMgmtProject] threw exception [java.lang.NullPointerException] with root cause
    java.lang.NullPointerException
        at PatchmgmtUI.permission(PatchmgmtUI.java:331)
        at PatchmgmtUI.access$3(PatchmgmtUI.java:328)
        at PatchmgmtUI$1.beforeViewChange(PatchmgmtUI.java:154)
        at com.vaadin.navigator.Navigator.fireBeforeViewChange(Navigator.java:592)
        at com.vaadin.navigator.Navigator.navigateTo(Navigator.java:550)
        at com.vaadin.navigator.Navigator.navigateTo(Navigator.java:523)
        at PatchmgmtUI.loginUser(PatchmgmtUI.java:270)
        at PatchmgmtUI.access$0(PatchmgmtUI.java:247)
        at PatchmgmtUI$1.beforeViewChange(PatchmgmtUI.java:148)
        at com.vaadin.navigator.Navigator.fireBeforeViewChange(Navigator.java:592)
        at com.vaadin.navigator.Navigator.navigateTo(Navigator.java:550)
        at com.vaadin.navigator.Navigator.navigateTo(Navigator.java:523)
        at com.vaadin.ui.UI.doInit(UI.java:534)
        at com.vaadin.server.AbstractCommunicationManager.getBrowserDetailsUI(AbstractCommunicationManager.java:2468)
        at com.vaadin.server.AbstractCommunicationManager.handleBrowserDetailsRequest(AbstractCommunicationManager.java:2362)
        at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:325)
        at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:201)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        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:222)
        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:171)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1008)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
4

0 に答える 0