V7.0 마이그레이션 도구에서 작성되지 않은 변경

EGL 버전 7.0으로 마이그레이션할 때, 마이그레이션 도구는 필요한 변경을 일부 작성하지 않을 수 있습니다.

프로젝트 빌더 업데이트

마이그레이션된 프로젝트를 V7.0 작업공간으로 가져올 때, 기본 빌드 디스크립터가 누락되어 파트를 생성할 수 없다고 생성 결과 보기에 표시됩니다. 이는 기본 빌드 디스크립터를 설정한 경우에도 발생할 수 있습니다.

이 문제를 해결하려면, EGL 고급 빌더가 EGL 빌드 파트 모델 빌더 및 EGL 유효성 검증 빌더 이후 나열되도록 프로젝트의 빌더를 업데이트하십시오.

이 방식으로 빌드 순서를 편집하려면 다음을 수행하십시오.
  1. 프로젝트 탐색기 보기에서 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 특성을 클릭하십시오.
  2. 특성 창에서 빌더를 클릭하십시오.
  3. 빌더 페이지에서 EGL 고급 빌더를 선택하십시오.
  4. 아래쪽 화살표 단추를 사용하여 EGL 빌드 파트 모델 빌더EGL 유효성 검증 빌더 아래의 EGL 고급 빌더를 옮기십시오.
  5. 확인을 클릭하십시오.

특성 해석의 변경

EGL 특성과 동일한 이름으로 파트를 정의하는 경우 EGL은 EGL 특성이 아니라 사용자 정의된 파트로 해당 이름에 대한 참조를 해석할 수 있습니다.

DECIMAL 유형에 길이 추가

stringAsDecimal 함수를 마이그레이션한 경우, 마이그레이션 도구가 DECIMAL 유형에 캐스트를 추가하여 이전 코드의 동작을 유지보수할 수도 있습니다. 이 경우 수동으로 길이를 추가해야 합니다.

예를 들어, 다음 이전 코드를 가정하십시오.
myStringNumber string = "5";
myResult decimal(7,2);
myResult = stringAsDecimal(myStringNumber) + 5;
이 도구는 이 코드를 다음으로 마이그레이션합니다.
myStringNumber string = "5";
myResult decimal(7,2);
myResult = myStringNumber as decimal() + 5;
길이를 DECIMAL 유형에 추가하십시오.
myStringNumber string = "5";
myResult decimal(7,2);
myResult = myStringNumber as decimal(7,2) + 5;

변수 또는 함수 이름 바꾸기

사용자는 이름이 동일한 변수 및 함수를 논리 파트 내에 포함할 수 없습니다. 변수 또는 함수의 이름을 바꾸십시오.

피호출 프로그램에 소괄호 추가

call 명령문의 대상인 프로그램에 매개변수 목록이 있어야 합니다. 이 매개변수 목록은 비어 있을 수 있으나, 매개변수 목록을 표시하는 소괄호가 현재 필요합니다.

오래된 서비스 참조 제거

마이그레이션 도구는 사용자가 마이그레이션하는 프로젝트의 메타데이터 파일에서 오래된 서비스 참조를 제거하려고 합니다. 그러나 다음과 같은 상황에서는 참조를 제거할 수 없습니다.
  • IBM® WebSphere® Application Server 개발 도구 선택적 컴포넌트를 설치하지 않았거나 해당 버전이 IBM WebSphere Application Server 및 관련 개발 도구를 포함하지 않았습니다.
  • 마이그레이션 도구를 실행하지 않은 프로젝트에 Java™ 코드를 생성하는 중입니다.
어느 경우에서든 수동으로 메타데이터 파일에서 오래된 서비스 참조를 제거해야 합니다.
  • EGL 웹 프로젝트의 경우 서비스 참조를 웹 배치 디스크립터 파일에 수동으로 추가한 경우 파일에서 EGL 생성 서비스 참조를 삭제하고 수동으로 추가된 참조를 보관하십시오. 서비스 참조를 파일에 수동으로 추가하지 않은 경우 파일을 삭제해야 합니다. 대부분의 J2EE 버전에서, 웹 배치 디스크립터의 이름은 web.xml이고 프로젝트의 WebContent/WEB-INF 폴더에 있습니다. J2EE 1.3에서 파일의 이름은 webservicesclient.xml이고 동일한 장소에 있습니다.
  • 마찬가지로, ibm-webservicesclient-ext.xmiibm-webservicesclient-bnd.xmi 파일에서 EGL 생성 서비스 참조를 제거하십시오. 이는 WebContent/WEB-INF에도 있습니다. 이러한 파일에 수동으로 참조를 추가하지 않은 경우 파일을 삭제할 수 있지만 필수는 아닙니다.

