package org.camunda.bpm.camel.cdi; import org.apache.camel.builder.RouteBuilder; import org.camunda.bpm.application.ProcessApplication; import org.camunda.bpm.application.ProcessApplicationInterface; import org.camunda.bpm.application.impl.EjbProcessApplication; import org.jboss.as.ee.component.InjectionTarget; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.ejb.*; import javax.inject.Inject; import java.util.logging.Logger; /** * We need this class because @Startup annotations are lazily instantiated and not *really* initalized at * startup. We use this class to make sure that the CamelContextBootstrap is initialized at startup. */ @Singleton @Startup @ConcurrencyManagement(ConcurrencyManagementType.BEAN) @TransactionAttribute(TransactionAttributeType.REQUIRED) @ProcessApplication @Local(ProcessApplicationInterface.class) public class ArquillianTestsProcessApplication extends EjbProcessApplication { Logger log = Logger.getLogger(getClass().getName()); @Inject CamelContextBootstrap camelContext; /* * Every integration test needs to provide a method that will return the Camel route * to be use for testing with a @Produces annotation */ @Inject RouteBuilder testRoute; @PostConstruct public void start() throws Exception { log.info(">>"); log.info(">> Starting the ArquillianTestsProcessApplication "); log.info(">>"); camelContext.addRoute(testRoute); camelContext.start(); deploy(); } @PreDestroy public void stop() { undeploy(); } }