@Override public String getContainerId(String alias, ContainerLocator locator) { KieContainerInstanceImpl kieContainerInstance = getContainer(alias, locator); if (kieContainerInstance == null) { return alias; } return kieContainerInstance.getContainerId(); }
protected void registerWithAlias(KieContainerInstanceImpl kieContainerInstance) { KieContainerResource containerResource = kieContainerInstance.getResource(); String alias = getContainerAlias(containerResource); List<KieContainerInstanceImpl> byAlias = containersByAlias.get(alias); if (byAlias == null) { byAlias = new ArrayList<>(); containersByAlias.put(alias, byAlias); } byAlias.add(kieContainerInstance); }
@Override public KieContainerInstanceImpl registerContainer(String id, KieContainerInstanceImpl kieContainerInstance) { synchronized ( containers ) { KieContainerInstanceImpl kci = containers.putIfAbsent(id, kieContainerInstance); if( kci != null && kci.getStatus() == KieContainerStatus.FAILED ) { // if previous container failed, allow override containers.put(id, kieContainerInstance); registerWithAlias(kieContainerInstance); return null; } registerWithAlias(kieContainerInstance); return kci; } }
@Override public KieContainerInstanceImpl unregisterContainer(String id) { KieContainerInstanceImpl containerInstance = containers.remove(id); removeFromAlias(containerInstance); return containerInstance; }
this.context = new KieServerRegistryImpl(); this.context.registerIdentityProvider(new JACCIdentityProvider()); this.context.registerStateRepository(repository);
@Override public KieContainerInstanceImpl getContainer(String alias, ContainerLocator locator) { KieContainerInstanceImpl containerInstance = getContainer(alias); if (containerInstance == null) { List<KieContainerInstanceImpl> aliasedContainers = containersByAlias.getOrDefault(alias, new ArrayList<KieContainerInstanceImpl>()); if (aliasedContainers.isEmpty()) { // since there are no containers for given alias reject it throw new IllegalArgumentException("Container '" + alias + "' is not instantiated or cannot find container for alias '" + alias + "'"); } String containerId = locator.locateContainer(alias, aliasedContainers); if (containerId == null) { throw new IllegalArgumentException("Cannot find container for alias '" + alias + "'"); } aliasedContainers.stream() .filter(kci -> kci.getContainerId().equals(containerId)) .findAny() .orElseThrow(() -> new IllegalArgumentException("Container '" + containerId + "' is not associated with alias '" + alias + "'")); return getContainer(containerId); } return containerInstance; }
protected void removeFromAlias(KieContainerInstanceImpl kieContainerInstance) { if (kieContainerInstance == null) { return; } KieContainerResource containerResource = kieContainerInstance.getResource(); String alias = getContainerAlias(containerResource); List<KieContainerInstanceImpl> byAlias = containersByAlias.get(alias); if (byAlias != null) { byAlias.remove(kieContainerInstance); } }