JSF 핸들러에서 변수 유형 변경

JSF 핸들러에 있는 변수의 selectType 특성이 index로 설정되어 있는 경우, 해당 변수가 INT 유형이어야 합니다.

selectFromListItem 특성 사용

변수에 selectFromListItem 특성이 있을 때, 특성의 값은 레코드 내에서 레코드 어레이 또는 기본 변수의 어레일 수 없습니다. 유효한 유형은 레코드 내에 없는 기본 변수의 어레이 또는 데이터 테이블 열입니다. 선택 옵션의 목록으로 레코드 내에서 기본 변수의 어레이 또는 레코드 어레이를 사용하려면 selectedRowItem 또는 selectedValueItem 특성을 사용하십시오.

일치하는 레코드 또는 어레이 유형을 통해 속성 가져오기 및 설정

다음 j2eeLib GET 함수에서 리턴된 값을 수신하는 데 사용된 어레이 또는 레코드의 유형이 해당하는 SET 함수에서 속성을 설정하는 데 사용된 인수와 동일한 유형이어야 합니다.
  • getRequestAttr()
  • getSessionAttr()
  • getApplicationAttr()

getRequestAttr()에서 리턴된 값은 런타임 오류를 막기 위해 setRequestAttr()에 대해 사용한 인수와 동일한 유형이어야 합니다.

EGL V7.0은 오브젝트에서 비즈니스 데이터만 저장하여 힙 스토리지 요구사항을 줄입니다.

밑줄이 포함된 생성된 이름의 변경

EGL 이름이 Java 이름에서 올바르지 않은 문자를 포함하는 경우 고유한 이름을 유지하기 위한 알고리즘이 변경되었습니다. 현재 밑줄 문자("_")는 올바르지 않은 문자의 16진수 값에 선행합니다. 현재 밑줄이 포함된 EGL 이름에서 생성된 Java 이름에는 005 16진 값이 포함됩니다.

예를 들어, EGL이 EGL 이름 under_score_test에 해당하는 다음 Java 이름을 생성합니다.
  • 버전 6: under_score_test
  • 버전 7: under_005fscore_005ftest

모든 프로그램이 버전 7에서 재생성되면 이로 인해 EGL 프로그램 간에 문제점이 발생하지 않습니다. 그러나 EGL 프로그램을 호출하는 비EGL 프로그램이 수정되어야 밑줄이 포함된 이름의 새 양식을 사용할 수 있습니다. 이는 Jasper 보고서 또는 EGL 서비스의 비EGL 클라이언트를 포함합니다.

구조화된 레코드 매개변수의 생성된 WSDL의 변경

서비스 매개변수의 WSDL 정의를 생성하기 위한 알고리즘이 구조화된 레코드에 대해 버전 7에서 다른 코드를 생성합니다. 서비스를 호출하는 클라이언트를 수정해야 새 매개변수 이름으로 서비스를 호출할 수 있습니다.

"in" 함수 매개변수로 어레이의 동작 해석

어레이에 대해 매개변수 정의에서 in 수정자를 사용하는 경우 인수 요소 유형이 매개변수 요소 유형과 동일해야 합니다.

예를 들어, 다음 순서가 EGL 버전 6에서 유효하지만, 버전 7에서 올바르지 않은 것으로 태그됩니다.
function main();
  arrayArg CHAR(50)[ ] = ["A", "B", "C"];
  showArray (arrayArg);  // invalid statement in Version 7
end
function showArray (arrrayParm CHAR(100) [ ] in)
  i, iEnd INT;
  iEnd = size (arrayParm);
  for (i from 1 to iEnd)
    writeStdOut (arrayParm[i]);
  endend

