/*
* Copyright 2014 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jbpm.services.cdi.impl;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Event;
import javax.enterprise.inject.Instance;
import javax.enterprise.inject.spi.BeanManager;
import javax.inject.Inject;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;
import org.jbpm.kie.services.impl.FormManagerService;
import org.jbpm.kie.services.impl.KModuleDeploymentService;
import org.jbpm.kie.services.impl.KModuleDeploymentUnit;
import org.jbpm.process.audit.event.AuditEventBuilder;
import org.jbpm.services.api.DefinitionService;
import org.jbpm.services.api.DeploymentEvent;
import org.jbpm.services.api.RuntimeDataService;
import org.jbpm.services.api.model.DeployedUnit;
import org.jbpm.services.api.model.DeploymentUnit;
import org.jbpm.services.cdi.Activate;
import org.jbpm.services.cdi.Deactivate;
import org.jbpm.services.cdi.Deploy;
import org.jbpm.services.cdi.Kjar;
import org.jbpm.services.cdi.RequestScopedBackupIdentityProvider;
import org.jbpm.services.cdi.Undeploy;
import org.jbpm.services.cdi.impl.manager.InjectableRegisterableItemsFactory;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.manager.RegisterableItemsFactory;
import org.kie.api.runtime.manager.RuntimeManagerFactory;
import org.kie.api.executor.ExecutorService;
import org.kie.internal.identity.IdentityProvider;
@ApplicationScoped
@Kjar
public class DeploymentServiceCDIImpl extends KModuleDeploymentService {
@Inject
private BeanManager beanManager;
@Inject
@Deploy
protected Event<DeploymentEvent> deploymentEvent;
@Inject
@Undeploy
protected Event<DeploymentEvent> undeploymentEvent;
@Inject
@Activate
protected Event<DeploymentEvent> activateEvent;
@Inject
@Deactivate
protected Event<DeploymentEvent> deactivateEvent;
@Inject
private Instance<RequestScopedBackupIdentityProvider> backupProviders;
@PostConstruct
public void onInit() {
super.onInit();
}
@PreDestroy
@Override
public void shutdown() {
super.shutdown();
}
@Override
public void notifyOnDeploy(DeploymentUnit unit, DeployedUnit deployedUnit) {
if (deploymentEvent != null) {
deploymentEvent.fire(new DeploymentEvent(unit.getIdentifier(), deployedUnit));
}
}
@Override
public void notifyOnUnDeploy(DeploymentUnit unit, DeployedUnit deployedUnit) {
if (undeploymentEvent != null && deployedUnit != null) {
undeploymentEvent.fire(new DeploymentEvent(unit.getIdentifier(), deployedUnit));
}
}
@Override
public void notifyOnActivate(DeploymentUnit unit, DeployedUnit deployedUnit) {
if (activateEvent != null && deployedUnit != null) {
activateEvent.fire(new DeploymentEvent(unit.getIdentifier(), deployedUnit));
}
}
@Override
public void notifyOnDeactivate(DeploymentUnit unit, DeployedUnit deployedUnit) {
if (deactivateEvent != null && deployedUnit != null) {
deactivateEvent.fire(new DeploymentEvent(unit.getIdentifier(), deployedUnit));
}
}
@Inject
@Override
public void setBpmn2Service(DefinitionService bpmn2Service) {
super.setBpmn2Service(bpmn2Service);
}
@Inject
@Override
public void setManagerFactory(RuntimeManagerFactory managerFactory) {
super.setManagerFactory(managerFactory);
}
@Inject
@PersistenceUnit(unitName = "org.jbpm.domain")
@Override
public void setEmf(EntityManagerFactory emf) {
super.setEmf(emf);
}
@Inject
@Override
public void setRuntimeDataService(RuntimeDataService runtimeDataService) {
super.setRuntimeDataService(runtimeDataService);
}
@Inject
@Override
public void setIdentityProvider(IdentityProvider identityProvider) {
super.setIdentityProvider(new IdentityProviderCDIWrapper(identityProvider, backupProviders));
}
@Inject
@Override
public void setFormManagerService(FormManagerService formManagerService) {
super.setFormManagerService(formManagerService);
}
@Inject
public void setExecutorService(Instance<ExecutorService> executorService) {
if (!executorService.isUnsatisfied()) {
super.setExecutorService(executorService.get());
}
}
@Override
protected RegisterableItemsFactory getRegisterableItemsFactory(AuditEventBuilder auditLoggerBuilder, KieContainer kieContainer,
KModuleDeploymentUnit unit) {
return InjectableRegisterableItemsFactory.getFactory(beanManager, auditLoggerBuilder, kieContainer,
unit.getKsessionName());
}
}