Skip to content

[URMF] VersionManager

Jinyoung Jang edited this page Oct 17, 2016 · 5 revisions

VersionManager

Class Members

[VersionManager.java] *- [Version.java]

버전의 구성은 major number 와 minor number 로 구성되고, 각기 majorVersionUp() 메서드와 minorVersionUp() 메서드에 의하여 1씩 증가한다.

major.minor

versionUp() method 그리고 majorVersionUp(), minorVersionUp()

private void versionUp(Version lastVersion) throws Exception {
    //copy dev to new version.
    IContainer dev = new ContainerResource();
    dev.setPath(rootPath);

    IContainer newVersion = new ContainerResource();
    newVersion.setPath(versionDirectoryOf(lastVersion)); // 새 버전의 디렉토리 위치

    resourceManager.getStorage().copy(dev, newVersion.getPath());

    if(isMakeThisVersionAsProduction()){
        MetaworksRemoteService.autowire(lastVersion);
        lastVersion.makeAsProduction(this);
    }

    MetaworksRemoteService.wrapReturn(new Label("<div class='alert alert-success' role='alert'>Version has been set as " + lastVersion.getMajor() + "." + lastVersion.getMinor() + "</div>"));
}

버전별 저장 위치

resourceManager.getStorage().copy(dev, newVersion.getPath()) 에 의하여 현재 수정중인 폴더의 복사본을 만들어 새 버전의 폴더로 복제한다. 새 버전의 폴더 위치는 versionDirectoryOf(lastVersion) 메서드에 의하여 구해지며 아래와 같이 구성된다:

protected String versionDirectoryOf(Version version) {
    return appName + “_versions/" + version.getMajor() + "." + version.getMinor();
}

uEngine BPM에서 appName 은 “codi” 이다. 따라서, 아래와 같이 현재 폴더에서의 정의 파일의 위치와 특정 버전의 파일위치가 대응된다:

codi/package/Model.process   <— 현재 편집중인 위치
codi_versions/1.1/package/Model.process   <— 1.1 버전의 위치

프로덕션 버전의 정보

버전은 versionUp 메서드가 호출될때마다 (VersionManager UI 에서 major version up, minor version up 버튼을 클릭할때마다) 생성된다. 생성된 버전 중에서 어떤 버전을 프로덕션 버전으로 지정할 것인가는 프로덕션 세팅에 의해서 지정된다.

프로덕션 버전 정보 파일 - version.info.xml

프로덕션 버전에 대한 정보는 Version.java 를 serialize 한 xml을 해당 appFolder (uEngine BPM 의 경우는 “codi”) 이하에 저장한다. 이 파일을 읽어들이면 프로덕션 정보를 얻어낼 수 있다.

protected DefaultResource getProductionVersionInfo() {
    DefaultResource productionInfoXML = new DefaultResource();
    productionInfoXML.setPath(getRootPath() + ".version.info.xml");

    return productionInfoXML;
}

프로덕션 처리 - Version.makeAsProduction

@ServiceMethod(callByContent = true, target = ServiceMethod.TARGET_SELF)
public void makeAsProduction(@AutowiredFromClient VersionManager versionManager) throws Exception {

    DefaultResource productionInfoXML = versionManager.getProductionVersionInfo();

    ResourceManager resourceManager = MetaworksRemoteService.getComponent(ResourceManager.class);

    resourceManager.getStorage().save(productionInfoXML, this);
    setProduction(true);
}

package 별 version 관리 기능

package 별로 별도 version 을 관리해야 하는 경우 다음과 같은 구조를 생각할 수 있다.

codi/package/Model.process   <— 현재 편집중인 위치
codi_versions/package/1.1/Model.process   <— package 의 1.1 버전의 위치

요청되는 resource path 에 대한 버전별 실제 위치를 리턴하는 로직은 아래와 같이 변형되면 된다.

package org.uengine.modeling.resource;

public class PackageVersionManager extends VersionManager{

    @Override
    protected String versionDirectoryOf() {

        String[] pathElements = getRootPath().split("/");

        String appName = pathElements[0];
        String packageName = pathElements[1];

        String versionPath = appName + VERSION_DIR + "/" + packageName;

        return versionPath;
    }


}

Clone this wiki locally