docs: public static RuntimeEnvironmentBuilder getDefault(ReleaseId releaseId, String kbaseName, String ksessionName) {
      	KieMavenRepository repository = KieMavenRepository.getKieMavenRepository();
          repository.resolveArtifact(releaseId.toExternalForm());
      	KieServices ks = KieServices.Factory.get();
      	KieContainer kieContainer = ks.newKieContainer(releaseId);
      	
      	DeploymentDescriptorManager descriptorManager = new DeploymentDescriptorManager();
          List<DeploymentDescriptor> descriptorHierarchy = DeploymentDescriptorManagerUtil.getDeploymentDescriptorHierarchy(descriptorManager, kieContainer);
      	DeploymentDescriptorMerger merger = new DeploymentDescriptorMerger();
  		DeploymentDescriptor descriptor = merger.merge(descriptorHierarchy, MergeMode.MERGE_COLLECTIONS);
  
          if (StringUtils.isEmpty(kbaseName)) {
              KieBaseModel defaultKBaseModel = ((KieContainerImpl)kieContainer).getKieProject().getDefaultKieBaseModel();
              if (defaultKBaseModel != null) {
                  kbaseName = defaultKBaseModel.getName();
              } else {
                  kbaseName = DEFAULT_KBASE_NAME;
              }
          }
          InternalKieModule module = (InternalKieModule) ((KieContainerImpl)kieContainer).getKieModuleForKBase(kbaseName);
          if (module == null) {
              throw new IllegalStateException("Cannot find kbase, either it does not exist or there are multiple default kbases in kmodule.xml");
          }
          KieBase kbase = kieContainer.getKieBase(kbaseName);
  
  		RuntimeEnvironmentBuilder builder = null;
  		if (descriptor.getPersistenceMode() == PersistenceMode.NONE) {
  			builder = getDefaultInMemory();
  		} else {
  			builder = getDefault();
  		}
  		Map<String, Object> contaxtParams = new HashMap<String, Object>();
  		contaxtParams.put("classLoader", kieContainer.getClassLoader());
  		// populate various properties of the builder
  		if (descriptor.getPersistenceUnit() != null) {
  			EntityManagerFactory emf = EntityManagerFactoryManager.get().getOrCreate(descriptor.getPersistenceUnit());
  			builder.entityManagerFactory(emf);
  			contaxtParams.put("entityManagerFactory", emf);
  		}
  		
  		// 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)
  		.knowledgeBase(kbase)
  		.classLoader(kieContainer.getClassLoader())
  		.registerableItemsFactory(new KModuleRegisterableItemsFactory(kieContainer, ksessionName));
  		
          return builder;
      }