arrayParmin 수정자는 함수가 호출되고 인수가 함수에 대한 입력에서 임시 변수에 지정되는 경우 임시 로컬 변수가 매개변수에 대해 할당됨을 의미합니다. 버전 6에서, 지정으로 인해 인수 어레이의 사본이 작성됩니다. 버전 7에서 지정은 어레이에 대한 참조입니다. 버전 7의 어레이 지정이 요소 유형이 동일한 어레이 간에 있어야 하므로 main()showArray() 호출이 버전 7에서 오류로 플래그 지정됩니다.

두 가지 방법으로 이 상황을 해결할 수 있습니다.
  1. move 명령문을 사용하여 매개변수 선언과 호환 가능한 인수의 임시 사본을 작성하십시오.
    function main() ;
      arrayArg CHAR(50)[ ] = ["A", "B", "C"];
      	tempArrayArg CHAR(100) [ ];
    	  move arrayArg to tempArrayArg;
    	  showArray (tempArrayArg);
    	end
  2. 새 어레이가 각 함수 호출에서 작성되지 않도록 어레이 요소 유형을 동일하게 변경하십시오. 다음 예제에서, 고객 애플리케이션이 Java에 대해 생성되므로 요소 유형이 STRING으로 변경되는데, 여기서 STRING 유형이 CHAR보다 더 잘 수행합니다.
    function main();
      arrayArg STRING[ ] = ["A", "B", "C"];
      showArray (arrayArg);  // invalid statement in Version 7
    end
    function showArray (arrrayParm STRING[ ] in)
      i, iEnd INT;
      iEnd = size (arrayParm);
      for (i from 1 to iEnd)
        writeStdOut (arrayParm[i]);
      endend

링크 확장자 변경

JSF 페이지의 링크가 forward to url 명령문 및 displayUse = hyperlink로 정의된 변수의 action 특성에서 지정됩니다. URL 또는 조치가 .jsp로 끝나는 리터럴 값으로 지정되는 경우 EGL 버전 7 마이그레이션 도구가 링크 확장자를 .jsp에서 .faces로 자동으로 변경합니다. 이는 링크 값이 .jsp로 끝나지 않거나 값이 리터럴이 아니라 변수에서 제공되는 경우 수동으로 변경해야 합니다.

defaultDateFormat 빌드 디스크립터 옵션 변경

버전 7의 문자열 대 날짜 변환에서 문자열에 있는 일, 월 및 연도의 순서가 defaultDateFormat 빌드 디스크립터 옵션에 있는 일, 월 및 연도의 순서와 동일해야 합니다. 이 빌드 디스크립터 옵션이 지정되지 않은 경우 기본값에 대해서는 defaultDateFormat(빌드 디스크립터 옵션)의 내용을 참조하십시오.

버전 6의 변환 알고리즘은 yyyyMMdd 형식입니다. 따라서 날짜 값이 "20050810" 등과 같은 경우 명시적으로 defaultDateFormat 빌드 디스크립터 옵션을 yyyyMMdd로 설정한 경우가 아니면 버전 7에서 오류가 발생할 수 있습니다.

인쇄 양식에 대해 빌드 디스크립터 정의

VisualAge® Generator 및 EGL 버전 6에서, 인쇄 양식에 대한 기본 10진수 및 구분 기호 문자가 런타임 설치 에 대해 지정된 언어 종속 옵션 모듈에서 발생했습니다. 버전 7부터 decimalSymbolseparatorSymbol 빌드 디스크립터 옵션이 해당 문자를 판별합니다. 버전 7 이상에서, decimalSymbol 옵션의 기본값은 마침표이고 separatorSymbol 옵션의 기본값은 쉼표입니다. 이러한 값이 사용자의 위치에 적합하지 않은 경우 명시적으로 이러한 빌드 디스크립터 옵션을 설정해야 합니다.

기타 빌드 디스크립터 옵션 고려사항

최근 버전의 EGL에서 시간에 따라 변경된 동작에 영향을 미치는 몇몇 빌드 디스크립터 옵션을 소개했습니다. 마이그레이션 중인 소스 EGL 버전을 감안하여 이를 고려하십시오.
  • v60DecimalBehavior
  • v60NumWithCharBehavior
  • v60NumWithDateBehavior
  • v60SQLNullableBehavior
  • v71AddBehavior

피드백