2015-04-22 58 views
4

我正在嘗試使用hibernate搜索。 按照這份指南http://hibernate.org/search/documentation/getting-started/我添加了這兩條線在hibernate.cfg.xmlHibernate搜索 - SearchFactory未初始化

<property name="hibernate.search.default.directory_provider">filesystem</property> 
<property name="hibernate.search.default.indexBase">/var/lucene/indexes</property> 

而且在方法,其中將開始Hibernate的Session我已經把代碼同步的搜索索引(如寫入指南)。

// Hibernate starting 
    Configuration configuration = new Configuration(); 
    configuration.configure(); 
    ServiceRegistry serviceRegistry = 
      new StandardServiceRegistryBuilder() 
        .applySettings(
          configuration.getProperties() 
        ).build(); 
    // ~Hibernate starting 

    SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry); 
    Session session = sessionFactory.getCurrentSession(); 
    FullTextSession fullTextSession = Search.getFullTextSession(session); 

    // Close Hibernate session 
    try{ 
     fullTextSession.createIndexer().startAndWait(); 
     log.info("Hibernate search index created."); 
    }catch(InterruptedException e){ 
     log.error("Error during the Sync of Hibernate search on startup.", e); 
    } 
    try{ 

     session.getTransaction().commit(); 

    }catch(Exception ex){ 

     try{ 
      session.getTransaction().rollback(); 
     }catch(Exception ex2){} 
     log.error(ex ); 

    }finally{ 
     if(session.isOpen()){ 
      session.close(); 
     } 
    } 

的問題是,當我開始在web-app我收到此錯誤:

ContainerBase.addChild: start: 
org.apache.catalina.LifecycleException: org.hibernate.search.exception.SearchException: HSEARCH000222: The SearchFactory was not initialized 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:5954) 
    at com.sun.enterprise.web.WebModule.start(WebModule.java:691) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1041) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:1024) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:747) 
    at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:2286) 
    at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1932) 
    at com.sun.enterprise.web.WebApplication.start(WebApplication.java:139) 
    at org.glassfish.internal.data.EngineRef.start(EngineRef.java:122) 
    at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:291) 
    at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:352) 
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:500) 
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219) 
    at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:539) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:535) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:360) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:534) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:565) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:557) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:360) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:556) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1464) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:109) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1846) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1722) 
    at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534) 
    at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224) 
    at org.glassfish.grizzly.http.server.StaticHttpHandlerBase.service(StaticHttpHandlerBase.java:189) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167) 
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201) 
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175) 
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235) 
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112) 
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561) 
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545) 
    at java.lang.Thread.run(Thread.java:745) 
+0

我有同樣的問題,在WildFly 9.0.1.Final –

+0

@VijayKumar我還沒試過,但我認爲出現問題,因爲我使用xml文件而不是註釋來描述數據庫結構來休眠。如果你想讓我知道。 –

回答

0

對於我這個代碼snipset工作。我以不同的方式創建工廠。從您的堆棧跟蹤我看不出哪一行導致錯誤:

 SessionFactory factory = new 
     Configuration().configure("/resources/hibernate.cfg.xml"). 
     buildSessionFactory(); 
     Session session = factory.openSession(); 
     FullTextSession fullTextSession = Search.getFullTextSession(session); 
     session.getTransaction().begin(); 
     try { 
     fullTextSession.createIndexer().startAndWait(); 
     System.out.println("Hibernate search index created."); 
    } catch (InterruptedException e) { 
    } 
    try { 
     session.getTransaction().commit(); 
    } catch (Exception ex) { 

     try { 
      session.getTransaction().rollback(); 
     } catch (Exception ex2) { 
     } 
     ex.printStackTrace(); 

    } finally { 
     if (session.isOpen()) { 
      session.close(); 
     } 
    }