use of org.wso2.ballerinalang.compiler.packaging.repo.Repo in project carbon-business-process by wso2.
the class TenantProcessStoreImpl method undeploy.
/**
* Undeploying BPEL package.
*
* @param bpelPackageName Name of the BPEL package which going to be undeployed
*/
public void undeploy(String bpelPackageName) throws RegistryException, BPELUIException {
if (log.isDebugEnabled()) {
log.debug("Un-deploying BPEL package " + bpelPackageName + " ....");
}
if (!repository.isExistingBPELPackage(bpelPackageName)) {
// This can be a situation where we un-deploy the archive through management console,
// so that, the archive is deleted from the repo. As a result this method get invoked.
// to handle this case we just log the message but does not throw an exception.
final String warningMsg = "Cannot find BPEL package with name " + bpelPackageName + " in the repository. If the bpel package is un-deployed through the management" + " console or if this node is a member of a cluster, please ignore this warning.";
if (isConfigRegistryReadOnly()) {
// This is for the deployment synchronizer scenarios where package un-deployment on a worker node
// has to remove the deployed bpel package from the memory and remove associated services
handleUndeployOnSlaveNode(bpelPackageName);
} else {
log.warn(warningMsg);
}
return;
}
if (repository.isExistingBPELPackage(bpelPackageName) && isConfigRegistryReadOnly()) {
log.warn("This node seems to be a slave, since the configuration registry is in read-only mode, hence " + "processes cannot be directly undeployed from this node. Please undeploy the process in Master " + "node first.");
return;
}
List<String> versionsOfThePackage;
try {
versionsOfThePackage = repository.getAllVersionsForPackage(bpelPackageName);
} catch (RegistryException re) {
String errMessage = "Cannot get all versions of the package " + bpelPackageName + " from registry.";
log.error(errMessage);
throw re;
}
// check the instance count to be deleted
long instanceCount = getInstanceCountForPackage(versionsOfThePackage);
if (instanceCount > BPELServerImpl.getInstance().getBpelServerConfiguration().getBpelInstanceDeletionLimit()) {
throw new BPELUIException("Instance deletion limit reached.");
}
for (String nameWithVersion : versionsOfThePackage) {
parentProcessStore.deleteDeploymentUnitDataFromDB(nameWithVersion);
Utils.deleteInstances(getProcessesInPackage(nameWithVersion));
// location for extracted BPEL package
String bpelPackageLocation = parentProcessStore.getLocalDeploymentUnitRepo().getAbsolutePath() + File.separator + tenantId + File.separator + nameWithVersion;
File bpelPackage = new File(bpelPackageLocation);
// removing extracted bpel package at repository/bpel/0/
deleteBpelPackageFromRepo(bpelPackage);
for (QName pid : getProcessesInPackage(nameWithVersion)) {
ProcessConfigurationImpl processConf = (ProcessConfigurationImpl) getProcessConfiguration(pid);
// This property is read when we removing the axis service for this process.
// So that we can decide whether we should persist service QOS configs
processConf.setUndeploying(true);
}
}
try {
repository.handleBPELPackageUndeploy(bpelPackageName);
} catch (RegistryException re) {
String errMessage = "Cannot update the BPEL package repository for undeployment of" + "package " + bpelPackageName + ".";
log.error(errMessage);
throw re;
}
updateLocalInstanceWithUndeployment(bpelPackageName, versionsOfThePackage);
// We should use the deployment synchronizer, instead of the code below.
// parentProcessStore.sendProcessDeploymentNotificationsToCluster(
// new BPELPackageUndeployedCommand(versionsOfThePackage, bpelPackageName, tenantId),
// configurationContext);
}
use of org.wso2.ballerinalang.compiler.packaging.repo.Repo in project carbon-business-process by wso2.
the class TenantProcessStoreImpl method findBPELPackageInFileSystem.
private File findBPELPackageInFileSystem(DeploymentUnitDAO dudao) {
String duName = dudao.getName();
// Done: Fix the logic to handle registry
log.info("Looking for BPEL package in file system for deployment unit " + duName);
File bpelDUDirectory = new File(bpelDURepo, duName);
if (bpelDUDirectory.exists()) {
return bpelDUDirectory;
} else {
String registryCollectionPath = dudao.getDeploymentUnitDir();
try {
if (tenantConfigRegistry.resourceExists(registryCollectionPath)) {
if (!bpelDUDirectory.exists() && !bpelDUDirectory.mkdirs()) {
String errMsg = "Error creating BPEL deployment unit repository for " + "tenant " + tenantId;
log.error(errMsg);
log.error("Failed to load BPEL deployment unit " + duName + " due to above error.");
throw new BPELDeploymentException(errMsg);
}
boolean deployedOnCarbon310 = false;
// Check whether the registry repo is of type carbon 3.1.0
if (tenantConfigRegistry.resourceExists(registryCollectionPath + RegistryConstants.PATH_SEPARATOR + duName)) {
registryCollectionPath += RegistryConstants.PATH_SEPARATOR + duName;
deployedOnCarbon310 = true;
if (log.isDebugEnabled()) {
log.debug("Found a carbon 3.1.0 compatible deployment unit at " + registryCollectionPath);
}
}
RegistryClientUtils.exportFromRegistry(bpelDUDirectory, registryCollectionPath, tenantConfigRegistry);
if (deployedOnCarbon310) {
if (log.isDebugEnabled()) {
log.debug("Recompiling the carbon 3.1.0 compatible deployment unit at " + bpelDUDirectory);
}
// Re-compiling to get rid of binary compatibility issues.
DeploymentUnitDir du = new DeploymentUnitDir(bpelDUDirectory);
for (File file : du.allFiles()) {
if (file.getAbsolutePath().endsWith(".cbp") && !file.delete()) {
log.warn("Unable to delete " + file);
}
}
du.compile();
}
return bpelDUDirectory;
} else {
String errMsg = "Expected resource: " + registryCollectionPath + " not found in the registry";
log.error(errMsg);
throw new BPELDeploymentException(errMsg);
}
} catch (RegistryException re) {
String errMsg = "Error while exporting deployment unit: " + duName + " to file system from the registry.";
log.error(errMsg, re);
throw new BPELDeploymentException(errMsg, re);
}
}
}
use of org.wso2.ballerinalang.compiler.packaging.repo.Repo in project carbon-business-process by wso2.
the class BPELUploader method uploadService.
public void uploadService(UploadedFileItem[] fileItems) throws AxisFault {
// First lets filter for jar resources
ConfigurationContext configurationContext = getConfigContext();
String repo = configurationContext.getAxisConfiguration().getRepository().getPath();
if (CarbonUtils.isURL(repo)) {
throw new AxisFault("URL Repositories are not supported: " + repo);
}
// Writting the artifacts to the proper location
String bpelDirectory = repo + File.separator + BPELConstants.BPEL_REPO_DIRECTORY;
String bpelTemp = CarbonUtils.getCarbonHome() + BPELConstants.BPEL_PACKAGE_TEMP_DIRECTORY;
File bpelTempDir = new File(bpelTemp);
if (!bpelTempDir.exists() && !bpelTempDir.mkdirs()) {
throw new AxisFault("Fail to create the directory: " + bpelTempDir.getAbsolutePath());
}
File bpelDir = new File(bpelDirectory);
if (!bpelDir.exists() && !bpelDir.mkdirs()) {
throw new AxisFault("Fail to create the directory: " + bpelDir.getAbsolutePath());
}
for (UploadedFileItem uploadedFile : fileItems) {
String fileName = uploadedFile.getFileName();
if (fileName == null || fileName.equals("")) {
throw new AxisFault("Invalid file name. File name is not available");
}
if (uploadedFile.getFileType().equals(BPELConstants.BPEL_PACKAGE_EXTENSION)) {
try {
writeResource(uploadedFile.getDataHandler(), bpelTemp, fileName, bpelDir);
} catch (IOException e) {
throw new AxisFault("IOError: Writing resource failed.", e);
}
} else {
throw new AxisFault("Invalid file type : " + uploadedFile.getFileType() + " ." + BPELConstants.BPEL_PACKAGE_EXTENSION + " file type is expected");
}
}
}
use of org.wso2.ballerinalang.compiler.packaging.repo.Repo in project carbon-business-process by wso2.
the class BPELPackageManagementServiceSkeleton method listDeployedPackagesPaginated.
public DeployedPackagesPaginated listDeployedPackagesPaginated(int page, String packageSearchString) throws PackageManagementException {
int tPage = page;
List<BPELPackageInfo> packages;
DeployedPackagesPaginated paginatedPackages = new DeployedPackagesPaginated();
TenantProcessStoreImpl tenantProcessStore = getTenantProcessStore();
BPELPackageRepository packageRepo = tenantProcessStore.getBPELPackageRepository();
try {
// Can return null and we should handle that
packages = packageRepo.getBPELPackages();
} catch (Exception e) {
String errorMessage = "Cannot get the BPEL Package list from repository.";
log.error(errorMessage, e);
throw new PackageManagementException(errorMessage, e);
}
if (packages != null) {
// Calculating pagination information
if (tPage < 0 || tPage == Integer.MAX_VALUE) {
tPage = 0;
}
int startIndex = tPage * BPELConstants.ITEMS_PER_PAGE;
int endIndex = (tPage + 1) * BPELConstants.ITEMS_PER_PAGE;
int numberOfPackages = packages.size();
int totalPackages = 0;
BPELPackageInfo[] packagesArray = packages.toArray(new BPELPackageInfo[numberOfPackages]);
for (int i = 0; i < numberOfPackages; i++) {
if (!packagesArray[i].getName().toLowerCase().contains(packageSearchString.toLowerCase())) {
continue;
}
int count = getPackageVersionCount(packagesArray[i]);
if (totalPackages + count > startIndex && totalPackages < endIndex) {
// In-order to get the total number of packages count
// if (totalPackages >= endIndex) {
// break;
// }
int maxRemainingPackages = totalPackages < startIndex && (totalPackages + count) > startIndex ? startIndex - (totalPackages + count) : endIndex - totalPackages;
PackageType packageType = getPackageInfo(packagesArray[i], maxRemainingPackages);
paginatedPackages.add_package(packageType);
}
totalPackages += count;
}
int pages = (int) Math.ceil((double) totalPackages / BPELConstants.ITEMS_PER_PAGE);
paginatedPackages.setPages(pages);
} else {
// Returning empty result set with pages equal to zero for cases where null is returned from
// BPEL repo.
paginatedPackages.setPages(0);
}
return paginatedPackages;
}
use of org.wso2.ballerinalang.compiler.packaging.repo.Repo in project carbon-business-process by wso2.
the class BPELPackageManagementServiceSkeleton method listDeployedPackagesPaginated.
public DeployedPackagesPaginated listDeployedPackagesPaginated(int page) throws PackageManagementException {
int tPage = page;
List<BPELPackageInfo> packages;
DeployedPackagesPaginated paginatedPackages = new DeployedPackagesPaginated();
TenantProcessStoreImpl tenantProcessStore = getTenantProcessStore();
BPELPackageRepository packageRepo = tenantProcessStore.getBPELPackageRepository();
try {
// Can return null and we should handle that
packages = packageRepo.getBPELPackages();
} catch (Exception e) {
String errorMessage = "Cannot get the BPEL Package list from repository.";
log.error(errorMessage, e);
throw new PackageManagementException(errorMessage, e);
}
if (packages != null) {
// Calculating pagination information
if (tPage < 0 || tPage == Integer.MAX_VALUE) {
tPage = 0;
}
int startIndex = tPage * BPELConstants.ITEMS_PER_PAGE;
int endIndex = (tPage + 1) * BPELConstants.ITEMS_PER_PAGE;
int numberOfPackages = packages.size();
int totalPackages = 0;
BPELPackageInfo[] packagesArray = packages.toArray(new BPELPackageInfo[numberOfPackages]);
for (int i = 0; i < numberOfPackages; i++) {
int count = getPackageVersionCount(packagesArray[i]);
if (totalPackages + count > startIndex && totalPackages < endIndex) {
// In-order to get the total number of packages count
// if (totalPackages >= endIndex) {
// break;
// }
int maxRemainingPackages = totalPackages < startIndex && (totalPackages + count) > startIndex ? startIndex - (totalPackages + count) : endIndex - totalPackages;
PackageType packageType = getPackageInfo(packagesArray[i], maxRemainingPackages);
paginatedPackages.add_package(packageType);
}
totalPackages += count;
}
int pages = (int) Math.ceil((double) totalPackages / BPELConstants.ITEMS_PER_PAGE);
paginatedPackages.setPages(pages);
} else {
// Returning empty result set with pages equal to zero for cases where null is returned from
// BPEL repo.
paginatedPackages.setPages(0);
}
return paginatedPackages;
}
Aggregations