2016-11-10 49 views
0

我需要创建一个在Tomcat启动时自动执行的方法。我遵循一个教程,可以实现一个实现org.quartz.Job的方法,因此它可以工作,但问题是它不允许我在该方法中注入一个bean CDI,它只是在没有日志错误的情况下停止运行。使用Quartz2和Bean CDI

我发现石英必须的东西集成到使用CDI,我已经试过DeltaSpike,这让我的错误,没有任何人有什么想法?

我用:

  • JSF 2.2
  • CDI
  • Tomcat的8
  • 的Eclipse IDE
  • Maven的

我的工作类:

package com.sisRastrbov.schedule; 

import org.quartz.Job; 
import org.quartz.JobExecutionContext; 
import org.quartz.JobExecutionException; 

public class SchedulerJob implements Job { 

    @Override 
    public void execute(JobExecutionContext context) 
     throws JobExecutionException { 

     System.out.println("JSF 2 + Quartz 2 example"); 

    } 

} 

我的pom.xml依赖关系:

<dependencies> 
      <dependency> 
      <groupId>org.primefaces.themes</groupId> 
      <artifactId>bootstrap</artifactId> 
      <version>1.0.10</version> 
      <scope>compile</scope> 
     </dependency> 
     <!-- núcleo do hibernate --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>5.1.0.Final</version> 
      <scope>compile</scope> 
     </dependency> 

     <dependency> 
      <groupId>totalsat</groupId> 
      <artifactId>totalsat</artifactId> 
      <version>1.0</version> 
     </dependency> 

     <!-- implementação do Hibernate BeanValidator --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-validator</artifactId> 
      <version>5.1.3.Final</version> 
      <scope>compile</scope> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/org.apache.axis/axis --> 
     <dependency> 
      <groupId>org.apache.axis</groupId> 
      <artifactId>axis</artifactId> 
      <version>1.4</version> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/org.jboss.spec.javax.xml.rpc/jboss-jaxrpc-api_1.1_spec --> 
     <dependency> 
      <groupId>org.jboss.spec.javax.xml.rpc</groupId> 
      <artifactId>jboss-jaxrpc-api_1.1_spec</artifactId> 
      <version>1.0.1.Final</version> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/xerces/xercesImpl --> 



     <!-- implementação do entityManager da Jpa --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>5.1.0.Final</version> 
      <scope>compile</scope> 
     </dependency> 
     <dependency> 
      <groupId>wsdl4j</groupId> 
      <artifactId>wsdl4j</artifactId> 
      <version>1.6.2</version> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/org.jboss.weld.servlet/weld-servlet --> 
     <dependency> 
      <groupId>org.jboss.weld.servlet</groupId> 
      <artifactId>weld-servlet</artifactId> 
      <version>2.3.1.Final</version> 
     </dependency> 


     <dependency> 
      <groupId>org.jboss</groupId> 
      <artifactId>jandex</artifactId> 
      <version>1.2.2.Final</version> 
      <scope>compile</scope> 
     </dependency> 

     <dependency> 
      <groupId>postgresql</groupId> 
      <artifactId>postgresql</artifactId> 
      <version>9.1-901-1.jdbc4</version> 
      <scope>compile</scope> 
     </dependency> 

     <!-- Mojarra (implementação do JSF 2) --> 
     <dependency> 
      <groupId>org.glassfish</groupId> 
      <artifactId>javax.faces</artifactId> 
      <version>2.2.9</version> 
      <scope>compile</scope> 
     </dependency> 

     <!-- omnifaces --> 
     <dependency> 
      <groupId>org.omnifaces</groupId> 
      <artifactId>omnifaces</artifactId> 
      <version>1.5</version> 
      <scope>compile</scope> 
     </dependency> 

     <!-- Primefaces Biblioteca de componentes --> 
     <dependency> 
      <groupId>org.primefaces</groupId> 
      <artifactId>primefaces</artifactId> 
      <version>5.3</version> 
     </dependency> 



     <!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web --> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-web</artifactId> 
      <version>3.1.4.RELEASE</version> 
     </dependency> 


     <!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config --> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-config</artifactId> 
      <version>3.1.4.RELEASE</version> 
     </dependency> 


     <!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-core --> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-core</artifactId> 
      <version>3.1.4.RELEASE</version> 
     </dependency> 


     <dependency> 
      <groupId>commons-logging</groupId> 
      <artifactId>commons-logging</artifactId> 
      <version>1.1.3</version> 
      <scope>compile</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-lang3</artifactId> 
      <version>3.1</version> 
      <scope>compile</scope> 
     </dependency> 

     <!-- API de servlet --> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.1.0</version> 
      <scope>provided</scope> 
     </dependency> 


     <!-- https://mvnrepository.com/artifact/javax.mail/mail --> 
     <dependency> 
      <groupId>javax.mail</groupId> 
      <artifactId>mail</artifactId> 
      <version>1.4</version> 
     </dependency> 

     <!-- listener --> 
      <!-- JSF 2 libraries --> 
     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-api</artifactId> 
      <version>2.1.11</version> 
     </dependency> 
     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-impl</artifactId> 
      <version>2.1.11</version> 
     </dependency> 

     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 

     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
      <version>2.5</version> 
     </dependency> 

     <dependency> 
      <groupId>javax.servlet.jsp</groupId> 
      <artifactId>jsp-api</artifactId> 
      <version>2.1</version> 
     </dependency> 

       <!-- Tomcat 6 need this --> 
     <dependency> 
      <groupId>com.sun.el</groupId> 
      <artifactId>el-ri</artifactId> 
      <version>1.0</version> 
     </dependency> 

     <!-- Quartz scheduler framework --> 
     <dependency> 
      <groupId>org.quartz-scheduler</groupId> 
      <artifactId>quartz</artifactId> 
      <version>2.1.5</version> 
     </dependency> 

     <!-- Quartz need transaction --> 
     <dependency> 
      <groupId>javax.transaction</groupId> 
      <artifactId>jta</artifactId> 
      <version>1.1</version> 
     </dependency> 




    </dependencies> 

