/** * This creates and fills a {@link RuntimeEnvironmentBuilder} instance, which is later used when * creating services. A lot of the logic here is used to process the information in the {@link * DeploymentDescriptor} instance, which is part of the {@link DeploymentUnit}. * * @param deploymentUnit The {@link KModuleDeploymentUnit}, which is filled by the method * @param deployedUnit The {@link DeployedUnit}, which is also filled by the method * @param kieContainer The {@link KieContainer}, which contains information needed to fill the * above two arguments * @param mode The {@link MergeMode} used to resolve conflicts in the {@link * DeploymentDescriptor}. * @return A {@link RuntimeEnvironmentBuilder} instance ready for use */ protected RuntimeEnvironmentBuilder boostrapRuntimeEnvironmentBuilder( KModuleDeploymentUnit deploymentUnit, DeployedUnit deployedUnit, KieContainer kieContainer, MergeMode mode) { DeploymentDescriptor descriptor = deploymentUnit.getDeploymentDescriptor(); if (descriptor == null || ((DeploymentDescriptorImpl) descriptor) .isEmpty()) { // skip empty descriptors as its default can override settings DeploymentDescriptorManager descriptorManager = new DeploymentDescriptorManager("org.jbpm.domain"); List<DeploymentDescriptor> descriptorHierarchy = descriptorManager.getDeploymentDescriptorHierarchy(kieContainer); descriptor = merger.merge(descriptorHierarchy, mode); deploymentUnit.setDeploymentDescriptor(descriptor); } else if (descriptor != null && !deploymentUnit.isDeployed()) { DeploymentDescriptorManager descriptorManager = new DeploymentDescriptorManager("org.jbpm.domain"); List<DeploymentDescriptor> descriptorHierarchy = descriptorManager.getDeploymentDescriptorHierarchy(kieContainer); descriptorHierarchy.add(0, descriptor); descriptor = merger.merge(descriptorHierarchy, mode); deploymentUnit.setDeploymentDescriptor(descriptor); } // first set on unit the strategy deploymentUnit.setStrategy(descriptor.getRuntimeStrategy()); // setting up runtime environment via builder RuntimeEnvironmentBuilder builder = null; if (descriptor.getPersistenceMode() == PersistenceMode.NONE) { builder = RuntimeEnvironmentBuilder.Factory.get().newDefaultInMemoryBuilder(); } else { builder = RuntimeEnvironmentBuilder.Factory.get().newDefaultBuilder(); } // populate various properties of the builder EntityManagerFactory emf = EntityManagerFactoryManager.get().getOrCreate(descriptor.getPersistenceUnit()); builder.entityManagerFactory(emf); Map<String, Object> contaxtParams = new HashMap<String, Object>(); contaxtParams.put("entityManagerFactory", emf); contaxtParams.put("classLoader", kieContainer.getClassLoader()); // process object models that are globally configured (environment entries, session // configuration) 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; index++; } // lastly add the main default strategy mStrategies[index] = new SerializablePlaceholderResolverStrategy(ClassObjectMarshallingStrategyAcceptor.DEFAULT); builder.addEnvironmentEntry(EnvironmentName.OBJECT_MARSHALLING_STRATEGIES, mStrategies); builder.addEnvironmentEntry("KieDeploymentDescriptor", descriptor); builder.addEnvironmentEntry("KieContainer", kieContainer); if (executorService != null) { builder.addEnvironmentEntry("ExecutorService", executorService); } // populate all assets with roles for this deployment unit List<String> requiredRoles = descriptor.getRequiredRoles(DeploymentDescriptor.TYPE_VIEW); if (requiredRoles != null && !requiredRoles.isEmpty()) { for (DeployedAsset desc : deployedUnit.getDeployedAssets()) { if (desc instanceof ProcessAssetDesc) { ((ProcessAssetDesc) desc).setRoles(requiredRoles); } } } // Classes 3: classes added from descriptor List<String> remoteableClasses = descriptor.getClasses(); if (remoteableClasses != null && !remoteableClasses.isEmpty()) { for (String className : remoteableClasses) { Class descriptorClass = null; try { descriptorClass = kieContainer.getClassLoader().loadClass(className); logger.debug( "Loaded {} into the classpath from deployment descriptor {}", className, kieContainer.getReleaseId().toExternalForm()); } catch (ClassNotFoundException cnfe) { throw new IllegalArgumentException("Class " + className + " not found in the project"); } catch (NoClassDefFoundError e) { throw new IllegalArgumentException("Class " + className + " not found in the project"); } addClassToDeployedUnit(descriptorClass, (DeployedUnitImpl) deployedUnit); } } return builder; }
public void onInit() { EntityManagerFactoryManager.get().addEntityManagerFactory("org.jbpm.domain", getEmf()); }