DeploymentDescriptorBuilder builder = master.getBuilder(); builder.setBuildHandler(new MergeModeBuildHandler(mode)); break; case OVERRIDE_EMPTY: builder.auditMode(slave.getAuditMode()); builder.auditPersistenceUnit(slave.getAuditPersistenceUnit()); builder.persistenceMode(slave.getPersistenceMode()); builder.persistenceUnit(slave.getPersistenceUnit()); builder.runtimeStrategy(slave.getRuntimeStrategy()); builder.setConfiguration(slave.getConfiguration()); builder.setEnvironmentEntries(slave.getEnvironmentEntries()); builder.setEventListeners(slave.getEventListeners()); builder.setGlobals(slave.getGlobals()); builder.setMarshalingStrategies(slave.getMarshallingStrategies()); builder.setTaskEventListeners(slave.getTaskEventListeners()); builder.setWorkItemHandlers(slave.getWorkItemHandlers()); builder.setRequiredRoles(slave.getRequiredRoles()); builder.setClasses(slave.getClasses()); builder.setLimitSerializationClasses(slave.getLimitSerializationClasses()); builder.auditMode(slave.getAuditMode()); builder.auditPersistenceUnit(slave.getAuditPersistenceUnit()); builder.persistenceMode(slave.getPersistenceMode()); builder.persistenceUnit(slave.getPersistenceUnit()); builder.runtimeStrategy(slave.getRuntimeStrategy()); for (ObjectModel model : slave.getEventListeners()) { builder.addEventListener(model);
@Test public void testDeployWithCustomDeploymentDescriptor() throws Exception { KieServices ks = KieServices.Factory.get(); ReleaseId releaseId = ks.newReleaseId("org.jbpm.test.dd", "-kjar-with-dd", "1.0.0"); customDescriptor.getBuilder() .runtimeStrategy(RuntimeStrategy.PER_REQUEST) .addGlobal(new NamedObjectModel("service", "java.util.ArrayList")); resources.put("src/main/resources/" + DeploymentDescriptor.META_INF_LOCATION, customDescriptor.toXml()); DeploymentDescriptor descriptor = internalManager.getDeploymentDescriptor(); assertNotNull(descriptor); assertEquals("org.jbpm.persistence.jpa", descriptor.getPersistenceUnit()); assertEquals("org.jbpm.persistence.jpa", descriptor.getAuditPersistenceUnit()); assertEquals(AuditMode.JPA, descriptor.getAuditMode()); assertEquals(PersistenceMode.JPA, descriptor.getPersistenceMode()); assertEquals(RuntimeStrategy.PER_REQUEST, descriptor.getRuntimeStrategy()); assertEquals(0, descriptor.getMarshallingStrategies().size()); assertEquals(0, descriptor.getConfiguration().size()); assertEquals(0, descriptor.getEnvironmentEntries().size()); assertEquals(0, descriptor.getEventListeners().size()); assertEquals(1, descriptor.getGlobals().size()); assertEquals(0, descriptor.getTaskEventListeners().size()); assertEquals(0, descriptor.getWorkItemHandlers().size()); assertEquals(0, descriptor.getRequiredRoles().size());
@Override public List<TaskLifeCycleEventListener> getTaskListeners() { List<TaskLifeCycleEventListener> defaultListeners = new ArrayList<TaskLifeCycleEventListener>(); DeploymentDescriptor descriptor = getRuntimeManager().getDeploymentDescriptor(); if (descriptor == null) { defaultListeners.add(new JPATaskLifeCycleEventListener(true)); } else if (descriptor.getAuditMode() == AuditMode.JPA) { if (descriptor.getPersistenceUnit().equals(descriptor.getAuditPersistenceUnit())) { defaultListeners.add(TaskAuditLoggerFactory.newJPAInstance()); } else { defaultListeners.add(TaskAuditLoggerFactory.newJPAInstance(EntityManagerFactoryManager.get().getOrCreate(descriptor.getAuditPersistenceUnit()))); } else if (descriptor.getAuditMode() == AuditMode.JMS) { if (jmsTaskLogger == null) { try {
if (descriptor.getPersistenceMode() == PersistenceMode.NONE) { builder = getDefaultInMemory(); } else { contaxtParams.put("classLoader", kieContainer.getClassLoader()); if (descriptor.getPersistenceUnit() != null) { EntityManagerFactory emf = EntityManagerFactoryManager.get().getOrCreate(descriptor.getPersistenceUnit()); builder.entityManagerFactory(emf); contaxtParams.put("entityManagerFactory", emf); for (NamedObjectModel model : descriptor.getEnvironmentEntries()) { Object entry = getInstanceFromModel(model, kieContainer, contaxtParams); builder.addEnvironmentEntry(model.getName(), entry); for (NamedObjectModel model : descriptor.getConfiguration()) { Object entry = getInstanceFromModel(model, kieContainer, contaxtParams); builder.addConfiguration(model.getName(), (String) entry); ObjectMarshallingStrategy[] mStrategies = new ObjectMarshallingStrategy[descriptor.getMarshallingStrategies().size() + 1]; int index = 0; for (ObjectModel model : descriptor.getMarshallingStrategies()) { Object strategy = getInstanceFromModel(model, kieContainer, contaxtParams); mStrategies[index] = (ObjectMarshallingStrategy)strategy;
MavenRepository repository = MavenRepository.getMavenRepository(); repository.resolveArtifact(releaseId.toExternalForm()); KieServices ks = KieServices.Factory.get(); KieContainer kieContainer = ks.newKieContainer(releaseId); if (descriptor.getPersistenceMode() == PersistenceMode.NONE) { builder = getDefaultInMemory(); } else { for (NamedObjectModel model : descriptor.getEnvironmentEntries()) { Object entry = getInstanceFromModel(model, kieContainer, contaxtParams); builder.addEnvironmentEntry(model.getName(), entry); for (NamedObjectModel model : descriptor.getConfiguration()) { Object entry = getInstanceFromModel(model, kieContainer, contaxtParams); builder.addConfiguration(model.getName(), (String) entry); ObjectMarshallingStrategy[] mStrategies = new ObjectMarshallingStrategy[descriptor.getMarshallingStrategies().size() + 1]; int index = 0; for (ObjectModel model : descriptor.getMarshallingStrategies()) { Object strategy = getInstanceFromModel(model, kieContainer, contaxtParams); mStrategies[index] = (ObjectMarshallingStrategy)strategy;
@Test public void testDeployWithDefaultDeploymentDescriptor() throws Exception { KieServices ks = KieServices.Factory.get(); ReleaseId releaseId = ks.newReleaseId("org.jbpm.test.dd", "kjar-with-dd", "1.0.0"); String processString = IOUtils.toString(this.getClass().getResourceAsStream("/BPMN2-ScriptTask.bpmn2"), "UTF-8"); Map<String, String> resources = new HashMap<String, String>(); resources.put("src/main/resources/BPMN2-ScriptTask.bpmn2", processString); InternalKieModule kJar1 = createKieJar(ks, releaseId, resources); installKjar(releaseId, kJar1); RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newDefaultBuilder(releaseId) .userGroupCallback(userGroupCallback) .get(); manager = RuntimeManagerFactory.Factory.get().newSingletonRuntimeManager(environment); assertNotNull(manager); InternalRuntimeManager internalManager = (InternalRuntimeManager) manager; DeploymentDescriptor descriptor = internalManager.getDeploymentDescriptor(); assertNotNull(descriptor); RegisterableItemsFactory factory = internalManager.getEnvironment().getRegisterableItemsFactory(); assertNotNull(factory); assertTrue(factory instanceof InternalRegisterableItemsFactory); assertNotNull(((InternalRegisterableItemsFactory) factory).getRuntimeManager()); String descriptorFromKjar = descriptor.toXml(); DeploymentDescriptorManager ddManager = new DeploymentDescriptorManager(); String defaultDescriptor = ddManager.getDefaultDescriptor().toXml(); assertEquals(defaultDescriptor, descriptorFromKjar); }
InternalRuntimeManager toBeManager = (InternalRuntimeManager) RuntimeManagerRegistry.get().getManager(migrationSpec.getToDeploymentId()); boolean migrateExecutorJobs = ((SimpleRuntimeEnvironment)currentManager.getEnvironment()).getEnvironmentTemplate().get("ExecutorService") != null; validate(migrateExecutorJobs); Map<Long, List<TimerInstance>> timerMigrated = null; txm = TransactionManagerFactory.get().newTransactionManager(currentManager.getEnvironment().getEnvironment()); transactionOwner = txm.begin(); org.kie.api.definition.process.Process toBeProcess = toBeManager.getEnvironment().getKieBase().getProcess(migrationSpec.getToProcessId()); String auditPu = currentManager.getDeploymentDescriptor().getAuditPersistenceUnit(); EntityManagerFactory emf = EntityManagerFactoryManager.get().getOrCreate(auditPu); EntityManager em = emf.createEntityManager(); report.addEntry(Type.INFO, "Executor Jobs updated = " + executorRequestsUpdated + " for process instance id " + migrationSpec.getProcessInstanceId()); current = JPAKnowledgeService.newStatefulKnowledgeSession(currentManager.getEnvironment().getKieBase(), null, currentManager.getEnvironment().getEnvironment()); tobe = toBeManager.getEnvironment().getKieBase().newKieSession(); upgradeProcessInstance(current, tobe, migrationSpec.getProcessInstanceId(), migrationSpec.getToProcessId(), nodeMapping, em, toBeManager.getIdentifier());
protected static void deployKjar() { KieServices ks = KieServices.Factory.get(); ReleaseId releaseId = ks.newReleaseId(GROUP_ID, ARTIFACT_ID, VERSION); List<String> processes = new ArrayList<String>(); processes.add("processes/EmptyHumanTask.bpmn"); processes.add("processes/humanTask.bpmn"); processes.add("processes/SimpleHTProcess.bpmn2"); DeploymentDescriptor customDescriptor = new DeploymentDescriptorImpl("org.jbpm.domain"); customDescriptor.getBuilder() .addRequiredRole("view:managers"); Map<String, String> resources = new HashMap<String, String>(); resources.put("src/main/resources/" + DeploymentDescriptor.META_INF_LOCATION, customDescriptor.toXml()); InternalKieModule kJar1 = createKieJar(ks, releaseId, processes, resources); File pom = new File("target/kmodule", "pom.xml"); pom.getParentFile().mkdir(); try { FileOutputStream fs = new FileOutputStream(pom); fs.write(getPom(releaseId).getBytes()); fs.close(); } catch (Exception e) { } KieMavenRepository repository = getKieMavenRepository(); repository.installArtifact(releaseId, kJar1, pom); }
@Before public void prepare() { KieServices ks = KieServices.Factory.get(); ReleaseId releaseId = ks.newReleaseId(GROUP_ID, ARTIFACT_ID, VERSION); List<String> processes = new ArrayList<String>(); processes.add("repo/processes/support/support.bpmn"); DeploymentDescriptor customDescriptor = new DeploymentDescriptorImpl("org.jbpm.domain"); customDescriptor.getBuilder() .addTaskEventListener(new ObjectModel("org.jbpm.services.cdi.test.ext.DebugTaskLifeCycleEventListener")); Map<String, String> resources = new HashMap<String, String>(); resources.put("src/main/resources/" + DeploymentDescriptor.META_INF_LOCATION, customDescriptor.toXml()); InternalKieModule kJar1 = createKieJar(ks, releaseId, processes, resources); File pom = new File("target/kmodule", "pom.xml"); pom.getParentFile().mkdir(); try { FileOutputStream fs = new FileOutputStream(pom); fs.write(getPom(releaseId).getBytes()); fs.close(); } catch (Exception e) { } KieMavenRepository repository = getKieMavenRepository(); repository.deployArtifact(releaseId, kJar1, pom); }
@Test public void testJmsAuditCacheInstance() throws Exception { KieServices ks = KieServices.Factory.get(); ReleaseId releaseId = ks.newReleaseId("org.jbpm.test.jms", "kjar-jms-audit", "1.0.0"); customDescriptor.getBuilder() .auditMode(AuditMode.JMS); Map<String, String> resources = new HashMap<String, String>(); resources.put("src/main/resources/" + DeploymentDescriptor.META_INF_LOCATION, customDescriptor.toXml());
@Override public List<ValidationMessage> validate(Path path, DeploymentDescriptorModel content) { final List<ValidationMessage> validationMessages = new ArrayList<ValidationMessage>(); try { DeploymentDescriptor dd = unmarshal(path, content); // validate the content of the descriptor validationMessages.addAll(validateObjectModels(path, dd.getConfiguration())); validationMessages.addAll(validateObjectModels(path, dd.getEnvironmentEntries())); validationMessages.addAll(validateObjectModels(path, dd.getEventListeners())); validationMessages.addAll(validateObjectModels(path, dd.getGlobals())); validationMessages.addAll(validateObjectModels(path, dd.getMarshallingStrategies())); validationMessages.addAll(validateObjectModels(path, dd.getTaskEventListeners())); validationMessages.addAll(validateObjectModels(path, dd.getWorkItemHandlers())); // validate its structure dd.toXml(); } catch (Exception e) { final ValidationMessage msg = new ValidationMessage(); msg.setPath(path); msg.setLevel(Level.ERROR); msg.setText(e.getMessage()); validationMessages.add(msg); } return validationMessages; }
protected InternalKieModule createKieJar(KieServices ks, ReleaseId releaseId, List<String> resources, Map<String, String> extraResources, ReleaseId... dependencies) { KieFileSystem kfs = createKieFileSystemWithKProject(ks); kfs.writePomXML(getPom(releaseId, dependencies)); DeploymentDescriptor customDescriptor = createDeploymentDescriptor(); if (extraResources == null) { extraResources = new HashMap<String, String>(); } if (customDescriptor != null) { extraResources.put("src/main/resources/" + DeploymentDescriptor.META_INF_LOCATION, customDescriptor.toXml()); } for (String resource : resources) { kfs.write("src/main/resources/KBase-test/" + resource, ResourceFactory.newClassPathResource(resource)); } if (extraResources != null) { for (Map.Entry<String, String> entry : extraResources.entrySet()) { kfs.write(entry.getKey(), ResourceFactory.newByteArrayResource(entry.getValue().getBytes())); } } KieBuilder kieBuilder = ks.newKieBuilder(kfs); if (!kieBuilder.buildAll().getResults().getMessages().isEmpty()) { for (Message message : kieBuilder.buildAll().getResults().getMessages()) { logger.error("Error Message: ({}) {}", message.getPath(), message.getText()); } throw new RuntimeException("There are errors builing the package, please check your knowledge assets!"); } return (InternalKieModule) kieBuilder.getKieModule(); }
if (manager.getEnvironment().getKieBase().getProcess(migrationSpec.getToProcessId()) == null) { report.addEntry(Type.ERROR, "No process found for " + migrationSpec.getToProcessId() + " in deployment " + migrationSpec.getToDeploymentId()); String auditPu = manager.getDeploymentDescriptor().getAuditPersistenceUnit(); EntityManagerFactory emf = EntityManagerFactoryManager.get().getOrCreate(auditPu); EntityManager em = emf.createEntityManager(); try {
DeploymentDescriptor descriptor = getRuntimeManager().getDeploymentDescriptor(); AbstractAuditLogger auditLogger = null; if ("true".equals(System.getProperty("jbpm.audit.jms.enabled")) || descriptor.getAuditMode() == AuditMode.JMS) { try { Properties properties = new Properties(); properties.load(getRuntimeManager().getEnvironment().getClassLoader().getResourceAsStream("/jbpm.audit.jms.properties")); } else if (descriptor.getAuditMode() == AuditMode.JPA){ if (descriptor.getPersistenceUnit().equals(descriptor.getAuditPersistenceUnit())) { auditLogger = AuditLoggerFactory.newJPAInstance(engine.getKieSession().getEnvironment()); } else { auditLogger = new JPAWorkingMemoryDbLogger(EntityManagerFactoryManager.get().getOrCreate(descriptor.getAuditPersistenceUnit()));
@PostConstruct public void configureDelegate() { UserGroupCallback callback = UserDataServiceProvider.getUserGroupCallback(); HumanTaskConfigurator configurator = HumanTaskServiceFactory.newTaskServiceConfigurator() .entityManagerFactory( emf ) .userGroupCallback( callback ); DeploymentDescriptorManager manager = new DeploymentDescriptorManager("org.jbpm.domain"); DeploymentDescriptor descriptor = manager.getDefaultDescriptor(); // in case there is descriptor with enabled audit register then by default if (!descriptor.getAuditMode().equals(AuditMode.NONE)) { JPATaskLifeCycleEventListener listener = new JPATaskLifeCycleEventListener(false); BAMTaskEventListener bamListener = new BAMTaskEventListener(false); // if the audit persistence unit is different than default for the engine perform proper init if (!"org.jbpm.domain".equals(descriptor.getAuditPersistenceUnit())) { EntityManagerFactory emf = EntityManagerFactoryManager.get().getOrCreate(descriptor.getAuditPersistenceUnit()); listener = new JPATaskLifeCycleEventListener(emf); bamListener = new BAMTaskEventListener(emf); } configurator.listener( listener ); configurator.listener( bamListener ); } delegate = (InternalTaskService) configurator.getTaskService(); }
@Produces @Audit public TransactionalCommandService produceAuditCommandService() { DeploymentDescriptorManager manager = new DeploymentDescriptorManager("org.jbpm.domain"); DeploymentDescriptor descriptor = manager.getDefaultDescriptor(); if (!"org.jbpm.domain".equals(descriptor.getAuditPersistenceUnit())) { return new TransactionalCommandService( EntityManagerFactoryManager.get().getOrCreate(descriptor.getAuditPersistenceUnit()) ); } return new TransactionalCommandService( emf ); } }
public void createDeploymentDescriptor( @Observes NewProjectEvent newProjectEvent ) { KieProject project = (KieProject) newProjectEvent.getProject(); URI projectRootURI = URI.create( project.getRootPath().toURI() ); String repositoryAlias = projectRootURI.getHost(); String metaInfPath = Paths.convert( project.getKModuleXMLPath() ).getParent().toUri().toString(); String separator = Paths.convert( project.getRootPath() ).getFileSystem().getSeparator(); String deploymentDescriptorPath = metaInfPath + separator + "kie-deployment-descriptor.xml"; Path ddVFSPath = ioService.get( URI.create( deploymentDescriptorPath ) ); if ( !ioService.exists( ddVFSPath ) ) { DeploymentDescriptor dd = new DeploymentDescriptorManager( "org.jbpm.domain" ).getDefaultDescriptor(); Set<String> groups = new HashSet<String>( project.getGroups() ); Repository repo = repositoryService.getRepository( repositoryAlias ); if ( repo != null ) { groups.addAll( repo.getGroups() ); } dd.getBuilder().setRequiredRoles( new ArrayList<String>( groups ) ); String xmlDescriptor = dd.toXml(); ioService.write( ddVFSPath, xmlDescriptor ); } }
protected void addTaskCleanUpProcessListener(final KModuleDeploymentUnit unit, final InternalKieContainer kieContainer) { final DeploymentDescriptor descriptor = getDeploymentDescriptor(unit, kieContainer); descriptor.getBuilder().addEventListener( new ObjectModel( "mvel", "new org.jbpm.services.task.admin.listener.TaskCleanUpProcessEventListener(taskService)" ) ); unit.setDeploymentDescriptor(descriptor); }
protected Map<String, WorkItemHandler> getWorkItemHandlersFromDescriptor(RuntimeEngine runtime) { Map<String, WorkItemHandler> defaultHandlers = new HashMap<String, WorkItemHandler>(); DeploymentDescriptor descriptor = getRuntimeManager().getDeploymentDescriptor(); if (descriptor != null) { Map<String, Object> params = getParametersMap(runtime); for (NamedObjectModel model : descriptor.getWorkItemHandlers()) { Object hInstance = getInstanceFromModel(model, getRuntimeManager().getEnvironment().getClassLoader(), params); if (hInstance != null) { defaultHandlers.put(model.getName(), (WorkItemHandler) hInstance); } } } return defaultHandlers; }
@Override public String toSource(Path path, DeploymentDescriptorModel model) { try { return unmarshal(path, model).toXml(); } catch (Exception e) { throw ExceptionUtilities.handleException(e); } }