的web.xml:

<?xml version="1.0" encoding="UTF-8" ?> 
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> 

<context-param> 
    <param-name>primefaces.FONT_AWESOME</param-name>  
    <param-value>true</param-value> 
</context-param> 
<context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      /WEB-INF/applicationContext.xml 
     </param-value> 
</context-param> 
<session-config> 
    <session-timeout>-1</session-timeout> 
</session-config> 

<listener> 
     <listener-class> 
      org.quartz.ee.servlet.QuartzInitializerListener 
     </listener-class> 
    </listener> 

<listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    <listener> 
     <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
    </listener> 
    <listener> 
     <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class> 
    </listener> 

    <listener> 
     <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class> 
    </listener> 
    <resource-env-ref> 
     <resource-env-ref-name>BeanManager</resource-env-ref-name> 
     <resource-env-ref-type> 
      javax.enterprise.inject.spi.BeanManager 
     </resource-env-ref-type> 
    </resource-env-ref> 

    <welcome-file-list> 
     <welcome-file>Main.xhtml</welcome-file> 
    </welcome-file-list> 

    <servlet> 
     <servlet-name>Faces Servlet</servlet-name> 
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 

    </servlet> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>*.xhtml</url-pattern> 
    </servlet-mapping> 

    <mime-mapping> 
     <extension>woff</extension> 
     <mime-type>application/font-woff</mime-type> 
    </mime-mapping> 
    <mime-mapping> 
     <extension>woff2</extension> 
     <mime-type>application/font-woff2</mime-type> 
    </mime-mapping> 

    <filter> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <url-pattern>/*</url-pattern> 
     <dispatcher>FORWARD</dispatcher> 
     <dispatcher>REQUEST</dispatcher> 
    </filter-mapping> 
</web-app> 

回答

1

哇,你甚至coud有添加所有的SpingFramework做到这一点:) 这应该做的工作:

@javax.ejb.Singleton 
@javax.ejb.Startup 
public class Startup { 
    @PostConstruct 
    public void start() { 
     System.out.println("start"); 
    } 
} 

的pom.xml

<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-api</artifactId> 
    <version>7.0</version> 
    <scope>provided</scope> 
</dependency> 

保持简单:) 你应该考虑与JEE调度代替石英如果你的使用情况相符 http://docs.oracle.com/javaee/6/tutorial/doc/bnboy.html

+0

感谢您的回复skay,我很欣赏你的答案,但我可以解决与Apache的问题Deltaspike。 –

+0

你*不需要* deltapike来解决这个问题。您只需要CDI /由您的JEE7 +容器提供。 – skay