'분류 전체보기'에 해당되는 글 2491건

  1. 2013.03.21 LoaderInfo
  2. 2013.03.21 flash swf 에서 flex swf 파일 로드하기...
  3. 2013.03.20 [펌] Sprite의 width/height 프라퍼티에 숨겨진 비밀(?)
  4. 2013.03.20 blazeds remoteobject 예제
  5. 2013.03.19 [펌] Flex Builder 3에서 RemoteObject를 설정하고 사용하는 방법을 알아본다
  6. 2013.03.18 [펌] Linkage Class for 돌리기
  7. 2013.03.15 AdvancedDataGrid itemRenderer(2)
  8. 2013.03.15 AdvancedDataGrid itemRenderer
  9. 2013.03.12 Flex SWF <-> Flash SWF
  10. 2013.03.12 flash flex Local Connections
  11. 2013.03.07 ibatis 간단 예제
  12. 2013.03.06 [펌] 이클립스에서 자바 클래스 decompile 결과 보기
  13. 2013.03.05 [펌] [플래시] 무비클립 여러개 링크걸기
  14. 2013.03.05 [펌] iBatis 로그보기 - log4j 설정 1
  15. 2013.02.27 eGovFrame sample project 생성시 에러 pom.xml 1
  16. 2013.02.25 [펌] actionscript 3.0 컴파일 에러
  17. 2013.02.18 [펌] Java development 2.0: Hadoop MapReduce로 대용량 데이터 분석
  18. 2013.02.18 [펌] 스프링배치 국내 자료 모음
  19. 2013.02.13 JSP - Tiles를 이용한 레이아웃 템플릿 처리
  20. 2013.02.13 [펌] 자바스크립트 페이지에 오류가있을때 alert창 띄우기
  21. 2013.02.06 [펌] 오라클 페이징 기법
  22. 2013.02.05 TOAD for Oracle Freeware 9.7
  23. 2013.02.05 Skinning Flex 4 Components – Skinning the Spark Panel Component
  24. 2013.02.05 mx:Panel
  25. 2013.01.11 [펌] eclipse 빠르게 열기
  26. 2012.12.17 [펌] [공유] 코어 자바스크립트 - 강좌 모음
  27. 2012.12.06 [추천 플러그인] jqueryWTP : Eclipse jQuery Code Assist Plugin
  28. 2012.12.06 jQueryWTP 1.2.0
  29. 2012.12.06 java doc 만들때 주석
  30. 2012.12.06 AVD Manager error failed to execute tools android.bat error 2
00.Flex,Flash,ActionScript2013. 3. 21. 14:36
반응형

패키지 flash.display
클래스 public class LoaderInfo
상속 LoaderInfo Inheritance EventDispatcher Inheritance Object

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

LoaderInfo 클래스는 로드된 SWF 파일 또는 로드된 이미지 파일(JPEG, GIF, PNG)에 대한 정보를 제공합니다. LoaderInfo 객체는 어떤 표시 객체에서도 사용할 수 있습니다. 제공되는 정보에는 로드 진행률, 로더의 URL 및 로드된 내용, 해당 미디어의 총 바이트 수, 미디어의 공칭 높이 및 폭이 포함됩니다.

두 가지 방법으로 LoaderInfo 객체에 액세스할 수 있습니다.

  • flash.display.Loader 객체의 contentLoaderInfo 속성 - contentLoaderInfo 속성은 모든 Loader 객체에서 언제든지 사용할 수 있습니다. load() 또는 loadBytes() 메서드를 호출하지 않았거나 제대로 로드되지 않은 Loader 객체의 경우, contentLoaderInfo 속성의 여러 속성에 액세스하려고 시도하면 오류가 발생합니다.
  • 표시 객체의 loaderInfo 속성

Loader 객체의 contentLoaderInfo 속성은 Loader 객체가 로드 중인 내용에 대한 정보를 제공하는 반면, DisplayObject 의 loaderInfo 속성은 해당 표시 객체의 루트 SWF 파일에 대한 정보를 제공합니다.

Loader 객체로 로드된 객체(SWF 파일 또는 비트맵)의 loaderInfo 속성은 Loader 객체의 contentLoaderInfo 속성과 동일한 LoaderInfo 객체를 가리킵니다. 즉, 로드된 객체 파일과 이를 로드한 Loader 객체가 하나의 LoaderInfo 객체를 공유합니다. SWF 파일의 기본 클래스 인스턴스에 Loader 객체가 없으므로 loaderInfo 속성이 SWF 파일 기본 클래스 인스턴스의 LoaderInfo에 액세스할 수 있는 유일한 방법입니다.

다음 다이어그램에서는 LoaderInfo 객체의 여러 가지 용도, 즉 SWF 파일의 기본 클래스 인스턴스, Loader 객체의 contentLoaderInfo 속성, 로드된 객체의 loaderInfo 속성으로 사용되는 것을 보여 줍니다.

로딩 작업이 완료되지 않았을 때 Loader 객체의 contentLoaderInfo 속성에서 일부 속성은 사용할 수 없습니다. bytesLoaded, bytesTotal, url, loaderURLapplicationDomain과 같은 일부 속성은 얻을 수 있습니다. loaderInfo 객체가 init 이벤트를 전달할 때 loaderInfo 객체 및 로드된 이미지 또는 SWF 파일의 모든 속성에 액세스할 수 있습니다.

참고: LoaderInfo 객체의 모든 속성은 읽기 전용입니다.

EventDispatcher.dispatchEvent() 메서드는 LoaderInfo 객체에 적용할 수 없습니다. LoaderInfo 객체에서 dispatchEvent()를 호출하면 IllegalOperationError 예외가 발생합니다.

예제를 통해 확인하십시오.

참고 사항


 


Public 속성
속성 다음에 의해 정의됨
actionScriptVersion : uint
[read-only] 로드된 SWF 파일의 ActionScript 버전입니다.
LoaderInfo
applicationDomain : ApplicationDomain
[read-only] 외부 SWF 파일을 로드할 때, 로드된 클래스에 포함된 모든 ActionScript 3.0 정의는 applicationDomain 속성에 저장됩니다.
LoaderInfo
bytes : ByteArray
[read-only] LoaderInfo 객체와 연관된 바이트입니다.
LoaderInfo
bytesLoaded : uint
[read-only] 해당 미디어에 대해 로드된 바이트 수입니다.
LoaderInfo
bytesTotal : uint
[read-only] 전체 미디어 파일에서 압축된 바이트 수입니다.
LoaderInfo
childAllowsParent : Boolean
[read-only] 내용(자식)의 로더(부모)에 대한 신뢰 관계를 표현합니다.
LoaderInfo
Inherited constructor : Object
지정된 객체 인스턴스의 클래스 객체 또는 생성자 함수에 대한 참조입니다.
Object
content : DisplayObject
[read-only] 이 LoaderInfo 객체와 연관된 로드된 객체입니다.
LoaderInfo
contentType : String
[read-only] 로드된 파일의 MIME 유형입니다.
LoaderInfo
frameRate : Number
[read-only] 로드된 SWF 파일의 공칭 프레임 속도(초당 프레임 수)입니다.
LoaderInfo
height : int
[read-only] 로드된 파일의 공칭 높이입니다.
LoaderInfo
loader : Loader
[read-only] 이 LoaderInfo 객체와 연관된 Loader 객체입니다.
LoaderInfo
loaderURL : String
[read-only] 이 LoaderInfo 객체가 설명하는 미디어의 로딩을 시작한 SWF 파일의 URL입니다.
LoaderInfo
parameters : Object
[read-only] 로드된 SWF 파일에 제공된 매개 변수를 나타내는 이름 값 쌍이 포함된 객체입니다.
LoaderInfo
parentAllowsChild : Boolean
[read-only] Loader(부모)의 내용(자식)에 대한 신뢰 관계를 표현합니다.
LoaderInfo
Inherited prototype : Object
[static] 클래스 또는 함수 객체의 프로토타입 객체에 대한 참조입니다.
Object
sameDomain : Boolean
[read-only] 로더와 내용 간의 도메인 관계를 표현합니다. 원래 도메인이 동일하면 true이고, 그렇지 않으면 false입니다.
LoaderInfo
sharedEvents : EventDispatcher
[read-only] 보안 경계선 너머로 이벤트를 교환하는 데 사용할 수 있는 EventDispatcher 인스턴스입니다.
LoaderInfo
swfVersion : uint
[read-only] 로드된 SWF 파일의 파일 형식 버전입니다.
LoaderInfo
url : String
[read-only] 로드 중인 미디어의 URL입니다.
LoaderInfo
width : int
[read-only] 로드된 내용의 공칭 폭입니다.
LoaderInfo
Public 메서드
메서드 다음에 의해 정의됨
Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
리스너에서 이벤트 알림을 받을 수 있도록 EventDispatcher 객체에 이벤트 리스너 객체를 등록합니다.
EventDispatcher
Inherited
이벤트를 이벤트 흐름으로 전달합니다.
EventDispatcher
[static] 객체로 정의된 SWF 파일과 연관된 LoaderInfo 객체를 반환합니다.
LoaderInfo
Inherited
EventDispatcher 객체에 특정 유형의 이벤트에 대한 리스너가 등록되어 있는지 여부를 확인합니다.
EventDispatcher
Inherited
지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다.
Object
Inherited
Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다.
Object
Inherited
지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다.
Object
Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
EventDispatcher 객체에서 리스너를 제거합니다.
EventDispatcher
Inherited
루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다.
Object
Inherited
지정된 객체의 문자열 표현을 반환합니다.
Object
Inherited
지정된 객체의 프리미티브 값을 반환합니다.
Object
Inherited
이 EventDispatcher 객체 또는 조상 객체에 지정한 이벤트 유형에 대한 이벤트 리스너가 등록되어 있는지 여부를 확인합니다.
EventDispatcher
이벤트
이벤트 요약 다음에 의해 정의됨
Inherited Flash Player가 운영 체제에서 포커스를 얻어 활성화될 때 전달됩니다. EventDispatcher
데이터가 성공적으로 로드되면 전달됩니다. LoaderInfo
Inherited Flash Player가 운영 체제에서 포커스를 잃고 비활성화될 때 전달됩니다. EventDispatcher
HTTP를 통해 네트워크 요청이 이루어지고 Flash Player가 해당 HTTP 상태 코드를 감지할 수 있을 때 전달됩니다. LoaderInfo
로드된 SWF 파일의 속성 및 메서드에 액세스할 수 있을 때 전달됩니다. LoaderInfo
로드 작업 실패를 유발하는 입력 또는 출력 오류가 발생할 때 전달됩니다. LoaderInfo
로드 작업이 시작될 때 전달됩니다. LoaderInfo
다운로드 작업이 진행되어 데이터가 수신될 때 전달됩니다. LoaderInfo
Loader 객체의 unload() 메서드를 사용하여 로드된 객체를 제거할 때마다, 또는 동일한 Loader 객체를 통해 두 번째 로드를 수행하고 로드를 시작하기에 앞서 원본 내용을 제거할 때 LoaderInfo 객체에 의해 전달됩니다. LoaderInfo
속성 정보
actionScriptVersion 속성
actionScriptVersion:uint [read-only]

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

로드된 SWF 파일의 ActionScript 버전입니다. 언어 버전은 ActionScriptVersion.ACTIONSCRIPT2ActionScriptVersion.ACTIONSCRIPT3과 같이 ActionScriptVersion 클래스의 열거 유형을 사용하여 지정됩니다.

참고: 이 속성은 항상 ActionScriptVersion.ACTIONSCRIPT2 또는 ActionScriptVersion.ACTIONSCRIPT3 중 하나를 값으로 갖습니다. ActionScript 1.0 및 2.0 모두 ActionScriptVersion.ACTIONSCRIPT2(버전 2.0)로 보고됩니다. 이 속성에서는 ActionScript 1.0 및 2.0을 ActionScript 3.0과 구분할 뿐입니다.


구현
public function get actionScriptVersion():uint

오류
Error — 요청한 정보를 검색할 수 있을 만큼 파일이 다운로드되지 않은 경우입니다.
Error — 파일이 SWF 파일이 아닌 경우입니다.

참고 사항

applicationDomain 속성
applicationDomain:ApplicationDomain [read-only]

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

외부 SWF 파일을 로드할 때, 로드된 클래스에 포함된 모든 ActionScript 3.0 정의는 applicationDomain 속성에 저장됩니다.

SWF 파일의 모든 코드는 응용 프로그램 도메인에 존재하도록 정의됩니다. 현재 응용 프로그램 도메인은 주 응용 프로그램이 실행되는 위치입니다. 시스템 도메인에는 현재 도메인을 포함하여 모든 응용 프로그램 도메인이 포함되므로 모든 Flash Player 클래스가 들어 있습니다.

시스템 도메인을 제외한 모든 응용 프로그램 도메인에는 연관된 부모 도메인이 있습니다. 기본 응용 프로그램 applicationDomain의 부모 도메인은 시스템 도메인입니다. 로드된 클래스는 부모에서 아직 정의되지 않은 경우에만 정의됩니다. 로드된 클래스 정의를 새 정의를 사용하여 재정의할 수는 없습니다.

응용 프로그램 도메인 사용법 관련 예제는 ActionScript 3.0 프로그래밍의 "클라이언트 시스템 환경" 장을 참조하십시오.


구현
public function get applicationDomain():ApplicationDomain

오류
SecurityError — 호출자의 이 보안 샌드박스는 이 ApplicationDomain에 액세스할 수 없습니다.

참고 사항

bytes 속성
bytes:ByteArray [read-only]

언어 버전 : ActionScript 3.0

LoaderInfo 객체와 연관된 바이트입니다.


구현
public function get bytes():ByteArray

오류
SecurityError — 이 API에 액세스하는 객체가 보안 제한 사항 때문에 로드된 객체에 액세스할 수 없는 경우입니다. 예를 들어, Loader 객체가 contentLoaderInfo.content 속성에 대한 액세스를 시도하는데 로드된 내용에 액세스할 수 있는 보안 권한이 부여되지 않은 경우에 해당됩니다.

자세한 내용은 ActionScript 3.0 프로그래밍의 "Flash Player 보안" 장을 참조하십시오.

플레이어 버전: Flash Player 9 업데이트 3.

bytesLoaded 속성
bytesLoaded:uint [read-only]

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

해당 미디어에 대해 로드된 바이트 수입니다. 이 숫자가 bytesTotal 값과 동일하면 모든 바이트가 로드된 것입니다.


구현
public function get bytesLoaded():uint
bytesTotal 속성
bytesTotal:uint [read-only]

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

전체 미디어 파일에서 압축된 바이트 수입니다.

이 LoaderInfo 객체의 Loader 객체가 첫 번째 progress 이벤트를 전달하기 전에 bytesTotal은 0입니다. Loader 객체에서 첫 번째 progress 이벤트 발생 후 bytesTotal에서 다운로드할 실제 바이트 수가 반영됩니다.


구현
public function get bytesTotal():uint

참고 사항

childAllowsParent 속성
childAllowsParent:Boolean [read-only]

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

내용(자식)의 로더(부모)에 대한 신뢰 관계를 표현합니다. 자식이 부모의 액세스를 허용한 경우 true이며, 그렇지 않으면 false입니다. 자식 객체가 allowDomain() 메서드를 호출하여 부모 도메인에게 권한을 부여한 경우 또는 크로스 도메인 정책이 자식 도메인에 로드되어 부모 도메인에게 권한을 부여한 경우 이 속성은 true로 설정됩니다. 부모와 자식이 같은 도메인에 있으면 이 속성은 true로 설정됩니다.

자세한 내용은 ActionScript 3.0 프로그래밍의 "Flash Player 보안" 장을 참조하십시오.


구현
public function get childAllowsParent():Boolean

오류
Error — 요청한 정보를 검색할 수 있을 만큼 파일이 다운로드되지 않았을 때 발생합니다.
content 속성
content:DisplayObject [read-only]

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

이 LoaderInfo 객체와 연관된 로드된 객체입니다.


구현
public function get content():DisplayObject

오류
SecurityError — 이 API에 액세스하는 객체가 보안 제한 사항 때문에 로드된 객체에 액세스할 수 없는 경우입니다. 예를 들어, Loader 객체가 contentLoaderInfo.content 속성에 대한 액세스를 시도하는데 로드된 내용에 액세스할 수 있는 보안 권한이 부여되지 않은 경우에 해당됩니다.

자세한 내용은 ActionScript 3.0 프로그래밍의 "Flash Player 보안" 장을 참조하십시오.

contentType 속성
contentType:String [read-only]

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

로드된 파일의 MIME 유형입니다. Flash Player가 유형을 결정하기에 충분할 만큼 파일이 로드되지 않은 경우 이 값은 null입니다. 다음 목록에 나열된 값을 가질 수 있습니다.

  • "application/x-shockwave-flash"
  • "image/jpeg"
  • "image/gif"
  • "image/png"


구현
public function get contentType():String
frameRate 속성
frameRate:Number [read-only]

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

로드된 SWF 파일의 공칭 프레임 속도(초당 프레임 수)입니다. 이 숫자는 정수인 경우가 많지만 반드시 정수일 필요는 없습니다.

이 값은 실제 사용 중인 프레임 속도와 다를 수 있습니다. Flash Player에서는 모든 로드된 SWF 파일에 대해 한 번에 하나의 프레임 속도만 사용하며, 이 프레임 속도는 기본 SWF 파일의 공칭 프레임 속도에 의해 결정됩니다. 또한 하드웨어, 사운드 동기화 및 기타 요인에 의해 Flash Player가 기본 프레임 속도에 도달하지 못할 수도 있습니다.


구현
public function get frameRate():Number

오류
Error — 요청한 정보를 검색할 수 있을 만큼 파일이 다운로드되지 않은 경우입니다.
Error — 파일이 SWF 파일이 아닌 경우입니다.
height 속성
height:int [read-only]

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

로드된 파일의 공칭 높이입니다. 이 값은 내용이 표시되는 실제 높이와 다를 수 있습니다. 로드된 내용 또는 그 부모 표시 객체의 크기가 조절될 수 있기 때문입니다.


구현
public function get height():int

오류
Error — 요청한 정보를 검색할 수 있을 만큼 파일이 다운로드되지 않은 경우입니다.
loader 속성
loader:Loader [read-only]

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

이 LoaderInfo 객체와 연관된 Loader 객체입니다. 이 LoaderInfo 객체가 SWF 파일 기본 클래스 인스턴스의 loaderInfo 속성이면 연관된 Loader 객체가 없습니다.


구현
public function get loader():Loader

오류
SecurityError — 이 API에 액세스하는 객체가 보안 제한 사항 때문에 Loader 객체에 액세스할 수 없는 경우입니다. 예를 들어, 로드된 SWF 파일이 loaderInfo.loader 속성에 대한 액세스를 시도하는데 로드 중인 SWF 파일에 액세스할 수 있는 보안 권한이 부여되지 않은 경우에 해당됩니다.

자세한 내용은 ActionScript 3.0 프로그래밍의 "Flash Player 보안" 장을 참조하십시오.

loaderURL 속성
loaderURL:String [read-only]

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

이 LoaderInfo 객체가 설명하는 미디어의 로딩을 시작한 SWF 파일의 URL입니다. SWF 파일 기본 클래스의 인스턴스에서 이 URL은 SWF 파일 자체의 URL과 동일합니다.


구현
public function get loaderURL():String
parameters 속성
parameters:Object [read-only]

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

로드된 SWF 파일에 제공된 매개 변수를 나타내는 이름 값 쌍이 포함된 객체입니다.

for-in 루프를 사용하여 parameters 객체에서 모든 이름 및 값을 추출할 수 있습니다.

매개 변수의 두 가지 소스는 기본 SWF 파일 URL의 쿼리 문자열과 FlashVars HTML 매개 변수 값(기본 SWF 파일에만 영향을 미침)입니다.

parameters 속성은 ActionScript 1.0 및 2.0에서 SWF 파일 매개 변수를 기본 타임라인의 속성으로 제공하는 기법을 대체합니다.

ActionScript 1.0 또는 2.0을 사용하는 SWF 파일이 포함된 Loader 객체의 경우 parameters 속성 값이 null입니다. ActionScript 3.0을 사용하는 SWF 파일이 포함된 Loader 객체의 경우에만 이 값이 null이 아닙니다.


구현
public function get parameters():Object
parentAllowsChild 속성
parentAllowsChild:Boolean [read-only]

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

Loader(부모)의 내용(자식)에 대한 신뢰 관계를 표현합니다. 부모가 자식의 액세스를 허용한 경우 true이며, 그렇지 않으면 false입니다. 부모 객체가 allowDomain() 메서드를 호출하여 자식 도메인에게 권한을 부여한 경우 또는 크로스 도메인 정책이 부모 도메인에 로드되어 자식 도메인에게 권한을 부여한 경우 이 속성은 true로 설정됩니다. 부모와 자식이 같은 도메인에 있으면 이 속성은 true로 설정됩니다.

자세한 내용은 ActionScript 3.0 프로그래밍의 "Flash Player 보안" 장을 참조하십시오.


구현
public function get parentAllowsChild():Boolean

오류
Error — 요청한 정보를 검색할 수 있을 만큼 파일이 다운로드되지 않았을 때 발생합니다.
sameDomain 속성
sameDomain:Boolean [read-only]

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

로더와 내용 간의 도메인 관계를 표현합니다. 원래 도메인이 동일하면 true이고, 그렇지 않으면 false입니다.


구현
public function get sameDomain():Boolean

오류
Error — 요청한 정보를 검색할 수 있을 만큼 파일이 다운로드되지 않았을 때 발생합니다.
sharedEvents 속성
sharedEvents:EventDispatcher [read-only]

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

보안 경계선 너머로 이벤트를 교환하는 데 사용할 수 있는 EventDispatcher 인스턴스입니다. 로더 및 로드된 대상이 서로 신뢰하지 않더라도 양쪽 모두 sharedEvents에 액세스할 수 있습니다.


구현
public function get sharedEvents():EventDispatcher
swfVersion 속성
swfVersion:uint [read-only]

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

로드된 SWF 파일의 파일 형식 버전입니다. 파일 형식은 SWFVersion.FLASH7SWFVersion.FLASH9와 같이 SWFVersion 클래스의 열거 유형을 사용하여 지정됩니다.


구현
public function get swfVersion():uint

오류
Error — 요청한 정보를 검색할 수 있을 만큼 파일이 다운로드되지 않은 경우입니다.
Error — 파일이 SWF 파일이 아닌 경우입니다.

참고 사항

url 속성
url:String [read-only]

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

로드 중인 미디어의 URL입니다.

이 LoaderInfo 객체의 Loader 객체가 첫 번째 progress 이벤트를 전달하기 전에는 Loader 객체의 load() 메서드를 호출할 때 지정된 초기 URL만 url 속성 값에 반영될 수 있습니다. 첫 번째 progress 이벤트가 발생한 후 url 속성은 모든 리디렉션 및 상대 URL이 처리된 후 미디어의 최종 URL을 반영합니다.


구현
public function get url():String

참고 사항

width 속성
width:int [read-only]

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

로드된 내용의 공칭 폭입니다. 이 값은 내용이 표시되는 실제 폭과 다를 수 있습니다. 로드된 내용 또는 그 부모 표시 객체의 크기가 조절될 수 있기 때문입니다.


구현
public function get width():int

오류
Error — 요청한 정보를 검색할 수 있을 만큼 파일이 다운로드되지 않은 경우입니다.
메서드 정보
getLoaderInfoByDefinition () 메서드
public static function getLoaderInfoByDefinition(object:Object):LoaderInfo

언어 버전 : ActionScript 3.0

객체로 정의된 SWF 파일과 연관된 LoaderInfo 객체를 반환합니다.

플레이어 버전: Flash Player 9 업데이트 3.

매개 변수

object:Object — SWF 파일 객체입니다.

반환값
LoaderInfo — 연관된 LoaderInfo 객체입니다.
이벤트 정보
complete 이벤트
이벤트 객체 유형: flash.events.Event
Event.type property = flash.events.Event.COMPLETE

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

데이터가 성공적으로 로드되면 전달됩니다. complete 이벤트는 항상 init 이벤트 이후에 전달됩니다.

complete 이벤트 객체의 type 속성 값을 정의합니다.

이 이벤트에는 다음과 같은 속성이 있습니다.

속성
bubbles false
cancelable false; 취소할 기본 비헤이비어가 없습니다.
currentTarget 현재 이벤트 리스너를 통해 Event 객체를 처리하고 있는 객체입니다.
target 로드가 완료된 네트워크 객체입니다.

참고 사항

httpStatus 이벤트
이벤트 객체 유형: flash.events.HTTPStatusEvent
HTTPStatusEvent.type property = flash.events.HTTPStatusEvent.HTTP_STATUS

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

HTTP를 통해 네트워크 요청이 이루어지고 Flash Player가 해당 HTTP 상태 코드를 감지할 수 있을 때 전달됩니다.

httpStatus 이벤트 객체의 type 속성 값을 정의합니다.

이 이벤트에는 다음과 같은 속성이 있습니다.

속성
bubbles false
cancelable false; 취소할 기본 비헤이비어가 없습니다.
currentTarget 현재 이벤트 리스너를 통해 Event 객체를 처리하고 있는 객체입니다.
status 서버에 의해 반환된 HTTP 상태 코드입니다.
target HTTP 상태 코드를 수신하는 네트워크 객체입니다.

참고 사항

init 이벤트
이벤트 객체 유형: flash.events.Event
Event.type property = flash.events.Event.INIT

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

로드된 SWF 파일의 속성 및 메서드에 액세스할 수 있을 때 전달됩니다. 다음 두 조건이 존재할 경우 LoaderInfo 객체는 init 이벤트를 전달합니다.

  • 로드된 객체와 연관된 모든 속성 및 메서드, 그리고 LoaderInfo 객체와 연관된 모든 속성 및 메서드에 액세스 가능합니다.
  • 모든 자식 객체의 생성자가 완료되었습니다.

init 이벤트는 항상 complete 이벤트 이전에 전달됩니다.

init 이벤트 객체의 type 속성 값을 정의합니다.

이 이벤트에는 다음과 같은 속성이 있습니다.

속성
bubbles false
cancelable false; 취소할 기본 비헤이비어가 없습니다.
currentTarget 현재 이벤트 리스너를 통해 Event 객체를 처리하고 있는 객체입니다.
target 로드 중인 SWF 파일과 연관된 LoaderInfo 객체입니다.

참고 사항

ioError 이벤트
이벤트 객체 유형: flash.events.IOErrorEvent
IOErrorEvent.type property = flash.events.IOErrorEvent.IO_ERROR

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

로드 작업 실패를 유발하는 입력 또는 출력 오류가 발생할 때 전달됩니다.

ioError 이벤트 객체의 type 속성 값을 정의합니다.

이 이벤트에는 다음과 같은 속성이 있습니다.

속성
bubbles false
cancelable false; 취소할 기본 비헤이비어가 없습니다.
currentTarget 현재 이벤트 리스너를 통해 Event 객체를 처리하고 있는 객체입니다.
target 입력/출력 오류가 발생한 네트워크 객체입니다.
text 오류 메시지로 표시될 텍스트입니다.

참고 사항

open 이벤트
이벤트 객체 유형: flash.events.Event
Event.type property = flash.events.Event.OPEN

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

로드 작업이 시작될 때 전달됩니다.

open 이벤트 객체의 type 속성 값을 정의합니다.

이 이벤트에는 다음과 같은 속성이 있습니다.

속성
bubbles false
cancelable false; 취소할 기본 비헤이비어가 없습니다.
currentTarget 현재 이벤트 리스너를 통해 Event 객체를 처리하고 있는 객체입니다.
target 연결을 설정한 네트워크 객체입니다.

참고 사항

progress 이벤트
이벤트 객체 유형: flash.events.ProgressEvent
ProgressEvent.type property = flash.events.ProgressEvent.PROGRESS

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

다운로드 작업이 진행되어 데이터가 수신될 때 전달됩니다.

progress 이벤트 객체의 type 속성 값을 정의합니다.

이 이벤트에는 다음과 같은 속성이 있습니다.

속성
bubbles false
bytesLoaded 리스너가 이벤트를 처리할 때 로드된 항목 수 또는 바이트 수입니다.
bytesTotal 로드 프로세스가 완료되면 최종적으로 로드될 총 바이트 수 또는 항목 수입니다.
cancelable false; 취소할 기본 비헤이비어가 없습니다.
currentTarget 현재 이벤트 리스너를 통해 Event 객체를 처리하고 있는 객체입니다.
target 진행률을 보고하는 네트워크 객체입니다.

참고 사항

unload 이벤트
이벤트 객체 유형: flash.events.Event
Event.type property = flash.events.Event.UNLOAD

언어 버전 : ActionScript 3.0
Player 버전 : Flash Player 9

Loader 객체의 unload() 메서드를 사용하여 로드된 객체를 제거할 때마다, 또는 동일한 Loader 객체가 두 번째 로드를 실행하기 위해 먼저 원본 내용을 제거할 때 LoaderInfo 객체에 의해 전달됩니다.

unload 이벤트 객체의 type 속성 값을 정의합니다.

이 이벤트에는 다음과 같은 속성이 있습니다.

속성
bubbles false
cancelable false; 취소할 기본 비헤이비어가 없습니다.
currentTarget 현재 이벤트 리스너를 통해 Event 객체를 처리하고 있는 객체입니다.
target 언로드하거나 교체할 SWF 파일과 연관된 LoaderInfo 객체입니다.

참고 사항

LoaderInfoExample.as

다음 예제에서는 LoaderInfoExample 클래스를 사용하여 스테이지에 이미지를 표시합니다. 이는 다음 단계로 이루어집니다.
  1. 이미지의 이름과 위치를 나타내는 url 속성이 만들어집니다.
  2. 클래스 생성자가 loader라는 이름의 Loader 객체를 생성합니다.
  3. loader 객체가 이미지를 제대로 로드하기 위해 이벤트 리스너를 인스턴스화합니다.
  4. 생성자가 파일 이름 및 위치를 나타내도록 전달된 url이 있는 새 URLRequest 객체 request를 만듭니다.
  5. 그런 다음 request 객체가 loader 객체의 load() 메서드로 전달되며, 이 메서드는 이미지를 표시 목록으로 로드합니다.

중요: 이 예제에서는 컴파일된 SWF 파일과 같은 디렉토리에 Image.gif 파일이 있어야 합니다. 기본 SWF 파일의 크기에 알맞은 영역이 있는 이미지를 사용합니다.

package {
    import flash.display.Loader;
    import flash.display.LoaderInfo;
    import flash.display.Sprite;
    import flash.events.*;
    import flash.net.URLRequest;

    public class LoaderInfoExample extends Sprite {
        private var url:String = "Image.gif";

        public function LoaderInfoExample() {
            var loader:Loader = new Loader();
            loader.contentLoaderInfo.addEventListener(Event.INIT, initHandler);
            loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
            var request:URLRequest = new URLRequest(url);
            loader.load(request);
            addChild(loader);
        }

        private function initHandler(event:Event):void {
            var loader:Loader = Loader(event.target.loader);
            var info:LoaderInfo = LoaderInfo(loader.contentLoaderInfo);
            trace("initHandler: loaderURL=" + info.loaderURL + " url=" + info.url);
        }

        private function ioErrorHandler(event:IOErrorEvent):void {
            trace("ioErrorHandler: " + event);
        }
    }
}
Posted by 1010
00.Flex,Flash,ActionScript2013. 3. 21. 12:43
반응형

var loader:Loader = new Loader();
addChild
(loader);
loader
.load(new URLRequest("my-flex-app.swf"));
loader
.addEventListener("mx.managers.SystemManager.isBootstrapRoot", systemManagerHandler);
loader
.addEventListener("mx.managers.SystemManager.isStageRoot", systemManagerHandler);

function systemManagerHandler(event:Event):void { event.preventDefault(); }

 

이거때문에 삽질했음...T.T

 

Posted by 1010
00.Flex,Flash,ActionScript2013. 3. 20. 18:38
반응형

 

출ㅊ: http://cafe.naver.com/flexcomponent.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=3464

 

안녕하세요, 명랑늑대입니다. 이 카페에 가입한 후 첫 글을 남기게 되네요.

저는 최근에 Sprite을 상속한 클래스를 구현하다가 width, height(Sprite 클래스에 정의된 프라퍼티들)의 값을 생성자에서 변경하는 것이 잘 안 되는 문제를 겪었습니다.


카페를 검색해보니, 거친마루 님께서도 같은 문제를 겪으션던지 질문을 올리셨더군요.

http://cafe.naver.com/flexcomponent/2034

그런데 아직 해결되지 않은 의문인 건 같아서, 제가 좀더 파고 들어봤습니다.

Sprite 객체의 width/height 값을 변경하면 내부적으로 어떤 일이 일어나는가?

var aSprite:Sprite = new Sprite();

....

aSprite.width = 100;

위와 같이 Sprite 객체의 width 프라퍼티에 새 값을 대입하면, width의 값이 바뀌는 것으로 끝나지 않습니다.
Sprite에 정의된 scaleX, scaleY도 함께 변합니다(사실은 그 외에도 함께 바뀌는 프라퍼티들이 여럿 더 있습니다만, 이번 논의와는 직접적인 관련이 없으므로 언급하지 않겠습니다). 아시다시피 scaleX, scaleY는 스케일링에 관련된 놈들이죠.

그렇다면 width 값을 바꾸려고 했을 뿐인데, 왜 스케일링에 관련된 프라퍼티들이 *자동으로* 바뀌는가?

이는 전형적인 GUI 컴포넌트의 크기를 바꾸는 것과 Sprite의 크기를 바꾸는 행위가 전혀 다른 의미를 내포하고 있기 때문이라고 할 수 있습니다.

예를 들어, 여러 개의 하위 컴포넌트가 들어있는 컨테이너의 크기를 바꾸면 어떤 일이 일어나나요?

하위 컴포넌트들의 크기도 함께 변할 것입니다(아닐 수도 있지만). 심지어는 컴포넌트들의 배치가 달라지기도 합니다. 그래서 레이아웃의 개념이 들어가죠. 즉, 컨테이너의 크기가 바뀐 비율과는 상관없이 레이아웃 정책에 의해 너비만 늘어나거나 위치가 바뀌거나 합니다.

그러나 Sprite은 전통적인 의미에서의 GUI 컴포넌트가 아닙니다. 레퍼런스 문서에도 설명되어 있듯이 일종의 MovieClip이죠.
동영상 재생기의 윈도우 크기를 바꾸면 어떻게 됩니까? 재생하고 있는 동영상의 화면 크기가 그에 맞춰 스케일링 됩니다. 이건 상식적으로도 당연한 행동입니다.
Sprite의 행동도 이와 마찬가지입니다. Sprite의 크기를 바꾸면 그 자신이 화면에 그리는 내용은 물론이고 그 Sprite에 속해있는(아시다시피 Sprite은 DisplayObjectContainer입니다) 하위 DisplayObject들까지도 스케일링 됩니다.

즉, Sprite의 크기가 바뀌면 그 Sprite은 물론이고 다른 DisplayObject들의 스케일링까지 바꿔야 하므로, 크기가 얼마나 변했는지를 기억하고 있어야 합니다. 따라서 해당 프라퍼티인 scaleX, scaleY가 크기 변화와 함께 바뀌는 것이 당연하겠죠?

따라서 Sprite을 상속받은 클래스의 생성자에서 width/height의 값을 바꾸면 아무 소용이 없습니다.

왜냐하면, width/height의 초기값은 0이기 때문입니다.

예를 들어, width에 100을 대입하려고 하면 scaleX = newWidth / oldWidth이므로(정확한 공식은 아닙니다. scaleX의 이전 값을 고려해야 하죠 원래는) 100 / 0 = NaN, 즉 scaleX가 0이 됩니다.

그리고 width 값은 scaleX가 계산된 후에 scaleX * oldWidth가 되는 것 같습니다.

따라서 또한 0이 될 수 밖에 없죠.

(이 부분은 Sprite의 소스 코드가 없어서 확실하진 않습니다만, 개인적으로는 이렇게 추측합니다. 왜 그렇게 하는지는 모르겠구요. ㅎㅎ)

그리고 우리를 더 힘들게 만드는 문제점은 위와 같이 생성자에서 width/height에 값을 대입하고 나면, 이후에 무슨 짓을 해도 해당 Sprite이 화면에 나타나지 않는다는 점입니다.

scaleX 또는 scaleY가 0이 되므로 화면에 나타나지 않는게 당연합니다.

아시다시피 Sprite에 다른 DisplayObject를 add하거나 graphics에 뭔가를 그리면 Sprite의 width/height이 자동으로 바뀌지만, 스케일 팩터가 0이므로, 곱하고 나면 그릴 영역이 없습니다.

그렇다면 Sprite의 width/height 값은 언제 세팅하면 되는 것일까?

물론 width/height가 0이 아닐 때 세팅하면 되겠습니다. 즉, Sprite을 상속해서 만든 객체의 크기를 세팅하고 싶을 때에는 좀 귀찮지만 그 Sprite의 내용(하위 DisplayObject 또는 graphics에 직접 그린 내용)이 완성된 후에 하는 것이 가장 좋을 듯 합니다.

** 글을 쓰다보니 좀 길어졌네요.

혹시 UIComponent가 아니라 Sprite을 상대하다가 이런 비슷한 문제를 겪으신 분들께 조금이나마 도움이 됐으면 좋겠습니다.

 

Posted by 1010
00.Flex,Flash,ActionScript2013. 3. 20. 10:50
반응형

 

 

KB2TIMS_RemoteObject.zip

 

-- RemoteObjectTest.mxml --

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init();">
 <mx:Script>
  <![CDATA[
   import mx.messaging.ChannelSet;
   import mx.messaging.channels.AMFChannel;
    import mx.rpc.events.FaultEvent;
    import mx.rpc.events.ResultEvent;
    import mx.controls.Alert;
  
 private function init():void{
//  var amfChannel:AMFChannel = new AMFChannel("my-amf","http://localhost:5050//messagebroker/amf");
//     var channelSet:ChannelSet = new ChannelSet();
//     channelSet.addChannel(amfChannel);
//     Alert.show("init~");
   }
  
   private function resultHandler(event:ResultEvent):void{
    var msg:String = event.result as String;
    Alert.show("원격객체호출성공, "+msg);
   }
   private function faultHandler(event:FaultEvent):void{
    Alert.show("실패!!!!!"+event.toString());
   }
   private function remotoObjectCall():void{
  ro.getMsg();
   }
  ]]>
 </mx:Script>
 
 <mx:RemoteObject id="ro" destination="HelloRO" showBusyCursor="true" fault="faultHandler(event)">
  <mx:method name="getMsg" result="resultHandler(event)" />
 </mx:RemoteObject>
 
 <mx:Panel y="19" width="250" height="200" layout="absolute" horizontalCenter="0">
  <mx:Button y="39" label="원격객체호출" horizontalCenter="0" click="remotoObjectCall()"/>
 </mx:Panel>
 
</mx:Application>

 

 

-- callJavaObject.java --

 

package flex.remote.object;

import org.apache.log4j.Logger;

public class callJavaObject {
 
 private Logger logger = Logger.getLogger( this.getClass() );
 
 public callJavaObject() {
  // TODO Auto-generated constructor stub
  logger.debug("callJavaObject go~");
 }
 public String getMsg(){
  return "callJavaObject 호출됨";
 }
}

-- messaging-config.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<service id="message-service"
    class="flex.messaging.services.MessageService">

    <adapters>
        <adapter-definition id="actionscript" class="flex.messaging.services.messaging.adapters.ActionScriptAdapter" default="true" />
        <!-- <adapter-definition id="jms" class="flex.messaging.services.messaging.adapters.JMSAdapter"/> -->
    </adapters>

    <default-channels>
        <channel ref="my-polling-amf"/>
    </default-channels>

</service>

 

-- proxy-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<service id="proxy-service"
    class="flex.messaging.services.HTTPProxyService">

    <properties>
        <connection-manager>
            <max-total-connections>100</max-total-connections>
            <default-max-connections-per-host>2</default-max-connections-per-host>
        </connection-manager>
        <allow-lax-ssl>true</allow-lax-ssl>
    </properties>

    <adapters>
        <adapter-definition id="http-proxy" class="flex.messaging.services.http.HTTPProxyAdapter" default="true"/>
        <adapter-definition id="soap-proxy" class="flex.messaging.services.http.SOAPProxyAdapter"/>
    </adapters>

    <default-channels>
        <channel ref="my-amf"/>
    </default-channels>

    <destination id="DefaultHTTP">
    </destination>

</service>

-- remoting-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service"
    class="flex.messaging.services.RemotingService">

    <adapters>
        <adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/>
    </adapters>

    <default-channels>
        <channel ref="my-amf"/>
    </default-channels>
   
    <destination id="HelloRO">
  <properties>
   <source>flex.remote.object.callJavaObject</source>
  </properties>
 </destination>

</service>

 

-- services-config.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<services-config>

    <services>
        <service-include file-path="remoting-config.xml" />
        <service-include file-path="proxy-config.xml" />
        <service-include file-path="messaging-config.xml" />       
    </services>

    <security>
        <login-command class="flex.messaging.security.TomcatLoginCommand" server="Tomcat"/>
        <!-- Uncomment the correct app server
        <login-command class="flex.messaging.security.TomcatLoginCommand" server="JBoss">
  <login-command class="flex.messaging.security.JRunLoginCommand" server="JRun"/>       
        <login-command class="flex.messaging.security.WeblogicLoginCommand" server="Weblogic"/>
        <login-command class="flex.messaging.security.WebSphereLoginCommand" server="WebSphere"/>
        -->

        <!--
        <security-constraint id="basic-read-access">
            <auth-method>Basic</auth-method>
            <roles>
                <role>guests</role>
                <role>accountants</role>
                <role>employees</role>
                <role>managers</role>
            </roles>
        </security-constraint>
         -->
    </security>

    <channels>

        <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
            <endpoint url="http://{server.name}:{server.port}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
        </channel-definition>

        <channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel">
            <endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint"/>
            <properties>
                <add-no-cache-headers>false</add-no-cache-headers>
            </properties>
        </channel-definition>

        <channel-definition id="my-polling-amf" class="mx.messaging.channels.AMFChannel">
            <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amfpolling" class="flex.messaging.endpoints.AMFEndpoint"/>
            <properties>
                <polling-enabled>true</polling-enabled>
                <polling-interval-seconds>4</polling-interval-seconds>
            </properties>
        </channel-definition>

        <!--
        <channel-definition id="my-http" class="mx.messaging.channels.HTTPChannel">
            <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/http" class="flex.messaging.endpoints.HTTPEndpoint"/>
        </channel-definition>

        <channel-definition id="my-secure-http" class="mx.messaging.channels.SecureHTTPChannel">
            <endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/httpsecure" class="flex.messaging.endpoints.SecureHTTPEndpoint"/>
            <properties>
                <add-no-cache-headers>false</add-no-cache-headers>
            </properties>
        </channel-definition>
        -->
    </channels>

    <logging>
        <target class="flex.messaging.log.ConsoleTarget" level="Error">
            <properties>
                <prefix>[BlazeDS] </prefix>
                <includeDate>false</includeDate>
                <includeTime>false</includeTime>
                <includeLevel>false</includeLevel>
                <includeCategory>false</includeCategory>
            </properties>
            <filters>
                <pattern>Endpoint.*</pattern>
                <pattern>Service.*</pattern>
                <pattern>Configuration</pattern>
            </filters>
        </target>
    </logging>

    <system>
        <redeploy>
            <enabled>false</enabled>
            <!--
            <watch-interval>20</watch-interval>
            <watch-file>{context.root}/WEB-INF/flex/services-config.xml</watch-file>
            <watch-file>{context.root}/WEB-INF/flex/proxy-config.xml</watch-file>
            <watch-file>{context.root}/WEB-INF/flex/remoting-config.xml</watch-file>
            <watch-file>{context.root}/WEB-INF/flex/messaging-config.xml</watch-file>
            <watch-file>{context.root}/WEB-INF/flex/data-management-config.xml</watch-file>
            <touch-file>{context.root}/WEB-INF/web.xml</touch-file>
             -->
        </redeploy>
    </system>

</services-config>

Posted by 1010
00.Flex,Flash,ActionScript2013. 3. 19. 17:06
반응형

출처 : http://micropilot.tistory.com/category/Flex/RemoteObject

Flex Builder 3에서 RemoteObject를 설정하고 사용하는 방법을 알아본다

..........................................................................................................................................................................................
준비사항
..........................................................................................................................................................................................

Flex Builder 3 Eclipse Plugin (adobe.com)
Blazeds (adobe.com)- 다운로드 안내
Tomcat 5.5 (apache.org)
JDK 6 (java.sun.com)
Eclips 3.4 (eclipse.org)

...............................................................................................................................................................................
1. Blazeds를 adobe.com으로부터 다운로드하여 압축을 해제하면 blazeds.war 파일이 있는데, 이 파일은 완성된 웹컨텍스트이며 한개의 웹사이트를 웹컨테이너에 배포하기위한 포맷이므로 Eclipse에서 import하여 바로 편집이 가능한 상태이므로 RemoteObject기능을 설정하고 구현하기위한 매우 편리한 환경을 제공한다.

Blazeds는 Flex3에서 제공하는 서비스 중에서 LiveCycle Data Service 기능을 지원하는 라이브러리이며 freeware 상태로 배포되고 있고, 상용버전에 비해 Data Management Service 기능이 제거된 상태이다. 참고로, Data Management Service는 서버상의 데이터가 업데이트될 때 실시간으로 클라이언트 화면에도 변경된 데이터가 반영되게 할 수 있는 서비스이다.

아래의 그림은 blazeds.war 파일을 Eclipse로 import했을 직후의 프로젝트 상태이다.
WEB-INF/flex : RemoteObject를 구동하기 위한 설정파일들(*.xml)이 저장됨
WEB-INF/lib : RemoteObject를 구동하기 위한 자바 라이브러리들(*.jar)이 저장됨.
WEB-INF/web.xml : 톰캣이 요청을 받았을 경우에 blazeds 에 요청을 전달하여 flex.messaging.MessageBrokerServlet이 실행될 수 있도록 연결해 주는 역할을 한다


blazeds.war 파일을 임포트한 직후의 프로젝트 상태
...............................................................................................................................

사용자 삽입 이미지


































...............................................................................................................................................................................

web.xml (WEB-INF/web.xml)

<!-- MessageBroker Servlet -->
<servlet>
<servlet-name>MessageBrokerServlet</servlet-name>
<display-name>MessageBrokerServlet</display-name>
<servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
<init-param>
<param-name>services.configuration.file</param-name>
<param-value>/WEB-INF/flex/services-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>MessageBrokerServlet</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>

...............................................................................................................................................................................

service-config.xml (my-amf채널 확인)

<channels>

<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
<endpoint url="
http://{server.name}:{server.port}/{context.root}/messagebroker/amf"
class="flex.messaging.endpoints.AMFEndpoint"/>
</channel-definition>

<channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel">
<endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint"/>
<properties>
<add-no-cache-headers>false</add-no-cache-headers>
</properties>
</channel-definition>

위의 내용 중에서 {server.name}:{server.port}/{context.root} 부분은 브라우저의 요청 URL이며, 이 곳으로 요청을 하면 AMFChannel클래스가 실행되어 AMF(Action Message Format)프로토콜이 적용된다. 이 부분은 Flex Project를 생성할 때 프로젝트 설정창에서 입력하여 지정해 주면 된다. 참고로, AMF 프로토콜은 HTTP 프로토콜을 기반으로 하지만 XML포맷으로 응답하는 형식이 아니라 AMF라는 바이너리 포맷으로 응답을 하기 때문에 성능면에서 일반 HTTP 프로토콜로 통신하는 것보다 빠른 장점을 가지고 있다.

...............................................................................................................................................................................

remoting-config.xml (RemoteObject로 사용할 클래스를 등록함)

<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service"
class="flex.messaging.services.RemotingService">

<adapters>
<adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/>
</adapters>

<default-channels>
<channel ref="my-amf"/>
</default-channels>

<!-- This is added -->
<destination id="HelloRO">
<properties>
<source>test.HelloWorld</source>
</properties>
<channels>
<channel ref="my-amf"/>
</channels>
</destination>


</service>

위와같이 설정하여 Flex 클라이언트에서 'HelloRO' 라는 이름으로 요청을 할 때 my-amf 채녈을 경유하여 test.HelloWorld클래스가 실행되도록 설정한다.
...............................................................................................................................................................................


HelloWorld.java (WEB-INF/classes/HelloWorld.java)
Flex 클라이언트의 요청에 의해 실행될 원격객체

package test;

import java.io.*;
import java.util.*;

public class HelloWorld implements Serializable
{
public String getMsg()
{
return "Hello from Remot Object!";
}

public int add(int a, int b)
{
return a+b;
}

public java.util.ArrayList<Hashtable> getList(){
ArrayList<Hashtable> al = new ArrayList<Hashtable>();
Hashtable<String,String> ht = new Hashtable<String,String>();
ht.put("empno", "100");
ht.put("ename", "홍길동");
ht.put("phone", "2345-5468-9657");
al.add(ht);
ht = new Hashtable();
ht.put("empno", "200");
ht.put("ename", "홍범도");
ht.put("phone", "645-065-2345");
al.add(ht);
return al;
}
}

...............................................................................................................................................................................

RemoteObjectTest.mxml
원격객체의 getMsg() 메소드를 호출하는 Flex Application

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.controls.Alert;

private function resultHandler(event:ResultEvent):void{
var msg:String = event.result as String;
Alert.show("원격객체호출성공, "+msg);
}
private function faultHandler(event:FaultEvent):void{
Alert.show("실패!!!!!");
}
]]>
</mx:Script>

<mx:RemoteObject id="ro" destination="HelloRO" showBusyCursor="true"
result="resultHandler(event)" fault="faultHandler(event)">
<mx:method name="getMsg"/>
</mx:RemoteObject>

<mx:Panel y="19" width="250" height="200" layout="absolute" horizontalCenter="0">
<mx:Button y="39" label="원격객체호출" horizontalCenter="0" click="ro.getMsg()"/>
</mx:Panel>

</mx:Application>

...............................................................................................................................................................................


Java Collection을 리턴하는 서버측 객체의 메소드(getList())를 Flex 클라이언트에서 호출하는 경우

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.controls.Alert;

private function resultHandler(event:ResultEvent):void{
//var msg:String = event.result as String;
var arr:Array = Array(event.result);
for(var i:uint=0;i<arr.length;i++){
for(var n:uint=0;n<arr[i].length;n++){
Alert.show(arr[i][n].empno +":"+ arr[i][n].ename +":"+ arr[i][n].phone);
}
}
}
private function faultHandler(event:FaultEvent):void{
Alert.show("실패!!!!!");
}
]]>
</mx:Script>

<mx:RemoteObject id="ro" destination="HelloRO" showBusyCursor="true"
result="resultHandler(event)" fault="faultHandler(event)">
<!--<mx:method name="getMsg"/>-->
<mx:method name="getList"/>
</mx:RemoteObject>

<mx:Panel y="19" width="250" height="200" layout="absolute" horizontalCenter="0">
<mx:Button y="39" label="원격객체호출" horizontalCenter="0" click="ro.getList()"/>
</mx:Panel>

</mx:Application>


.............................................................................................................................................................................................
서버측의 파라미터를 가진 메소드(add(int a, int b))를 호출하는 Flex 클라이언트의 경우

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.controls.Alert;

private function resultHandler(event:ResultEvent):void{
var sum:int = event.result as int;
mx.controls.Alert.show("SUM:"+sum);
}
private function faultHandler(event:FaultEvent):void{
Alert.show("실패!!!!!");
}
]]>
</mx:Script>

<mx:RemoteObject id="ro" destination="HelloRO" showBusyCursor="true"
result="resultHandler(event)" fault="faultHandler(event)">
<!--<mx:method name="getMsg"/>-->
<!--<mx:method name="getList"/>-->
<mx:method name="add">
<mx:arguments>
<a>5</a><b>7</b>
</mx:arguments>
</mx:method>
</mx:RemoteObject>

<mx:Panel y="19" width="250" height="200" layout="absolute" horizontalCenter="0">
<mx:Button y="39" label="원격객체호출" horizontalCenter="0" click="ro.add()"/>
</mx:Panel>

</mx:Application>


...........................................................................................................................................................................................
서버측에서 클라이언트로 전달된 Collection 데이터를 Flex 클라이언트에서 DataGrid등을 통해 출력하는 예
..................................................................................................................................................................................................

서버측 코드
.........................................................................................................................................................................................................

package test;

import java.io.*;
import java.util.*;

public class HelloWorld implements Serializable
{
public String getMsg()
{
return "Hello from Remot Object!";
}

public int add(int a, int b)
{
return a+b;
}

// 리턴타입은 Employee[], ArrayList<Employee>, ArrayList<Hashtable> 등으로 설정하면 된다.
public java.util.ArrayList<Employee> getList(){
ArrayList<Employee> al = new ArrayList<Employee>();
al.add(new Employee(100,"홍길동","2345-5468-9657"));
al.add(new Employee(200,"홍범도","645-065-2345"));
return al;
}
}


......................................................................................................................................................................................................................
위와같은 서버코드를 호출하여 수신한 데이터를 DataGrid에 출력하는 예

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.controls.Alert;

private function resultHandler(event:ResultEvent):void{
dg.dataProvider = event.result;
}
private function faultHandler(event:FaultEvent):void{
Alert.show("실패!!!!!");
}
]]>
</mx:Script>

<mx:RemoteObject id="ro" destination="HelloRO" showBusyCursor="true"
result="resultHandler(event)" fault="faultHandler(event)">
<mx:method name="getList"/>
</mx:RemoteObject>

<mx:Panel y="19" width="328" height="200" layout="absolute" horizontalCenter="0">
<mx:Button y="7" label="원격객체호출" horizontalCenter="0" click="ro.getList()"/>
<mx:DataGrid id="dg" y="37" width="288" height="113" horizontalCenter="0"/>
</mx:Panel>

</mx:Application>

..............................................................................................................................................................................................................
서버측에서 DTO로 사용된 클래스

package test;

public class Employee implements java.io.Serializable{
public int empno;
public String ename;
public String phone;

public Employee(int empno, String ename, String phone){
this.empno=empno;
this.ename=ename;
this.phone=phone;
}
}


.............................................................................................................................................................................................................................

Eclipse에서 Flex 클라이언트에서 서버상의 원격객체(RemoteObject)에 접속하고자 한다면 Project를 생성할 때 다음과 같은 절차를 따른다

사용자 삽입 이미지

...............................................................................................................................................................................

사용자 삽입 이미지

...............................................................................................................................................................................

아래의 항목 중에서
Root folder : Flex Project가 컴파일되어 생성되는 실행파일들이 복사될 웹프로젝트의 루트를 지정(RemoteObject가 있는 웹프로젝트)
Root URL : service-config.xml 파일의 endpoint 태그 url속성을 설정하게 될 서버:포트/컨텍스트 입력
Context root : Flex Application에서 접속하고자 하는 사이트의 Context root

사용자 삽입 이미지
...............................................................................................................................................................................

위와같은 절차로 프로젝트가 완성된 후에도 다음과 같은 방법으로 연결하고자 하는 서버의 정보를 설정할 수 있다.

사용자 삽입 이미지

...............................................................................................................................................................................

사용자 삽입 이미지

...............................................................................................................................................................................

아래의 그림은 위와 같은 절차에 따라 Flex Application을 생성하고 mxml을 작성한 후 이상없이 컴파일되고 난 후의 웹 프로젝트의 상태이다. WEB-INF/classes/ 안에는 원격객체로 등록된 test.HelloWorld.java 가 들어 있다.

사용자 삽입 이미지

...............................................................................................................................................................................

웹프로젝트 안에서 SWF 파일을 포함하고 있는 html 파일을 실행하여 Flex Application을 브라우저에 나타나게 한다.
사용자 삽입 이미지

...............................................................................................................................................................................

다음과 같이 Flex Application이 실행되어 버튼을 누르면 위에서 설정한 서버상의 원격객체(RemoteObject)에 접속하여 메소드를 호출하게 된다.
사용자 삽입 이미지

...............................................................................................................................................................................

다음과 같이 원격객체(RemoteObject)의 getMsg()메소드 실행이 성공적으로 이루어진 것을 확인할 수 있다.
사용자 삽입 이미지

 

Posted by 1010
00.Flex,Flash,ActionScript2013. 3. 18. 09:20
반응형

FLA파일을 작성하고 라이브러리에 무비클립을 등록하고서, Linkage를 통해 Class를 지정해 주었을 때 이 무비클립들을 스테이지로 끌어낼 수가 있는데, 여러개가 일정한 규칙을 가지고 있을때 for문으로 사용하기 위한 방법 입니다.

기존 AS2.0에서는 Linkage 명 그대로 for문을 사용하여 attach 할 수 있었으나 AS3.0에서는 그 방법을 사용할 수가 없어서 처음에 무척 애를 먹었습니다. 그렇다고 하나하나 등록하여 사용하기에는 코드도 지저분해지고 복잡해집니다.

이때 사용할 수 있는 메소드가 있는데 getDefinitionByName() 입니다.

예) 라이브러리에 MC1 부터 MC5까지 Linkage 되어있다면 아래와 같은 방법으로 사용이 가능합니다.

import flash.utils.getDefinitionByName;
import flash.display.DisplayObject;

for(var i:Number = 1; i <= 5; i++)
{
var ClassReference:Class = getDefinitionByName("MC" + i) as Class;
var obj:Object = new ClassReference();
addChild(DisplayObject(obj));
}

출처 : http://blog.naver.com/applenamu3/70083260118

 

Posted by 1010
00.Flex,Flash,ActionScript2013. 3. 15. 19:32
반응형

<?xml version="1.0" encoding="utf-8"?>
<mx:Application
 xmlns:mx="http://www.adobe.com/2006/mxml"
 xmlns:s="library://ns.adobe.com/flex/spark"
 xmlns:fx="http://ns.adobe.com/mxml/2009"
 xmlns:c="component.*"
 layout="absolute" xmlns:local="*">
 <mx:Script>
  <![CDATA[
   [Bindable]public var initDG:Array = [
    {year:2006, t1:"t12", t2:"t33", test1:new MultiRowVO("a1","b1"), data1:new MultiRowVO("d1","t1"),data2:new MultiRowVO("df","wef")},
    {year:2007, t1:"t13", t2:"t43", test1:new MultiRowVO("a2","b2"), data1:new MultiRowVO("d2","t2"),data2:new MultiRowVO("df","wef")},
    {year:2008, t1:"t14", t2:"t53", test1:new MultiRowVO("a3","b3"), data1:new MultiRowVO("d3","t3"),data2:new MultiRowVO("df","wef")},
    {year:2009, t1:"t15", t2:"t63", test1:new MultiRowVO("a4","b4"), data1:new MultiRowVO("d4","t4"),data2:new MultiRowVO("df","wef")},
    {year:2010, t1:"t16", t2:"t73", test1:new MultiRowVO("a5","b5"), data1:new MultiRowVO("d5","t5"),data2:new MultiRowVO("df","wef")}
   ]
  ]]>
 </mx:Script>
 <mx:AdvancedDataGrid id="dataGrid" dataProvider="{initDG}" sortExpertMode="true" width="100%" height="100%">
  <mx:groupedColumns>
   <mx:AdvancedDataGridColumn headerText="year"  dataField="year"/>
   <mx:AdvancedDataGridColumn headerText="test1" dataField="test1">
    <mx:itemRenderer><mx:Component><local:rowVBox propertyName="test1"/></mx:Component></mx:itemRenderer>
   </mx:AdvancedDataGridColumn>
   <mx:AdvancedDataGridColumn headerText="data1" dataField="data1">
    <mx:itemRenderer><mx:Component><local:rowVBox propertyName="data1"/></mx:Component></mx:itemRenderer>
   </mx:AdvancedDataGridColumn>
   <mx:AdvancedDataGridColumn headerText="data2" dataField="data2">
    <mx:itemRenderer><mx:Component><local:rowVBox propertyName="data2"/></mx:Component></mx:itemRenderer>
   </mx:AdvancedDataGridColumn>
  </mx:groupedColumns>
 </mx:AdvancedDataGrid>
</mx:Application>

 

 

-- rowVBox.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%" verticalGap="0">

<mx:Script>
    <![CDATA[

        [Bindable] private var _propertyName:String;
        [Bindable] private var mydata:Object;
       
        public function set propertyName(p:String):void {
            this._propertyName = p;
        }

        public function get propertyName():String {
            return this._propertyName;
        }
       
       
        public override function set data(value:Object):void {
            mydata = value;
        }
    ]]>
</mx:Script>
    <mx:Label text="{mydata[propertyName].p1}" width="100%" height="20" textAlign="center"/>
    <mx:HRule width="100%"/>                   
    <mx:Label text="{mydata[propertyName].p2}" width="100%" height="20" textAlign="center"/>
</mx:VBox>

 

 

Posted by 1010
00.Flex,Flash,ActionScript2013. 3. 15. 17:23
반응형

<?xml version="1.0" encoding="utf-8"?>
<mx:Application
 xmlns:mx="http://www.adobe.com/2006/mxml"
 xmlns:s="library://ns.adobe.com/flex/spark"
 xmlns:fx="http://ns.adobe.com/mxml/2009"
 xmlns:c="component.*"
 layout="absolute">
 <mx:Script>
  <![CDATA[
   [Bindable]public var initDG:Array = [
    {title:2006, test1:new MultiRowVO("aa","bb"), data1:new MultiRowVO("123","456"),data2:new MultiRowVO("df","wef")},
    {title:2007, test1:new MultiRowVO("aa","bb"), data1:new MultiRowVO("123","456"),data2:new MultiRowVO("df","wef")},
    {title:2008, test1:new MultiRowVO("aa","bb"), data1:new MultiRowVO("123","456"),data2:new MultiRowVO("df","wef")},
    {title:2009, test1:new MultiRowVO("aa","bb"), data1:new MultiRowVO("123","456"),data2:new MultiRowVO("df","wef")},
    {title:2010, test1:new MultiRowVO("aa","bb"), data1:new MultiRowVO("123","456"),data2:new MultiRowVO("df","wef")}
   ]
  ]]>
 </mx:Script>
 <mx:AdvancedDataGrid id="dataGrid" dataProvider="{initDG}" sortExpertMode="true" width="100%" height="100%">
  <mx:groupedColumns>
   <mx:AdvancedDataGridColumn  headerText="year" dataField="year"/>
   <mx:AdvancedDataGridColumn  headerText="data1" dataField="data1" id="data1" itemRenderer="co"/>
   <mx:AdvancedDataGridColumn  headerText="data2" dataField="data2" id="data2" itemRenderer="tttt"/>
   <!--<mx:AdvancedDataGridColumn  headerText="data2" dataField="data2">
    <mx:itemRenderer>
     <mx:Component>
      <mx:VBox width="100%" height="100%" verticalGap="0">
                            <mx:Label text="{data.data2.p1}" width="100%" height="20" textAlign="center"/>
                            <mx:HRule width="100%"/>                   
                            <mx:Label text="{data.data2.p2}" width="100%" height="20" textAlign="center"/>
                         </mx:VBox>
     </mx:Component>
    </mx:itemRenderer>
   </mx:AdvancedDataGridColumn>-->
  </mx:groupedColumns>

  
 </mx:AdvancedDataGrid>
</mx:Application>

-- co.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%" verticalGap="0">
 <mx:Label text="{data.data1.p1}" width="100%" height="20" textAlign="center"/>
 <mx:HRule width="100%"/>                   
 <mx:Label text="{data.data1.p2}" width="100%" height="20" textAlign="center"/>
</mx:VBox>

 

-- tttt.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:AdvancedDataGridItemRenderer xmlns:mx="http://www.adobe.com/2006/mxml">
 <mx:Script>
  <![CDATA[
   override public function set data(data:Object):void{
    if(data != null){
     p1.text = data.p1;
     p2.text = data.p2;
    }
   }
  ]]>
 </mx:Script>
 
 <mx:VBox width="100%" height="100%" verticalGap="0">
 <mx:Label id="p1" text="{data.data1.p1}" width="100%" height="20" textAlign="center"/>
 <mx:HRule width="100%"/>                   
 <mx:Label id="p2" text="{data.data1.p2}" width="100%" height="20" textAlign="center"/>
</mx:VBox>

</mx:AdvancedDataGridItemRenderer>

 

 

Posted by 1010
00.Flex,Flash,ActionScript2013. 3. 12. 11:37
반응형

출처 : http://www.stevekamerman.com/2008/06/bidirectional-localconnections-in-actionscript-3-flex-2-flex-3-flash-cs3/

 

Although I use AMFPHP RemoteObjects with the Cairngorm Framework everyday, I never had a need for a simple LocalConnection. LocalConnections let you communicate between running SWFs, the only problem is that they are unidirectional. SWF A can make a new LocalConnection to SWF B and invoke it’s methods, but SWF B can’t contact SWF A. The way to get around this is to make another LocalConnection back from SWF B to SWF A. Trying to wrap my head around receiving and sending connections was starting to make me angry! They are annoyingly misleading – the receiving SWF needs to .connect() to a named connection, whereas the sending SWF doesn’t – it just calls .send() with the same named connection. I figured I could do the world a favor and abstract this confusion for you.

Here is the result (demonstrated with a Flex SWF and a Flash SWF):

Flex SWF


Flash SWF



In both the Flex MXML and the Flash FLA, I am including my BiDirLocalConnection class and it does all the hard work for me.

To make this bidirectional concept easier to handle, I introduced something called Roles. There are two roles available to your SWFs: Master and Slave. You must pick one of these roles when you instantiate the BiDirLocalConnection Object. If you have more than one running SWF in a given Role you will get an error on the newest one.

Here’s an example of how to use the class in Flex:

import net.teratechnologies.common.BiDirLocalConnection;

private var connection:BiDirLocalConnection;

private function init():void{
connection = new BiDirLocalConnection(BiDirLocalConnection.ROLE_MASTER,this);
connection.connect();
}

The constructor takes three arguments (the third is optional):

BiDirLocalConnection(role:String,callbackScope:Object,connectionBaseName:String="BiDirConnection")

- role: The role of this SWF (ROLE_MASTER or ROLE_SLAVE)
- callbackScope: When a SWF connects to this one and tries to invoke a method (call a function), where should it look to find the method? Normally you specify this so the remote SWF has access to the functions in your current scope.
- connectionBaseName: This optional argument is only required if you have more than one BiDirLocalConnection at the same time. You can use any string here and it will serve as the prefix for the two LocalConnection connectionNames that are used.

Here is the complete code from the Slave in Flash CS3 as seen above. There are three things on the stage: TextArea (receiveText), TextInput (sendText) and a Button (sendButton):

import net.teratechnologies.common.BiDirLocalConnection;

var connection:BiDirLocalConnection;

function init():void{
sendButton.addEventListener(MouseEvent.CLICK,send);
connection = new BiDirLocalConnection(BiDirLocalConnection.ROLE_SLAVE,this);
connection.connect();
}
function send(e:Event):void{
connection.send('showText',sendText.text);
}
function showText(t:String):void{
receiveText.text = "Received: "+t+"\n"+receiveText.text;
}

init();
stop();

Now here is the complete code for the Flex MXML file:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" creationComplete="init()">
<mx:Script>
<![CDATA[
import net.teratechnologies.common.BiDirLocalConnection;

private var connection:BiDirLocalConnection;

private function init():void{
sendButton.addEventListener(MouseEvent.CLICK,send);
connection = new BiDirLocalConnection(BiDirLocalConnection.ROLE_MASTER,this);
connection.connect();
}
private function send(e:Event):void{
connection.send('showText',sendText.text);
}
public function showText(t:String):void{
receiveText.text = "Received: "+t+"\n"+receiveText.text;
}

]]>
</mx:Script>
<mx:Panel width="100%" height="100%" layout="absolute" title="Flex 2/3">
<mx:TextArea id="receiveText" right="10" bottom="39" left="10" top="10."/>
<mx:TextInput id="sendText" left="10" right="72" bottom="10"/>
<mx:Button label="Send" id="sendButton" right="10" bottom="10"/>
</mx:Panel>

</mx:Application>

It really is quite simple, the SWFs are calling each other’s “showText” functions with the text of the TextInput box as an argument. You can pass as many arguments as you want to connection.send(), and they don’t need to be simple Strings.

Finally, here is the ActionScript Code for the BiDirLocalConnection class itself:

package net.teratechnologies.common {
import flash.net.LocalConnection;

public class BiDirLocalConnection{

public static const ROLE_MASTER:String = "master";
public static const ROLE_SLAVE:String = "slave";

private var txConnName:String;
private var rxConnName:String;
private var txLC:LocalConnection = new LocalConnection();
private var rxLC:LocalConnection = new LocalConnection();
private var callbackScope:Object;

public function BiDirLocalConnection(role:String,callbackScope:Object,connectionBaseName:String="BiDirConnection"){
if(role == ROLE_MASTER){
txConnName = connectionBaseName + "_TX";
rxConnName = connectionBaseName + "_RX";
}else{
rxConnName = connectionBaseName + "_TX";
txConnName = connectionBaseName + "_RX";
}
this.callbackScope = callbackScope;
}
public function connect():void{
trace(rxConnName);
rxLC.connect(rxConnName);
rxLC.client = callbackScope;
}
public function send(methodName:String,...rest):void{
txLC.send(txConnName,methodName,rest);
}
}
}

 

Posted by 1010
00.Flex,Flash,ActionScript2013. 3. 12. 10:55
반응형
Posted by 1010
반응형
Posted by 1010
반응형

출처 : http://zsoo.net/68

 

1. Help -> Install New Software... 를 누릅니다


Add 버튼을 눌러 Location에 http://jadclipse.sf.net/update 을 적고 OK를 누릅니다.

밑 플러그인 목록에 JDT Decompiler Features를 체크 하여 설치합니다.

이클립스를 재시작합니다.



2. Window -> Preferences

General -> Editors -> File Associations 에서

*.class를 선택하고 밑에서 편집기를 Decompiled Class File Viewer를 선택하여 Default 로 지정합니다.



Java -> Decompilers 에서

Decompiler를 Jad를 선택합니다.



3. http://www.varaneckas.com/jad 에서 jad를 다운받습니다.


압축을 풀어 이클립스 실행파일이 있는 폴더에 복사합니다.



4. 이제 편집기에서 소스가 궁금한 클래스명을 선택하고 F3을 누르면..

디컴파일된 소스가 보이게 됩니다.. 클래스에 따라서.. 결과가 제대로 나오지 않을 수도있습니다..

참고로 실제 소스와 완전히 같지 않기 때문에 디버깅시에 전혀 엉뚱한 라인을 가리킵니다..ㄱ-

 

Posted by 1010
반응형
출처 : http://designblack.com/bbs/board.php?bo_table=tip&wr_id=307&sca=%C7%C3%B7%A1%BD%C3 

 

var activeNum = pageNum;
var activesub = subNum;
var overNum = activeNum;
var menuNum = 4;

var linkDim=new Array();
linkDim[0]="URL써주세요";
linkDim[1]="URL써주세요";
linkDim[2]="URL써주세요";
linkDim[3]="URL써주세요";
//////////////////////////
for (var i = 0; i<menuNum; i++) {
//몽 추가
this["menu"+i].bt.onRelease = function() {
this._parent._parent.overNum = this._parent._name.substring(4);
if (this._parent._parent.overNum==3) getURL(linkDim[this._parent._parent.overNum],"_blank");
else getURL(linkDim[this._parent._parent.overNum]);
//trace(i);
}
this["menu"+i].bt.onRollOver = function() {
this._parent._parent.overNum = this._parent._name.substring(4);
};
this["menu"+i].bt.onRollOut = function() {
this._parent._parent.overNum = this._parent._parent.activeNum;
};
this["menu"+i].onEnterFrame = function() {
if (this._parent.overNum == this._name.substring(4)) {
this.nextFrame();
this.flag = true;
} else {
this.flag = false;
this.prevFrame();
this.prevFrame();
}
};
}


무비클립의 이름은 menu0부터~ menuNum의 갯수만큼

 

Posted by 1010
반응형

 

출처 : http://slog2.egloos.com/3574039

1. log4j 다운.
- http://logging.apache.org/log4j/1.2/download.html 접속.
- apache-log4j-1.2.16.zip 을 다운받고 압축을 푼다.
- 압축을 푼 폴더안에 og4j-1.2.16.jar 파일이 있는지 확인 한다.

2. 이클립스 설정.
- 프로젝트 WEB_INF/lib 폴더에 log4j-1.2.16.jar 파일을 복사 붙여넣기 한다.
- 프로젝트 src에 new - file 만들기로 log4j.properties 파일을 만든다.
- log4j.properties 파일에 소스를 붙여넣기 한다.

log4j.rootLogger = debug, stdout, dailyfile //debug를 info,error,warn,fatal 로 조정만 하여 레벨 조정이 가능하다.
//콘솔창에 찍히는 부분 설정.

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p ({%t} %F[%M]:%L) [%d] - %m%n

//file에 기록되는 부분 설정.
log4j.appender.dailyfile.Threshold = DEBUG
log4j.appender.dailyfile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyfile.File = c:\\log\\logfile.log //여기에 지정된 폴더로 날짜별로 로그파일이 생성된다
log4j.appender.dailyfile.layout = org.apache.log4j.PatternLayout
log4j.appender.dailyfile.layout.ConversionPattern=%5p ({%t} %F[%M]:%L) [%d] - %m%n

3. 라이브러리 추가
- 프로젝트 우측클릭 properties 설정 - Java Build Path - Libraries - Add Libary... 클릭
- JUnit 클릭 - JUNIT library version : JUnit 3 - Finish

4. 사용해보기.
- log4j import
private static Logger logger = Logger.getLogger(TestLog4j.class);

- logger.debug("dddd");
logger.info("info");
logger.warn("warn");
logger.error("error");
logger.fatal("fatal");
요런식으로 찍어보면 된다.
찍힌 내용은 설정파일의 경로에 파일로도 저장된다.
설정파일의 debug를 warn이라고 해놓으면 info, debug의 메시지는 당연히 안찍힌다.
설정파일 한방으로 찍히고 안찍히고를 결정 지을 수 있다.

 

Posted by 1010
57.EgovFrameWork2013. 2. 27. 13:59
반응형

빨간색 글자 부분 추가 해줌

 

ojdbc14 는 라이센스때문에... 추가못했다고 하네요. 그냥 WEB-INF/lib 같은데 직접 넣어서 사용해야 할듯...

 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>eGovTest</groupId>
 <artifactId>eGovTest</artifactId>
 <packaging>war</packaging>
 <version>1.0.0</version>
 <name>eGovTest</name>
 <url>http://maven.apache.org</url>

 <properties>
  <spring.maven.artifact.version>3.0.5.RELEASE</spring.maven.artifact.version>
 </properties>

 <repositories>

  <repository>
   <id>mvn2</id>
   <url>http://repo1.maven.org/maven2/</url>
   <releases>
    <enabled>true</enabled>
   </releases>
   <snapshots>
    <enabled>true</enabled>
   </snapshots>
  </repository>

  <repository>
   <id>egovframe</id>
   <url>http://www.egovframe.go.kr/maven/</url>
   <releases>
    <enabled>true</enabled>
   </releases>
   <snapshots>
    <enabled>false</enabled>
   </snapshots>
  </repository>

  <repository>
   <id>mesir-repo</id>
   <url>http://mesir.googlecode.com/svn/trunk/mavenrepo</url>
  </repository>
  
 </repositories>

 <dependencies>

<!--   <dependency> -->
<!--    <groupId>com.oracle</groupId> -->
<!--    <artifactId>ojdbc14</artifactId> -->
<!--    <version>10.2.0.4.0</version> -->
<!--   </dependency> -->

  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-aop</artifactId>
   <version>${spring.maven.artifact.version}</version>
  </dependency>

  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-beans</artifactId>
   <version>${spring.maven.artifact.version}</version>
  </dependency>

  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context</artifactId>
   <version>${spring.maven.artifact.version}</version>
  </dependency>

  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context-support</artifactId>
   <version>${spring.maven.artifact.version}</version>
  </dependency>

  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-core</artifactId>
   <version>${spring.maven.artifact.version}</version>
  </dependency>

  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-jdbc</artifactId>
   <version>${spring.maven.artifact.version}</version>
  </dependency>

  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-orm</artifactId>
   <version>${spring.maven.artifact.version}</version>
  </dependency>

  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-test</artifactId>
   <version>${spring.maven.artifact.version}</version>
  </dependency>

  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-tx</artifactId>
   <version>${spring.maven.artifact.version}</version>
  </dependency>

  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-web</artifactId>
   <version>${spring.maven.artifact.version}</version>
  </dependency>

  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-webmvc</artifactId>
   <version>${spring.maven.artifact.version}</version>
  </dependency>

  <dependency>
   <groupId>egovframework.rte</groupId>
   <artifactId>egovframework.rte.fdl.cmmn</artifactId>
   <version>2.0.0</version>
  </dependency>

  <dependency>
   <groupId>egovframework.rte</groupId>
   <artifactId>egovframework.rte.ptl.mvc</artifactId>
   <version>2.0.0</version>
  </dependency>

  <dependency>
   <groupId>egovframework.rte</groupId>
   <artifactId>egovframework.rte.psl.dataaccess</artifactId>
   <version>2.0.0</version>
  </dependency>

  <dependency>
   <groupId>egovframework.rte</groupId>
   <artifactId>egovframework.rte.fdl.idgnr</artifactId>
   <version>2.0.0</version>
  </dependency>

  <dependency>
   <groupId>egovframework.rte</groupId>
   <artifactId>egovframework.rte.fdl.property</artifactId>
   <version>2.0.0</version>
  </dependency>

  <dependency>
   <groupId>org.aspectj</groupId>
   <artifactId>aspectjweaver</artifactId>
   <version>1.6.11</version>
  </dependency>

  <dependency>
   <groupId>org.aspectj</groupId>
   <artifactId>aspectjrt</artifactId>
   <version>1.6.9</version>
  </dependency>

  <dependency>
   <groupId>aopalliance</groupId>
   <artifactId>aopalliance</artifactId>
   <version>1.0</version>
  </dependency>

  <dependency>
   <groupId>org.apache.ibatis</groupId>
   <artifactId>ibatis-sqlmap</artifactId>
   <version>2.3.4.726</version>
  </dependency>

  <dependency>
   <groupId>javax.annotation</groupId>
   <artifactId>jsr250-api</artifactId>
   <version>1.0</version>
  </dependency>

  <dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>servlet-api</artifactId>
   <scope>provided</scope>
   <version>2.5</version>
  </dependency>

  <dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>jstl</artifactId>
   <version>1.2</version>
  </dependency>

  <dependency>
   <groupId>commons-dbcp</groupId>
   <artifactId>commons-dbcp</artifactId>
   <version>1.3</version>
  </dependency>

  <dependency>
   <groupId>commons-logging</groupId>
   <artifactId>commons-logging</artifactId>
   <version>1.1.1</version>
  </dependency>

  <dependency>
   <groupId>commons-beanutils</groupId>
   <artifactId>commons-beanutils</artifactId>
   <version>1.8.3</version>
  </dependency>

  <dependency>
   <groupId>commons-lang</groupId>
   <artifactId>commons-lang</artifactId>
   <version>2.6</version>
  </dependency>

  <!-- junit -->
  <dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>4.8.1</version>
  </dependency>

  <!-- DBunit -->
  <!-- <dependency> <groupId>org.dbunit</groupId> <artifactId>dbunit</artifactId>
   <version>2.4.8</version> </dependency> -->

  <!-- EMMA -->
  <!-- <dependency> <groupId>emma</groupId> <artifactId>emma</artifactId>
   <version>2.1.5320</version> </dependency> -->

  <dependency>
   <groupId>taglibs</groupId>
   <artifactId>standard</artifactId>
   <version>1.1.2</version>
  </dependency>

  <dependency>
   <groupId>cglib</groupId>
   <artifactId>cglib</artifactId>
   <version>2.2</version>
  </dependency>

  <dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-log4j12</artifactId>
   <version>1.5.11</version>
  </dependency>

  <dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-api</artifactId>
   <version>1.5.11</version>
  </dependency>

  <dependency>
   <groupId>log4j</groupId>
   <artifactId>log4j</artifactId>
   <version>1.3alpha-8</version>
  </dependency>

  <dependency>
   <groupId>net.sf</groupId>
   <artifactId>log4jdbc3</artifactId>
   <version>1.1</version>
  </dependency>

  <dependency>
   <groupId>hsqldb</groupId>
   <artifactId>hsqldb</artifactId>
   <version>1.8.0.10</version>
  </dependency>

  <dependency>
   <groupId>org.easymock</groupId>
   <artifactId>easymock</artifactId>
   <version>3.0</version>
  </dependency>

  <dependency>
   <groupId>commons-collections</groupId>
   <artifactId>commons-collections</artifactId>
   <version>3.2</version>
  </dependency>

  <dependency>
   <groupId>commons-digester</groupId>
   <artifactId>commons-digester</artifactId>
   <version>1.8</version>
  </dependency>

  <dependency>
   <groupId>org.antlr</groupId>
   <artifactId>antlr</artifactId>
   <version>3.0.1</version>
  </dependency>

 </dependencies>

 <build>
  <defaultGoal>install</defaultGoal>
  <directory>${basedir}/target</directory>
  <finalName>test123.test123-webapp</finalName>
  <pluginManagement>
   <plugins>
    <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-compiler-plugin</artifactId>
     <configuration>
      <source>1.5</source>
      <target>1.5</target>
      <encoding>UTF-8</encoding>
     </configuration>
    </plugin>
    <plugin>
     <groupId>org.codehaus.mojo</groupId>
     <artifactId>hibernate3-maven-plugin</artifactId>
     <version>2.1</version>
     <configuration>
      <components>
       <component>
        <name>hbm2ddl</name>
        <implementation>annotationconfiguration</implementation>
       </component>
      </components>
     </configuration>
     <dependencies>
      <dependency>
       <groupId>hsqldb</groupId>
       <artifactId>hsqldb</artifactId>
       <version>1.8.0.7</version>
      </dependency>
     </dependencies>
    </plugin>
    <!-- EMMA -->
    <plugin>
     <groupId>org.codehaus.mojo</groupId>
     <artifactId>emma-maven-plugin</artifactId>
     <version>1.0-alpha-1</version>
    </plugin>
    <!-- PMD manven plugin -->
    <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-pmd-plugin</artifactId>
     <version>2.4</version>
    </plugin>
   </plugins>
  </pluginManagement>
  <plugins>
   <!-- EMMA -->
   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
     <skipTests>false</skipTests>
     <forkMode>once</forkMode>
     <reportFormat>xml</reportFormat>
     <excludes>
      <exclude>**/Abstract*.java</exclude>
      <exclude>**/*Suite.java</exclude>
     </excludes>
     <includes>
      <include>**/*Test.java</include>
     </includes>
    </configuration>
   </plugin>
   <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>emma-maven-plugin</artifactId>
    <version>1.0-alpha-1</version>
    <inherited>true</inherited>
   </plugin>
   <!-- JavaDoc -->
   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.5</version>
   </plugin>
  </plugins>
 </build>
 <reporting>
  <outputDirectory>${basedir}/target/site</outputDirectory>
  <plugins>
   <plugin>
    <artifactId>maven-project-info-reports-plugin</artifactId>
    <version>2.0.1</version>
    <reportSets>
     <reportSet>
      <id>sunlink</id>
      <reports>
       <report>javadoc</report>
      </reports>
      <inherited>true</inherited>
      <configuration>
       <links>
        <link>http://java.sun.com/j2se/1.5.0/docs/api/</link>
       </links>
      </configuration>
     </reportSet>
    </reportSets>
   </plugin>
   <!-- JUnit Test Results & EMMA Coverage Reporting -->
   <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>emma-maven-plugin</artifactId>
    <inherited>true</inherited>
   </plugin>
   <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>surefire-report-maven-plugin</artifactId>
    <inherited>true</inherited>
    <reportSets>
     <reportSet>
      <reports>
       <report>report-only</report>
      </reports>
     </reportSet>
    </reportSets>
   </plugin>
   <!-- PMD manven plugin -->
   <!-- <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-pmd-plugin</artifactId>
    <version>2.4</version> <configuration> <rulesets> <ruleset>./Ruleset.xml</ruleset>
    </rulesets> <linkXref>true</linkXref> <sourceEncoding>${encoding}</sourceEncoding>
    <minimumTokens>100</minimumTokens> <targetJdk>${compileSource}</targetJdk>
    </configuration> <reportSets> <reportSet> <reports> <report>pmd</report>
    </reports> </reportSet> </reportSets> </plugin> -->
   <!-- Generating JavaDoc Report -->
   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <configuration>
     <minmemory>128m</minmemory>
     <maxmemory>512m</maxmemory>
     <encoding>${encoding}</encoding>
     <docencoding>${encoding}</docencoding>
     <charset>${encoding}</charset>
    </configuration>
   </plugin>
   <!-- Generating Java Source in HTML -->
   <plugin>
    <artifactId>maven-jxr-plugin</artifactId>
    <configuration>
     <inputEncoding>${encoding}</inputEncoding>
     <outputEncoding>${encoding}</outputEncoding>
     <linkJavadoc>true</linkJavadoc>
     <javadocDir>apidocs</javadocDir>
    </configuration>
   </plugin>
  </plugins>
 </reporting>
</project>

Posted by 1010
반응형

출처 : http://blog.naver.com/PostView.nhn?blogId=jjackkun81&logNo=60102395605

5007:An ActionScript file must have at least one externally vislble definition.

- 액션 스크립트 파일중 적어도 한 줄 이상은 코딩이 되어있어야 한다.

5000: The class "ActionScript File Name" must subclass "flash.display.MovieClip" since it is linked to a library symbol od that type.

- 작성된 액션스크립트파일에 MovieClip 의 import 가 선언되어있지 않다.

- 해결방안 : import flash.dispaly.MovieClip 선언

1180: Call to a possibly undefined method addFrameScript.

- DocumentClass 로 AS파일을 빼서 쓸 경우 fla 의 타임라인 1번에 script가 선언되어있어선 안된다.

1046: Type was not found or was not a compile-time constant: Timer.

- 작성된 액션스크립트파일에 Timer 의 import 가 선언되어있지 않다.

- 해결방안 : import flash.utils.Timer ;

1046: Type was not found or was not a compile-time constant: TimerEvent.

- 작선된 액션스크립트파일에 TimerEvent 의 import 가 선언되어있지 않다.

- 해결방안 : import flash.events.TimerEvent ;

1046: Type was not found or was not a compile-time constant: Point.
1180: Call to a possibly undefined method Point.

- 작성된 액션스크립트파일에 Point 의 import 가 선언되어있지 않다.

- 해결방안 : import flash.geom.Point () ;

1013: The private attribute may be used only on class property definitions.

- 작선된 액션스크립트파일에 2개 이상의 class가 선언 되었다.

- AS3 파일은 항상 한개의 class 파일만 존재해야 하니 나머지들을 지워준다.

1046: Type was not found or was not a compile-time constant: ColorTransform.

- 작성된 액션스크립트파일에 ColorTransform 의 import 가 선언되어있지 않다.

- 해결방안 : import flash.geom.ColorTransform ;

1067: Implicit coercion of a value of type int to an unrelated type flash.geom:ColorTransform.

- 작성된 액션스크립트파일에 해당타입의 사용이 잘못되었다.

- 해결방안 : ct = 0xFF0000 (x) ==> ct.color = 0xFF0000 (o)

1067: Implicit coercion of a value of type int to an unrelated type String.

- 작성된 액션스크립트파일에 언급되지 않은 String type을 강제적으로 사용하였다.

- 해경방안 : cir.no.text = sp.getChildIndex ( cir ) (x) ==> cir.no.text = String ( sp.getChildIndex ( cir ) ) ;

1021: Duplicate function definition.

- 작성된 액션스크립트파일에 중복되는 function 이 설정되어있다.

- 해결방안 : 중복된 function 의 이름을 수정하거나 삭제한다.

1180: Call to a possibly undefined method addFrameScript.

- 작성된 액션스크립트에서 addFrameScript() 메서드를 찾을 수 없다라는 뜻. 이 메서드는 MovieClip 전용이다.

- 해경방한 : 현재 작성된 액션의 파일이 MovieClip이 아닌것을 변경해야한다. ( ex: Sprite ==> MovieClip )

1180: Call to a possibly undefined method gotoAndStop.

- 작성된 액션스크립트가 MovieClip으로 확장되지 않았다. gotoAndStop 메서드는 MovieClip에만 존재할 수 있다.

- 해결방안 : 잘못 확장되어있는 메서드의 이름을 MovieClip 으로 변경해준다.

ex ) public class Name extends Sprite { (x) ==> publc class Name extends MovieClip { (o)

1136: Incorrect number of arguments. Expected 4.

- 작성된 액션스크립트의 속성이 잘못되어있다. 아규먼트가 4개 인 곳에 맞지 않게 작성 되어있다.

- 해결방안 : 정확한 아규먼트의 속성과 갯수에 맞춰 사용한다.

1180: Call to a possibly undefined method navigateToURL.

- 작성된 액션스크립트에 navigateToURL 속성이 선언되지 않았다.

- 해결방안 : import flash.net.navigateToURL 선언

1063: ArgumentError: Error #1063: ...() 에서 인수 개수가 일치하지 않습니다. 0개가 필요하지만 1개가 있습니다.

- 작성된 함수에 인수가 설정되지 않았다.

- 해결방안 : 필요한만큼의 인수를 작성한다.

ex ) public function Yaho () :void { ==> public function Yaho ( e:Event ) :void {

#2136 : swf에 유효하지 않은 데이터가 포함되어 있습니다. ( ex : at TextFormat ) ;

- 작성된 swf파일의 ActionScript에 고유의 이름이 들어가 있다.

- 해결방안 : 사용해서는 안되는 고유이름을 대체해준다.

ex ) as파일에서

public class TextFormat extends Sprite {} ==> public class TextFormats extends Sprite {}

[출처] AS3 컴파일 에러|작성자 jjackkun81

Posted by 1010
01.JAVA/Java2013. 2. 18. 10:39
반응형

출처 : http://www.ibm.com/developerworks/kr/library/j-javadev2-15/

Google이 2001년에 이미지 검색 기능을 실행했을 때, 2억 5천만 개의 인덱스된 이미지를 보유했다. 십 년이 지나지 않아, 이 검색 거인은 100억 개 이상의 이미지를 인덱스했다. 분당 35시간의 컨텐츠가 YouTube로 업로드된다. Twitter는 평균적으로 매일 5천 5백만 건의 트윗을 처리한다고 주장한다. 올해 초에 그 검색 기능은 매일 6억 개의 쿼리를 로깅했다. 대용량 데이터를 논의할 때 대용량이란 바로 그 정도이다.

이 시리즈의 정보

처음 Java 기술이 발표된 이후로 Java를 개발하는 과정은 급속도로 변화되었다. 오픈 소스 프레임워크와 신뢰할 수 있는 임대용 전개 인프라 덕택에 Java 애플리케이션을 신속하고 저렴하게 어셈블하고 테스트하고 유지할 수 있게 되었다. 이 시리즈에서 Andrew Glover는 이러한 새로운 Java 개발 패러다임을 가능하게 하는 다양한 기술과 도구를 탐구한다.

이러한 엄청난 규모의 데이터는 대기업, 대학 및 정부 — 엄청나게 비싼 슈퍼컴퓨터를 구입할 수 있으며 이를 계속 실행할 직원을 가용할 수 있는 단체 —에 국한되었다. 오늘날 스토리지 비용의 절감과 프로세싱 성능의 상용화를 통해 중소기업 및 일부 개인들도 동일한 데이터를 저장하고 마이닝하기 시작하여, 애플리케이션 혁신의 흐름을 발전시킨다.

대용량 데이터 혁명이 가능한 기술 중 하나는 MapReduce이다. 이는 엄청난 규모의 분산 데이터 세트를 처리하기 위해 Google이 개발한 프로그래밍 모델 겸 구현 방식이다. 이 기사에서 필자는 Apache의 오픈 소스 MapReduce 구현 방식인 Hadoop을 소개한다. 이는 클라우드 컴퓨팅의 킬러 앱(killer app)이라고도 한다.

Hadoop 정보

Apache의 Hadoop 프레임워크는 본질적으로 대용량 데이터 세트를 분석하기 위한 메커니즘이며, 이는 반드시 데이터 저장소에 수용하지 않아도 된다. Hadoop은 MapReduce의 거대한 데이터 분석 엔진을 요약하여 개발자들이 액세스하기에 더 쉽게 만든다. Hadoop은 무수한 노드로 확장하여 데이터 정렬과 관련된 활동 및 조정을 모두 처리할 수 있다.

Hadoop은 수많은 기능과 구성을 통해 놀랍도록 유용하고 강력한 프레임워크가 된다. Yahoo!와 무수한 다른 조직들은 산더미 같은 비트와 바이트들을 분석하기 위해 이를 효율적인 메커니즘이라고 인식했다. 또한 Hadoop은 단일 노드에서 작업하기에 매우 간편하다. 즉, 분석할 데이터가 어느 정도 있고, 제네릭을 비롯한 Java 코드에 익숙하기만 하면 된다. Hadoop은 또한 Ruby, Python 및 C++로 작업한다.

MapReduce에 대한 추가 정보

이 시리즈의 독자라면 이미 MapReduce가 작동하는 것을 두 세 번 확인했다. "Java development 2.0: CouchDB와 그루비의 RESTClient를 이용한 REST"에서 필자는 CouchDB가 뷰를 위해 MapReduce를 어떻게 활용하는지 시연했으며, MapReduce가 MongoBD 문서를 처리하기 위한 메커니즘이 되는 "Java development 2.0: MongoDB: (적절한) RDBMS 이동 기능을 제공하는 NoSQL 데이터 저장소"에서 이를 한 번 더 사용했다.

대용량 데이터 세트를 처리하기 위한 개념적인 프레임워크로서 MapReduce는 다수의 컴퓨터를 사용하여 분산된 문제 해결을 위해 고도로 최적화되었다. 프레임워크는 이름이 암시하는 대로 두 가지 함수로 구성된다. map 함수는 대용량 데이터 입력을 취하여 더 잘게 나누도록 설계되었으며, 그러면 이를 통해 어떠한 작업을 할 수 있는 다른 프로세스로 전달한다. reduce 함수는 map으로 수집되는 개별 응답을 요약하고 최종 출력으로 이를 렌더링한다.

Hadoop에서 Hadoop의 자체적인 기본 클래스를 확장하여 mapreduce 구현을 정의한다. 구현은 입력 및 출력 형식과 함께 이를 지정하는 구성으로 함께 묶인다. Hadoop은 구조화된 데이터가 들어있는 대용량 파일을 처리하기 위한 훌륭한 세트이다. Hadoop의 특히 편리한 측면 하나는 입력 파일의 원시 구문 분석을 처리하기 때문에, 사용자는 한 번에 한 행씩 다룰 수 있다. 따라서 map 함수를 정의하는 것은 실제로 텍스트의 수신되는 행에서부터 취하려는 것을 판별하는 문제에 불과하다.


데이터는 어디에나 있다!

미국 정부는 일반 시민이 크게 관심을 가지는 엄청난 양의 데이터를 제작한다. 다양한 정부 기관들은 미국 경제 상태 및 변화하는 사회적 인구 통계와 관련된 데이터를 자유롭게 분배한다. 미국 지질 조사소(USGS)는 국제적인 지진 데이터를 발표한다.

여러 소규모 지진들이 전 세계 곳곳에서 매일 발생한다. 이들 중 다수는 지각 내 깊은 곳에서 발생하여 아무도 인식하지 못하지만, 그럼에도 불구하고 청취 스테이션은 이를 기록한다. USGS는 주간 CSV(또는 콤마로 분리된 값) 파일 형태로 지진 데이터를 발표한다.

평균적인 주간 파일은 엄청나게 크지는 않다 — 겨우 100KB 정도이다. 하지만 이는 Hadoop을 학습하기 위한 기초로 쓰일 것이다. 그렇다고 하더라도 Hadoop이 훨씬 더 큰 규모의 데이터 세트를 처리할 수 있다는 점을 잊지 말자.

진동 추적

최근에 USGS 웹 사이트에서 다운로드한 CSV 파일은 다음 리스트 1과 같이 약 920개의 행으로 되어있다.


리스트 1. USGS 지진 데이터 파일의 행 개수
$> wc -l eqs7day-M1.txt 
  920 eqs7day-M1.txt

CVS 파일의 컨텐츠는 다음 리스트 2(즉, 처음 두 개의 행)에서 보는 것과 비슷하다.


리스트 2. CVS 파일의 처음 두 개의 행
$> head -n 2 eqs7day-M1.txt 
Src,Eqid,Version,Datetime,Lat,Lon,Magnitude,Depth,NST,Region
ci,14896484,2,"Sunday, December 12, 2010 23:23:20 UTC",33.3040,-116.4130,1.0,11.70,22,
  "Southern California"

특히 총 행의 합이 920개라는 점을 고려할 때에, 필자는 이를 Information Rich 파일이라고 할 것이다. 하지만 필자는 이 파일로 보고되는 그 주의 각 날짜에 발생하는 지진의 수만 알고자 한다. 그 다음에 이러한 7일에 대부분의 지진이 나타나는 일반적인 영역이 어디인지 알고자 한다.

필자의 첫 번째 생각은 일일 지진 수를 검색하기 위해 간단한 grep 명령을 사용할 수 있었다는 점이다. 파일을 살펴보면 데이터가 12월 12일에 시작하는 것으로 표시된다. 따라서 다음 리스트 3의 결과로 그 문자열의 grep -c를 수행한다.


리스트 3. 12월 12일에 지진이 얼마나 많이 발생하는가?
$> grep -c 'December 12' eqs7day-M1.txt 
98

Hadoop 설치

Hadoop을 이전에 설치하지 않았다면 이제 설치하자. 먼저, 최신 바이너리를 다운로드하고, 이를 압축 해제하여 경로에 Hadoop의 bin 디렉토리를 설정한다. 이렇게 하면 hadoop 명령을 직접 실행할 수 있다. Hadoop을 사용하면 앞으로 확인하는 대로 java 명령을 호출하는 것이 아니라 hadoop 명령을 실행해야 한다. Java 바이너리 파일(예를 들어, mapreduce 구현을 표현함)을 찾을 수 있는 것과 같이 옵션을 hadoop 명령으로 전달시킬 수 있다. 필자의 경우에 jar 파일을 작성하여, jar 내에서 실행하려는 작업이 어느 것인지 Hadoop에 알린다. 또한 필자의 애플리케이션을 Hadoop의 클래스 경로로 실행하는 데 필요한 추가 바이너리도 추가한다.

이제 12월 12일에 98개의 항목 또는 98개의 기록된 지진이 있었음을 알게 되었다. 행 아래로 이동하여 12월 11일, 10일 등에 grep을 수행할 수도 있을 것이다. 하지만, 그것은 필자가 생각하기에는 지루하다. 더욱 나쁜 것은 이를 이끌어 내기 위해 파일에 어느 날짜가 있는지 알아야 한다는 것이다. 필자는 그 내용에 실제로 신경을 쓰지 않으며, 어떠한 경우에는 그러한 정보에 액세스 권한이 없을 수 있다. 실제로 필자는 어느 7일 범위에서나 주어진 각 날짜의 숫자만 알고자 하고, Hadoop을 통해 그러한 정보를 간편하게 얻을 수 있다.

Hadoop은 필자의 첫 번째와 두 번째 질문에 응답하는 정보의 몇 가지 부분만 필요로 한다. 다시 말해서, 처리할 입력이 어느 것이며, mapreduce를 어떻게 다루느냐이다. 또한 모두 함께 묶는 작업도 제공해야 할 것이다. 하지만, 그 코드에 작업을 시작하기 전에 전부 필자의 CSV 데이터 순서로 되어 있는지 확인하는 데 수분이 걸릴 것이다.


opencsv로 데이터 구문 분석

지진 CSV 파일의 첫 행인 헤더를 제외하고 각 행은 콤마로 분리된 데이터 값의 시리즈이다. 필자는 세 가지 데이터 부분인 각 지진의 날짜, 위치 및 규모에 주로 관심이 있다. 이러한 데이터를 확보하기 위해 opencsv라는 실용적인 오픈 소스 라이브러리를 사용할 것이며, 이는 CSV 파일을 구문 분석하는 데 유용하다.

테스트를 우선 시행하는 사람이 되기 위해, 목록 4와 같이 CSV 파일에서 확보한 샘플 행에서 원하는 정보를 확보할 수 있는지 확인하는 빠른 JUnit 테스트를 작성하여 시작할 것이다.


리스트 4. CSV 행 구문 분석하기
public class CSVProcessingTest {

 private final String LINE = "ci,14897012,2,\"Monday, December 13, 2010 " +
            "14:10:32 UTC\",33.0290,-115." +
            "5388,1.9,15.70,41,\"Southern California\"";

 @Test
 public void testReadingOneLine() throws Exception {
  String[] lines = new CSVParser().parseLine(LINE);

  assertEquals("should be Monday, December 13, 2010 14:10:32 UTC",
    "Monday, December 13, 2010 14:10:32 UTC", lines[3]);

  assertEquals("should be Southern California",
    "Southern California", lines[9]);

  assertEquals("should be 1.9", "1.9", lines[6]);
 }
}

리스트 4에서 확인 가능한 대로, opencsv는 콤마로 분리된 값으로 매우 간단하게 작업하게 해준다. 구문 분석기는 간단하게 String의 배열을 리턴하므로, 위치 상의 값을 확보할 수 있다(Java 언어에서 배열 및 콜렉션 액세스가 제로 기반인 것을 기억하자).

데이터 형식 변환하기

MapReduce로 작업할 때에 map 함수의 작업은 일부 키에 추가로 작업하기 위해 일부 값을 선택하는 것이다. 다시 말해서, map은 주로 두 가지 요소로 작업하고 리턴한다. 이는 키와 값이다. 이전의 요구사항으로 돌아가서 필자는 우선 매일 지진이 얼마나 발생하는지 알아내고자 한다. 따라서, 지진 파일을 분석할 때에 두 가지 값을 도출할 것이다. 즉, 키는 날짜가 될 것이고, 값은 카운터가 될 것이다. 그러면 reduce 함수가 카운터를 합하여(이는 1의 값으로 정수임), 대상 지진 파일에서 날짜당 발생하는 횟수를 제공할 것이다.

24시간 기간에 관심이 있기 때문에, 각 파일에서 날짜의 시간 부분을 삭제해야 할 것이다. 다음 리스트 5에서 수신되는 파일에서 특정 날짜 형태를 더 일반적인 24시간 기간 날짜로 어떻게 전환하는지 유효성 검증하는 빠른 테스트를 작성한다.


리스트 5. 날짜 형식 변환
@Test
public void testParsingDate() throws Exception {
 String datest = "Monday, December 13, 2010 14:10:32 UTC";
 SimpleDateFormat formatter = new SimpleDateFormat("EEEEE, MMMMM dd, yyyy HH:mm:ss Z");
 Date dt = formatter.parse(datest);

 formatter.applyPattern("dd-MM-yyyy");
 String dtstr = formatter.format(dt);
 assertEquals("should be 13-12-2010", "13-12-2010", dtstr);
}

리스트 5에서 SimpleDateFormat Java 오브젝트를 사용하여 Monday, December 13, 2010 14:10:32 UTC의 CSV 파일 형식에서 날짜 String을 더 일반적인 13-12-2010으로 형식화했다.


Hadoop의 map 및 reduce

이제 CSV 파일과 데이터 형식을 어떻게 처리할 것인지에 대한 작업을 했으니, Hadoop에서 mapreduce 함수를 구현하여 시작할 차례가 되었다. 이 프로세스는 Hadoop이 명시 유형 안전을 선호하기 때문에, Java 일반을 이해하는 것이 필요하다.

Hadoop으로 map 구현을 정의할 때에 Hadoop의 Mapper 클래스를 간단하게 확장한다. 그러면 발신되는 키와 값 모두에 대한 명시 유형을 지정하기 위해 일반을 사용할 수 있다. 또한 유형 절은 수신되는 키와 값을 설명하며, 이는 파일 읽기의 경우에 이는 각각 바이트 개수와 텍스트의 행이다.

EarthQuakesPerDateMapper 클래스는 Hadoop의 Mapper 오브젝트를 확장한다. 이는 명시적으로 출력 키를 Text 오브젝트로 설명하고 그 값을 IntWritable로 설명하며, 이는 본질적으로 정수인 Hadoop 특화된 클래스이다. 또한 클래스 절에서 처음 두 개의 유형은 LongWritableText이며, 이는 각각 바이트 개수와 텍스트의 행임을 참고하자.

클래스 정의에서 유형 절로 인해 map 메소드로 수신되는 매개변수 유형은 context.write 절 내에서 이 메소드의 출력과 함께 설정된다. 다른 것을 지정하려고 시도하면, 컴파일러 문제가 발생하거나 Hadoop에서 유형 불일치를 설명하는 메시지가 표시되며 오류가 나타날 것이다.


리스트 6. 맵핑 구현
public class EarthQuakesPerDateMapper extends Mapper<LongWritable, 
  Text, Text, IntWritable> {
 @Override
 protected void map(LongWritable key, Text value, Context context) throws IOException,
   InterruptedException {

  if (key.get() > 0) {
   try {
     CSVParser parser = new CSVParser();
     String[] lines = parser.parseLine(value.toString());

     SimpleDateFormat formatter = 
       new SimpleDateFormat("EEEEE, MMMMM dd, yyyy HH:mm:ss Z");
     Date dt = formatter.parse(lines[3]);
     formatter.applyPattern("dd-MM-yyyy");

     String dtstr = formatter.format(dt);
     context.write(new Text(dtstr), new IntWritable(1));
   } catch (ParseException e) {}
  }
 }
}

리스트 6에서 map 구현은 간단하다. 즉, Hadoop은 기본적으로 입력 파일에서 발견하는 텍스트의 각 행에 대해 이 클래스를 호출한다. CSV의 헤더를 처리하려는 시도를 방지하기 위해 먼저, 바이트 개수(key 오브젝트)가 0이 아닌지 확인한다. 그 다음에, 목록 4와 5에서 이미 확인한 것을 수행한다. 즉, 수신되는 날짜를 취하여 변환한 다음에 이를 발신 키로 설정한다. 또한 하나의 개수인 1을 제공한다. 다시 말해서, 각 날짜에 대해 카운터를 코드했으며 reduce 구현이 호출될 때에, 키와 값의 콜렉션을 받을 것이다. 이 경우에 키는 리스트 7과 같이 날짜와 그 값이 될 것이다.


리스트 7. map 출력과 reduce 입력의 논리적 보기
"13-12-2010":[1,1,1,1,1,1,1,1]
"14-12-2010":[1,1,1,1,1,1]
"15-12-2010":[1,1,1,1,1,1,1,1,1]

context.write(new Text(dtstr), new IntWritable(1))(리스트 6에 있음) 행이 리스트 7과 같이 논리적 콜렉션을 빌드하였음을 참고하자. 아마 이미 확인한 대로, context는 다양한 정보 부분을 보유하는 Hadoop 데이터 구조이다. 이 contextreduce 구현으로 전달되며, 이는 이러한 1 값들을 취하고 이를 합할 것이다. 결과적으로, reduce 구현은 논리적으로 다음 리스트 8에서와 같은 데이터 구조를 작성한다.


리스트 8. reduce 출력의 보기
"13-12-2010":8
"14-12-2010":6
"15-12-2010":9

reduce 구현이 리스트 9에 표시된다. Hadoop의 MapperReducer는 매개변수화되었다. 즉, 처음 두 개의 매개변수는 수신되는 키 유형(Text)과 값 유형(IntWritable)이고, 나중 두 개의 매개변수는 출력 유형인 키와 값이며, 이 경우에 이는 동일하다.


리스트 9. reduce 구현
public class EarthQuakesPerDateReducer extends Reducer<Text, IntWritable, Text, 
  IntWritable> {
 @Override
 protected void reduce(Text key, Iterable<IntWritable> values, Context context)
  throws IOException, InterruptedException {
  int count = 0;
  for (IntWritable value : values) {
   count++;
  }
  context.write(key, new IntWritable(count));
 }
}

reduce 구현은 지극히 간단하다. 리스트 7에서 지적한 대로, 수신되는 값은 실제로 값의 콜렉션이며, 이 경우에는 1 값들의 콜렉션을 의미한다. 필자가 수행하는 것은 이를 합한 다음, 날짜와 개수를 표현하는 새로운 키-값 쌍을 작성하는 것이다. 그 다음에 reduce 코드가 기본적으로 리스트 8에서 확인한 행을 산출한다. 논리적 플로우는 다음과 같다.

"13-12-2010":[1,1,1,1,1,1,1,1] -> "13-12-2010":8

이 목록의 요약 양식은 물론, map -> reduce이다.


Hadoop Job 정의하기

이제 mapreduce 구현을 코드 작성했으니, 남은 일은 Hadoop Job으로 모두 연결하는 것이다. Job을 정의하는 것은 간단하다. 즉, 입력과 출력인 mapreduce 구현(리스트 6리스트 9에 표시됨) 및 출력 유형을 제공한다. 이 경우에 출력 유형은 reduce 구현에 사용되는 것과 동일하다.


리스트 10. Job은 map과 reduce를 함께 묶는다
public class EarthQuakesPerDayJob {

 public static void main(String[] args) throws Throwable {

  Job job = new Job();
  job.setJarByClass(EarthQuakesPerDayJob.class);
  FileInputFormat.addInputPath(job, new Path(args[0]));
  FileOutputFormat.setOutputPath(job, new Path(args[1]));

  job.setMapperClass(EarthQuakesPerDateMapper.class);
  job.setReducerClass(EarthQuakesPerDateReducer.class);
  job.setOutputKeyClass(Text.class);
  job.setOutputValueClass(IntWritable.class);

  System.exit(job.waitForCompletion(true) ? 0 : 1);
 }
}

리스트 10에서 두 개의 매개변수를 취하는 main 메소드로 모두 함께 묶었다. 즉, 이는 지진 CSV 파일인 디렉토리와 결과 보고서가 작성되어야 하는 디렉토리(Hadoop은 이 디렉토리를 작성하는 것을 선호함)이다.

이러한 작은 프레임워크를 실행하려면 이러한 클래스를 jar로 해야 할 것이다. 또한 Hadoop에 opencsv 바이너리를 찾을 수 있는 위치를 알려야 할 것이다. 그 다음에 리스트 11과 같이 명령행을 통해 Hadoop을 실행할 수 있다.


리스트 11. Hadoop 실행하기
$> export HADOOP_CLASSPATH=lib/opencsv-2.2.jar
$> hadoop jar target/quake.jar com.b50.hadoop.quake.EarthQuakesPerDayJob
   ~/temp/mreduce/in/ ~/temp/mreduce/out

이 코드를 실행하면, Hadoop이 그 작업 수행을 시작하면 화면에 많은 텍스트가 날라다니는 것을 확인할 것이다. 사용 중인 CSV 파일은 Hadoop이 처리하기 위해 빌드한 큰 개와 비교하면 강아지에 불과하다는 점을 유의하자. 처리 성능에 따라 Hadoop은 수 초 내에 이를 완료해야 한다.

완료하면 가상으로 편집기를 통해 출력 파일의 컨텐츠를 볼 수 있다. 또 다른 옵션은 리스트 12에서 수행한 것처럼 hadoop 명령을 직접 사용하는 것이다.


리스트 12. Hadoop의 출력 읽기
$> hadoop dfs -cat part-r-00000 
05-12-2010      43
06-12-2010      143
07-12-2010      112
08-12-2010      136
09-12-2010      178
10-12-2010      114
11-12-2010      114
12-12-2010      79

독자가 필자와 비슷하다면 리스트 12에서 확인할 첫 번째 내용은 일일 지진의 수 그 자체이다 — 12월 9일에 178만 있다! Hadoop이 필자가 수행하려는 바로 그것을 수행했다는 점도 인식하길 바란다. 필자의 범위 내 모든 날짜에 대해 지진 발생 수를 깔끔하게 표로 만들었다.


또 다른 Mapper 쓰기

다음으로, 지진이 발생하는 위치를 알아내고, 어느 위치가 날짜 범위에서 대부분의 지진을 로그하는지 어떻게든 빠르게 측정하고자 한다. 자, 아마 추측한 대로, Hadoop을 통해 그렇게 간편하게 수행된다. 이 경우에 키는 날짜가 아니라 위치이다. 따라서, 새 Mapper 클래스를 쓴다.


리스트 13. 새 map 구현
public class EarthQuakeLocationMapper extends Mapper<LongWritable, Text, Text,
  IntWritable> {
 @Override
 protected void map(LongWritable key, Text value, Context context) throws IOException,
  InterruptedException {
  if (key.get() > 0) {
   String[] lines = new CSVParser().parseLine(value.toString());
   context.write(new Text(lines[9]), new IntWritable(1));
  }
 }
}

날짜를 확보하고 이를 변환하는 것이 아니라, 리스트 13에서 수행한 전부는 위치를 취하는 것이었으며, 이는 CSV 배열에서 최종 위치상의 항목이었다.

위치와 그 숫자의 거대한 목록이 아니라, 결과를 어느 7일 기간에나 10회 이상의 지진이 나타난 위치로 제한하려고 한다.


리스트 14. 어디에서 지진이 더 많이 나타나는가?
public class EarthQuakeLocationReducer extends Reducer<Text, IntWritable, Text,
  IntWritable> {
 @Override
 protected void reduce(Text key, Iterable<IntWritable> values, Context context)
  throws IOException, InterruptedException {
  int count = 0;
  for (IntWritable value : values) {
   count++;
  }
  if (count >= 10) {
   context.write(key, new IntWritable(count));
  }
 }
}

리스트 14에서 코드는 리스트 9에 있는 것과 매우 유사하다. 하지만 이 경우에 10개 이상의 합으로 출력을 제한했다. 그 다음으로, 새로운 답변을 얻기 위해 mapreduce를 또 다른 Job 구현과 묶고, jar로 만들어 Hadoop을 정상으로 실행할 수 있다.

hadoop dfs 명령을 실행하면 다음과 같이 요청한 새 값을 표시한다.


리스트 15. 위치별 지진
$> hadoop dfs -cat part-r-00000 
Andreanof Islands, Aleutian Islands, Alaska     24
Arkansas        40
Baja California, Mexico 101
Central Alaska  74
Central California      68
Greater Los Angeles area, California    16
Island of Hawaii, Hawaii        16
Kenai Peninsula, Alaska 11
Nevada  15
Northern California     114
San Francisco Bay area, California      21
Southern Alaska 97
Southern California     115
Utah    19
western Montana 11


리스트 15에서 배울 내용은 무엇인가? 자, 먼저 멕시코에서 알래스카에 이르는 북미의 서부 해안은 불안정한 지역이다. 두 번째로, 아칸소는 명백히 단층선 근처에 위치하고 있으며, 이는 필자가 인식하지 못한 점이다. 마지막으로 독자가 북부 또는 남부 캘리포니아(많은 소프트웨어 개발자들이 거주함)에 산다면 독자 주변의 지반은 대략 매 13분마다 흔들린다.


결론

Hadoop으로 데이터를 분석하는 것은 간편하고 효율적이므로, 데이터 분석을 위해 제공해야 하는 내용조차도 수박 겉핥기식으로 다루지 않았다. Hadoop은 실제로 mapreduce를 실행하는 다양한 노드의 조정을 처리하는 분산된 방식으로 실행하도록 설계되었다. 예제의 목적을 위해 이 기사에서 보잘 것 없는 파일 하나로 하나의 JVM에서 Hadoop을 실행했다.

Hadoop은 보유하기에 그 자체로 탁월한 도구이며, 또한 이와 관련하여 하위 프로젝트에서부터 클라우드 기반 Hadoop 서비스에 이르기까지 전체적이며 성장하는 에코시스템도 있다. Hadoop 에코시스템은 프로젝트 배후에 풍부한 커뮤니티를 시연한다. 커뮤니티에서 파생된 많은 도구들은 전역 비즈니스 활동으로 대용량 데이터 분석의 실행 가능성을 보여준다. Hadoop을 통해 분산 데이터 마이닝과 분석은 Google과 Yahoo!를 포함하지만 이에 국한되지 않은 모든 종류의 소프트웨어 혁신자와 기업가들이 사용할 수 있다.


참고자료

교육

  • Java development 2.0: 이 dW 시리즈에서는 Java 개발 환경을 다시 정의하는 각종 기술을 탐구한다. 최신 주제로는 MongoDB(2010년 9월), CouchDB(2009년 11월) 및 Objectify AppEngine(2010년 11월)이 있다.

  • "Hadoop을 이용한 분산 데이터 처리, Part 1: 시작"(M. Tim Jones저, developerWorks, 2010년 5월): 이 기사는 — 시리즈의 첫 번째 — HDFS(Hadoop file system)와 일반적으로 사용되는 노드 유형을 비롯한 Hadoop 프레임워크에 대해 살펴본다. 단일 노드 Hadoop 클러스터를 설치 및 구성하는 방법을 학습한 후 MapReduce 애플리케이션에 대해 자세히 설명한다. 마지막으로 Hadoop의 핵심 웹 인터페이스를 사용하여 Hadoop을 모니터링 및 관리하는 방법에 대해 살펴본다. 또한 Part 2Part 3도 참조한다.

  • "클라우드에서 MapReduce 및 로드 밸런싱 사용하기(Kirpal A. Venkatesh 외 저, developerWorks, 2010년 7월): Hadoop MapReduce 및 가상화로 노드 성능을 개선하는 방법을 배워보자.

  • "A profile of Apache Hadoop MapReduce computing efficiency, Part 1"(Paul Burkhardt저, Cloudera Development Center, 2010년 12월): MapReduce 애플리케이션이 얼마나 효율적으로 컴퓨팅 자원을 사용하는지에 대한 두 개의 파트로 된 설명이다. 처음 반은 Hadoop MapReduce 애플리케이션을 평가하는 것과 관련되는 컴퓨팅 효율성의 개요이다.

  • "Hadoop companies everywhere"(Alex Handy저, SD Times, 2009년 7월): 회사는 매일 데이터를 더 많이 생성하지만, 이들 중 많은 수가 비즈니스 인텔리전스를 이끌어내지 않는다. 이는 기회라고 쓰고 Handy라고 읽는다.

  • 이런 기술 주제와 다른 기술 주제에 대한 서적 정보는 Java technology bookstore를 참조한다.

  • developerWorks Java 기술 영역: Java 프로그래밍과 관련된 모든 주제를 다루는 여러 편의 기사를 찾아보자.

제품 및 기술 얻기

토론

  • developerWorks 커뮤니티에 참여하자. 개발자가 이끌고 있는 블로그, 포럼, 그룹 및 Wiki를 살펴보면서 다른 developerWorks 사용자와 의견을 나눌 수 있다.

필자소개

Andrew Glover 사진

Andrew Glover는 Stelligent Incorporated의 사장이다. 회사들이 코드 품질을 일찍 그리고 자주 모니터할 수 있게 하는 효과적인 개발자 테스팅 전략과 지속적 통합 기법으로 소프트웨어 품질 문제를 해결하는 것을 돕고 있다. Andy의 저서 목록은 그의 블로그를 보라.

 

Posted by 1010
98..Etc/Etc...2013. 2. 18. 10:28
반응형

출처 : http://www.ksug.org/94 

정상혁

이미 35개 이상의 Accenture 고객사에 Spring batch가 적용되고 있다

스프링배치 연재(1) 배치처리의 특징

스프링배치 연재(2) 대용량 처리 배치 프로그램을 만들 때 유의할 점

스프링배치 연재(3) 스프링배치 프로젝트와 주요 기능들

스프링배치 연재(4) 스프링배치의 구조와 구성요소들

스프링배치 연재(5) ItemReader와 ItemWriter

스프링배치 연재(6) 플랫파일 읽기와 쓰기

스프링배치 연재(7) XML파일 읽기와 쓰기

스프링배치 연재(8) JDBC를 이용한 Cursor 기반의 DB 조회

스프링배치 연재(9) JobRepository

스프링배치 연재(10) JobLauncher와 Job, Step

스프링배치 연재(11) 재시작과 재시도

스프링배치 연재(12) 이벤트 처리, 유효성 검사, 변환, 기존 클래스 활용

스프링배치 연재(13) 스프링배치의 형제들

스프링배치 연재(14) 드라이빙 쿼리와 iBatis의 활용

스프링배치 연재(15) 하이버네이트 활용과 여러파일 읽기

스프링배치 연재(16) DB to XML 파일 만들기 예제

배치 어플리케이션 실행 스크립트와 빌드

박찬욱님

엘레강스한 배치 추상화 프레임웍 - 스프링 배치

[Beta 1.0]Spring Batch 프레임웍 레퍼런스 한글 편역 버전.

[Beta 2.0] Spring Batch 프레임웍 레퍼런스 한글 편역 버전.

[Beta 3.0] Spring Batch 프레임웍 레퍼런스 한글 편역 버전.

제 1부. 스프링 배치 기본 아키텍처와 잡(Job) 직접 실행해보기

제 2부. FlatFileItemReader와 그 친구들(파트1)

제 2부. FlatFileItemReader와 그 친구들(파트2) (소스 및 PPT)

제 3부. FlatFileItemWriter와 아이템 변환하기 (소스 및 PPT)

제 4부. StAX 기반 아이템 처리 (소스 및 PPT)

제 5부. 데이터베이스에 아이템 쓰고, 읽고~ (소스 및 PPT)

제 6부. 배치 반복 처리하기

Spring Batch 쓰임새 분석 - 단순한 배치 반복하기

Spring Batch 쓰임새 분석 - 자동적인 재시작

Batch Processing Strategies at Spring Batch

스프링 배치's 액터(Actor)

Spring Batch 1.0에서 2.0으로 진화하기- 1. ItemReader/ItemWriter(1)

Spring Batch 1.0에서 2.0으로 진화하기- 1. ItemReader/ItemWriter(2)

Spring Batch 1.0에서 2.0으로 진화하기- 3. JobExecutionLisneter & 4. ItemProcessor

Spring Batch 1.0에서 2.0으로 진화하기- 5. Configuration

백기선님

The Domain Language of Batch - Spring Batch Chapter 2

ItemReader - Spring Batch Chapter 3

경구사님

Spring batch 개발환경 설정

김승권님

차세대배치시스템구축성공전략

- [Spring batch]차세대 배치시스템 구축 성공전략 - JCO컨퍼런스

박재성님

Spring Batch 시작하기

KSUG포럼

SpringBatch에 대한 경험담을 듣고 싶습니다.

Spring Batch ItemReader 구현체에 대한 궁금증

Posted by 1010
05.JSP2013. 2. 13. 16:20
반응형
Posted by 1010
반응형

출처 : http://roughexistence.tistory.com/67

 

window객체의 onerror를 사용하시면 됩니다.

웹페이지에 아래 예제에서 처럼 빨간부분의 코드를 추가하시면 됩니다.

"엑세스가 거부되었습니다"도 잡힙니다.

<script type="text/javascript">
window.onerror=function(msg,file,line) {
alert("오류메세지\t"+msg+"\n"+"파일위치\t"+file+"\n"+"라인번호\t"+line);
return true; //true를 return하면 오류메세지를 발생시키지 않음
}
</script>
<script type="text/javascript">
var obj='myobj; //테스트를 위해 오류를 발생시킨 부분
</script>

다른 방법 정리
window.onerror = ErrorSetting

var e_msg="";
var e_file="";
var e_line="";

function ErrorSetting(msg, file_loc, line_no) {
e_msg=msg;
e_file=file_loc;
e_line=line_no;
return true;
}

Posted by 1010
02.Oracle/DataBase2013. 2. 6. 11:41
반응형

출처 : http://dbclose.tistory.com/75

 

오라클은 MySql 에서 지원하는 order by LIMIT 를 지원하지 않아 페이징 처리 속도가 느리다.

알려진 오라클 페이징 기법을 테스트 하여 속도를 비교해 보자

SAMPLE 테이블에 100만건의 데이트를 입력 후 10개씩 보여지는 마지막 페이지를 조회
정렬 조건은 PRIMARY KEY DESC 정렬

1. 페이지 수를 계산하여 셀렉트

SELECT B.* FROM (
SELECT
CEIL(ROWNUM/10) PAGE
--, COUNT(*) OVER() AS TOTAL_COUNT
, A.* FROM (
SELECT * FROM OP_SAMPLE
ORDER BY ID DESC
) A
) B
WHERE PAGE = 100000;


100만 건인 경우 수행시간 : 1.327초, TOTAL_COUNT 까지 조회시 : 3.848초
10만 건인 경우 수행시간 : 0.135초 TOTAL_COUNT 까지 조회시 : 0.255초



2. ROW_NUMBER()를 이용한 페이징

SELECT * FROM (
SELECT A.*, ROW_NUMBER() OVER(ORDER BY ID DESC) AS NUM
FROM OP_SAMPLE A
)
WHERE NUM BETWEEN 999991 AND 1000000;

100만 건인 경우 수행시간 : 1.136초
10만 건인 경우 수행시간 : 0.253초



3. ROWNUM을 이용한 페이징

SELECT * FROM (
SELECT ROWNUM AS RNUM, Z.* FROM (
SELECT * FROM OP_SAMPLE ORDER BY ID DESC
) Z WHERE ROWNUM <= 1000000
) WHERE RNUM >= 999991;

100만 건인 경우 수행시간 : 0.826초
10만 건인 경우 수행시간 : 0.087초



4. ROWNUM + 인덱스를 이용한 페이징

SELECT * FROM (
SELECT /*+ INDEX_DESC(Z OP_SAMPLE_PK) */ ROWNUM AS RNUM, Z.* FROM (
SELECT * FROM OP_SAMPLE
) Z WHERE ROWNUM <= 1000000
) WHERE RNUM >= 999991;

100만 건인 경우 수행시간 : 0.687초
10만 건인 경우 수행시간 : 0.079초



참고로 MySql 쿼리 조회시 (mysql 5, innoDB)

SELECT * FROM OP_SAMPLE
ORDER BY ID DESC LIMIT 999991, 10;

100만 건인 경우 수행시간 : 0.033초
Posted by 1010
02.Oracle/DataBase2013. 2. 5. 23:29
반응형

TOAD for Oracle Freeware 10.6 Free Download

Secure TOAD for Oracle Freeware Download Options

Download Now! TOAD for Oracle Freeware 10.6

More download options:

 

TOAD for Oracle Freeware 9.7

Thank you for downloading
Free Download

TOAD for Oracle Freeware 9.7


Simplify Oracle database administration tasks
  • Server 1 Brothersoft(US) Click to Download
  • Posted by 1010
    반응형

    In this article I will create a custom Spark Panel component that will look something like this:

    Spark Panel Component Skin

    You can find the working example lower on this page.

    There are five steps that you must take to create a new Flex 4 Skin (for any Spark component):

    1. Create a new MXML component that extends the SparkSkin class
    2. Define the states of the Skin. The default states for most of the components are normal and disabled
    3. Define the HostComponent between Metadata tags
    4. Specify all the graphical elements that are used by the custom Skin
    5. Define the skin parts for the skin

    So the first thing that I did was to create a custom MXML component for the Spark Panel skin. I created this component in the skins folder and I named the custom skin PanelSkin.

    The next step was to define the states of the skin. To see what states are available for any Spark component you should check out the Adobe ActionScript 3.0 Reference for the Adobe Flash Platform online documentation.

    For the Spark Panel custom skin I used four states:

    	<s:states>
    		<s:State name="normal" />
    		<s:State name="disabled" />
    		<s:State name="normalWithControlBar" />
    		<s:State name="disabledWithControlBar" />
    	</s:states>

    The normal and disabled states are the default states when the Panel does not have a Control Bar. The normalWithControlBar and disabledWithControlBar states are used when the Panel is defined with a Control Bar.

    Next we need to specify the HostComponent between Metadata tags. The HostComponent will be the path to the Spark component that will be skinned. In this case: spark.components.Panel:

    	<fx:Metadata>
    		[HostComponent("spark.components.Panel")]
    	</fx:Metadata>

    Next I specified all the graphical elements of the skin:

    	<s:BorderContainer color="0xAAAAAA" cornerRadius="7"
    					   width="100%" height="100%">
    		<s:Rect width="100%" height="45" 
    				topLeftRadiusX="7" topLeftRadiusY="7" topRightRadiusX="7" topRightRadiusY="7"
    				top="0">
    			<s:fill>
    				<s:LinearGradient rotation="90">
    					<s:entries>
    						<s:GradientEntry color="#bf0000" />
    						<s:GradientEntry color="#ff0011" />
    					</s:entries>
    				</s:LinearGradient>
    			</s:fill>
    		</s:Rect>
     
    		<s:Rect bottomLeftRadiusX="7" bottomRightRadiusX="7"
    				y="45"
    				width="100%" height="100%">
    			<s:fill>
    				<s:LinearGradient rotation="90">
    					<s:entries>
    						<s:GradientEntry color="#f8f8f8" />
    						<s:GradientEntry color="#CCCCCC" />
    					</s:entries>
    				</s:LinearGradient>
    			</s:fill>
    		</s:Rect>
     
    		<s:Rect width="100%" height="40" 
    				excludeFrom="normal, disabled"
    				bottomLeftRadiusX="7" bottomLeftRadiusY="7" bottomRightRadiusX="7" bottomRightRadiusY="7"
    				bottom="0">
    			<s:fill>
    				<s:LinearGradient rotation="90">
    					<s:entries>
    						<s:GradientEntry color="#3f3f3f" />
    						<s:GradientEntry color="#a5a5a5" />
    					</s:entries>
    				</s:LinearGradient>
    			</s:fill>
    		</s:Rect>
    	</s:BorderContainer>

    At a glance this looks like a lot of code, but it is actually pretty straight forward. I declared a BorderContainer and inside this another three Rect blocks for the Panel header, Panel body and Panel Control Bar.

    Inside every Rect block I have LinearGradient with different colors for every Rect. In the last Rect I added this code excludeFrom="normal, disabled" which will exclude this Control Bar from the Skin when the panel is declared without the Control Bar.

    The last step is to define the skin parts. The Spark Panel has three skin parts: contentGroup for the Panel body, controlBarGroup for the Panel Control Group and titleDisplay for the Panel Header:

    	<s:Label id="titleDisplay" 
    			 paddingLeft="15" paddingRight="15" paddingTop="15"
    			 color="white"
    			 fontSize="18"
    			 fontWeight="bold"
    			 fontStyle="italic"/>
     
    	<s:Group id="contentGroup">
    		<s:layout>
    			<s:VerticalLayout paddingTop="55" paddingBottom="10" paddingLeft="15" paddingRight="15"
    							  paddingBottom.disabledWithControlBar="55" paddingTop.disabledWithControlBar="55"
    							  paddingBottom.normalWithControlBar="55" paddingTop.normalWithControlBar="55"/>
    		</s:layout>
    	</s:Group>
     
    	<s:Group id="controlBarGroup" bottom="10">
    		<s:layout>
    			<s:HorizontalLayout paddingLeft="5" paddingRight="5"/>
    		</s:layout>
    	</s:Group>

    Ok, that’s all as far as the Panel Custom Skin is concerned. Now I will focus on the applying the Custom Skin to a few Panel instance in the application. To apply a Custom Skin to a Spark component you will use skinClass property like this:

    	<s:Panel id="myPanel1"
    			 skinClass="skins.PanelSkin"
    			 title="My first panel title">

    Here is the resulting application:


    View Source is enabled in the above example. To view the source files right click on the swf and choose “View Source” from the context menu.

    Here is the complete source code for the main application:

    <?xml version="1.0" encoding="utf-8"?>
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
    			   xmlns:s="library://ns.adobe.com/flex/spark" 
    			   xmlns:mx="library://ns.adobe.com/flex/mx" 
    			   viewSourceURL="srcview/index.html">
     
    	<s:layout>
    		<s:HorizontalLayout paddingTop="5" horizontalAlign="center" verticalAlign="middle"/>
    	</s:layout>
     
    	<s:Panel id="myPanel1"
    			 skinClass="skins.PanelSkin"
    			 title="My first panel title">
     
    		<mx:Text text="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. " 
    				 width="200" />
     
    		<s:controlBarContent>
    			<s:Button label="First Button"/>
    			<s:Button label="Second Button"/>
    		</s:controlBarContent>
     
    	</s:Panel>
     
    	<s:Panel id="myPanel2"
    			 skinClass="skins.PanelSkin"
    			 title="My second panel title">
     
    		<mx:Text text="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. " 
    				 width="200" />
     
    	</s:Panel>
     
    </s:Application>

    And here is the complete source code for the Custom Skin Class:

    <?xml version="1.0" encoding="utf-8"?>
    <s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" 
    			 xmlns:s="library://ns.adobe.com/flex/spark" 
    			 xmlns:mx="library://ns.adobe.com/flex/mx" 
    			 alpha.disabled="0.5" 
    			 blendMode="normal">
     
    	<s:states>
    		<s:State name="normal" />
    		<s:State name="disabled" />
    		<s:State name="normalWithControlBar" />
    		<s:State name="disabledWithControlBar" />
    	</s:states>
     
    	<fx:Metadata>
    		[HostComponent("spark.components.Panel")]
    	</fx:Metadata> 
     
    	<s:BorderContainer color="0xAAAAAA" cornerRadius="7"
    					   width="100%" height="100%">
    		<s:Rect width="100%" height="45" 
    				topLeftRadiusX="7" topLeftRadiusY="7" topRightRadiusX="7" topRightRadiusY="7"
    				top="0">
    			<s:fill>
    				<s:LinearGradient rotation="90">
    					<s:entries>
    						<s:GradientEntry color="#bf0000" />
    						<s:GradientEntry color="#ff0011" />
    					</s:entries>
    				</s:LinearGradient>
    			</s:fill>
    		</s:Rect>
     
    		<s:Rect bottomLeftRadiusX="7" bottomRightRadiusX="7"
    				y="45"
    				width="100%" height="100%">
    			<s:fill>
    				<s:LinearGradient rotation="90">
    					<s:entries>
    						<s:GradientEntry color="#f8f8f8" />
    						<s:GradientEntry color="#CCCCCC" />
    					</s:entries>
    				</s:LinearGradient>
    			</s:fill>
    		</s:Rect>
     
    		<s:Rect width="100%" height="40" 
    				excludeFrom="normal, disabled"
    				bottomLeftRadiusX="7" bottomLeftRadiusY="7" bottomRightRadiusX="7" bottomRightRadiusY="7"
    				bottom="0">
    			<s:fill>
    				<s:LinearGradient rotation="90">
    					<s:entries>
    						<s:GradientEntry color="#3f3f3f" />
    						<s:GradientEntry color="#a5a5a5" />
    					</s:entries>
    				</s:LinearGradient>
    			</s:fill>
    		</s:Rect>
    	</s:BorderContainer>
     
    	<s:Label id="titleDisplay" 
    			 paddingLeft="15" paddingRight="15" paddingTop="15"
    			 color="white"
    			 fontSize="18"
    			 fontWeight="bold"
    			 fontStyle="italic"/>
     
    	<s:Group id="contentGroup">
    		<s:layout>
    			<s:VerticalLayout paddingTop="55" paddingBottom="10" paddingLeft="15" paddingRight="15"
    							  paddingBottom.disabledWithControlBar="55" paddingTop.disabledWithControlBar="55"
    							  paddingBottom.normalWithControlBar="55" paddingTop.normalWithControlBar="55"/>
    		</s:layout>
    	</s:Group>
     
    	<s:Group id="controlBarGroup" bottom="10">
    		<s:layout>
    			<s:HorizontalLayout paddingLeft="5" paddingRight="5"/>
    		</s:layout>
    	</s:Group>
     
    </s:SparkSkin>
    Posted by 1010
    반응형

    The <mx:Panel> tag inherits all of the tag attributes of its superclass and adds the following tag attributes:

      <mx:Panel
       Properties
       layout="vertical|horizontal|absolute"
       status=""
       title=""
       titleIcon="null"
      
       Styles
       borderAlpha="0.4"
       borderThicknessBottom="NaN"
       borderThicknessLeft="10"
       borderThicknessRight="10"
       borderThicknessTop="2"
       controlBarStyleName="null"
       cornerRadius="4"
       dropShadowEnabled="true|false"
       footerColors="null"
       headerColors="null"
       headerHeight="Based on style of title"
       highlightAlphas="[0.3,0]"
       horizontalAlign="left|center|right"
       horizontalGap="8"
       modalTransparency="0.5"
       modalTransparencyBlur="3"
       modalTransparencyColor="#DDDDDD"
       modalTransparencyDuration="100"
       paddingBottom="0"
       paddingTop="0"
       roundedBottomCorners="false|true"
       shadowDirection="center|left|right"
       shadowDistance="2"
       statusStyleName="windowStatus"
       titleBackgroundSkin="TitleBackground"
       titleStyleName="windowStyles"
       verticalAlign="top|middle|bottom"
       verticalGap="6"
      
       Effects
       resizeEndEffect="Dissolve"
       resizeStartEffect="Dissolve"
       >
          ...
          child tags
          ...
      </mx:Panel>
      

    View the examples

     

    Posted by 1010
    98..Etc/Etc...2013. 1. 11. 10:17
    반응형

    출처 : http://jaures.egloos.com/2290270 

     

    Eclipse를 사용하다 보면 이런저런 이유로 속도가 느려지는 경험을 다 한 두번씩은 해봣을 것이다.
    SVN repository에서 업데이트를 하는경우 build 작업하는 경우, 서버를 띄워서 작업을 하고 있는데 eclipse가 사용하는 메모리가 과도하게 늘어나서 문제가 생기는 경우 등등...

    확실한 해결책은 아니겠지만, 나름대로 쾌적한(?) 환경에서 eclipse를 사용할 수 있도록 도와주는 방법을 몇가지 소개해본다.


    1. Close Project

    여러개의 project를 동시에 작업하는 경우에는 svn에서 update만 받아도 관련된 모든 project가 다시 빌드 작업을 진행해버려 그동안은 넋놓고 멍하니 기다리거나 작업의 리듬이 깨져버리는 경우가 많았다. 간혹 elcipse를 다시 재시작 해야하는 경우에도 재시작하는 시간이 너무 오래걸려 재시작을 고민해야 하는 경우도 종종 있었다.


    이런 경우에는 해당 project를 닫아버리는게 큰도움이 되는데, 이건 아주 간단하게 바로 작업에 사용할 project가 아니라면 Package Explorer에서 해당 프로젝트의 컨텍스트 메뉴에서 "Close Project"를 해버리면 된다. 작업할 때에는 다시 컨텍스트 메뉴에서 "Open Proejct"를 하면 된다.


    2. Spelling 검사 끄기

    필요한 경우도 있겠지만, 대다수의 경우에는 철자검사를 할필요는 없을것 같다. 철자검사를 해제하면 에디터상에서 철자에 대한 검사를 실행하지 않기 때문에 조금은 더 빠르게 작업을 할수 있다.


    Window > Preferences > General > Editors > Text Editors > Spelling 에서 Enable spell checking 체크박스를 해제하면 된다.


    3. Startup and Shutdown

    Eclipse plug-in을 이것저것 설치해서 사용하다보면 시작시에 불필요한 작업이 많아진다. 꼭 그런것은 아니지만 시작시에 plug-in의 업데이트를 확인한다거나 plug-in의 특정 모듈을 activate 한더거나 등등.

    작업에 꼭 필요하지 않다고 생각되는 것들은 시작 항목에서 빼버리게 되면 그만큼 eclipse의 시작 실행속도가 빨라지게 된다. 이 항목에서는 또한 eclipse 종료시에 대한 설정도 할수 있다.


    Window > Preferences > General > Startup and Shutdown > Plug-ins activated on startup 에서 사용하지 않을 항목에 대해 체크박스를 해제하면 된다.


    4. Eclipse status memory monitor

    Eclipse는 JRE 위에서 실행되는 java 프로그램이라서 eclipse를 실행한 후에 일정 기간이 지나게 되면 Gabarge Collection을 하게 된다. 더군다나 eclipse는 많은 메모리를 사용하는 것으로 악명(?)이 높기 때문에 GC가 제때 수행되지 않거나 주기가 길어지는 경우 프로그램을 실행할 메모리 자체가 줄어들어 작업 자체가 힘들어진다.

    이럴 경우 Eclipse status memory monitor plug-in을 사용해 메모리가 모자르다 싶으면 바로 GC를 강제로 수행해 메모리를 확보할 수 있다. 또한 현재 Eclipse가 사용하고 있는 메모리의 상태를 직접 확인할 수 있으므로 아무런 이유없이 eclipse가 느려지는 답답함을 해소(?)할 수도 있다.




    5. Validation

    보통 view 작업을 진행하다 보면, 여러가지 코드가 한 파일에 뒤섞이게 된다. JSP 파일안에 html, css, javascript, java 등의 코드들이 뒤섞에 있다보면 validation이 크게 의미가 없게 되는 경우가 있는데 이럴 경우에는 굳이 validation을 할필요가 없어지게 된다. Validation은 에디터상에서 말그대로 문법에 대한 오류를 실시간으로 검사해 알려주는 것이기 때문에 validation만 해제해도 eclipse 작업속도에 그 만큼의 영향을 미치게 된다.


    Window > Preferences > General > Validation > Validator 항목에서 문법검사를 하지 않을 항목에 대해 체크를 해제하면 된다.
    Posted by 1010
    80.모바일 웹앱2012. 12. 6. 16:22
    반응형

    출처 : http://stove99.tistory.com/4

     

    Jquery 를 쓰면 쓸수록 이걸 만든 사람들은 천재라는 생각을 하게된다.

    이클립에서 Jquery 코딩을 할때 $("div"). 요래 쩜을 찍었을때 쓸 수 있는 메소드들이 뽓 튀어나오도록 해보자.

    jqueryWTP 라는 이클립 훌러그인인데 이건 다른 훌러그인처럼 Install New Software 로 설치를 간단하게 할수 없다.

    찾아보니까 aptana 라고 다른 훌러그인도 있던데 이것저것 설치할것도 많고 왠지 *.js 파일에만 될것 같기도 해서(실제로 안써봤기 때문에 잘 모른다. *.js 파일 말고도 jsp 나 html 에서 될지도 모름!!!)




    ※ 설치전 이클립을 종료한다음에 설치, 설치한 이클립스는 Helios Service Release 2 버전임.

    뭐 일단 설치하는 방법은

    첫번째 - 훌러그인을 다운로드 받는다. [다운!] 나는 jqueryWTP1.20foEN.jar 이걸 다운받았다.

    두번째 - 다운받은 jar 파일을 실행한다. cmd 창을 열고 java -jar e:\jqueryWTP1.20foEN.jar 를 실행
    ※ 다운로드를 E: 드라이브로 받았음.



    세번째 -
    Jar 파일 선택 : [이클립스설치디렉토리]\plugins 디렉토리 안에 있는 org.eclipse.wst.jsdt.core_xxxxxx.jar 파일 선택
    Output Dir : 패치된 org.eclipse.wst.jsdt.core_xxxxx.jar 파일이 생성될 디렉토리
    Generate 클릭



    네번째 - 패치된 org.eclipse.wst.jsdt.core_xxxxx.jar 파일을 [이클립스설치디렉토리]\plugins 디렉토리에 복사해서 파일 덮어쓰기

    다섯번째 - [현재 쓰고 있는 workspace 디렉토리]\\.metadata\.plugins\org.eclipse.wst.jsdt.core 디렉토리 삭제

    이렇게 하면 설치가 끝난다.

    이클립스를 다시 시작해 보면 이제부터 $("div") 에서 쩜을 찍으면 Code Assist 기능이 적용된다~~~



    ※ 만약 Code Assist 가 되지 않으면 Project > Properties > Project Facets 에 가서 JavaScript 를 체크해 주셈~

     

    Posted by 1010
    80.모바일 웹앱2012. 12. 6. 16:11
    반응형

    jQueryWTP 1.2.0

    Bookmark and Share

    Details Group Tabs

    Details

    jQuery is a fast, concise, JavaScript Library that simplifies how you traverse HTML documents, handle events, perform animations, and add Ajax interactions to your web pages. jQuery is designed to change the way that you write JavaScript.
    Eclipse WTP support javascript code content assistance,but does not support jQuery.
    jQueryWTP is a tool make Eclipse WTP support jQuery code content assistance.

    html5 is also supported

    supported eclipse version is eclipse 3.5,eclipse 3.6

    version 0.40 add support for multi html canvas context variable names
    version 0.50 add support for jquery 1.5 Deferred callback management system
    version 1.0.0 released this version fix a lot of bugs for jquery return type.
    version 1.1.0 released this version add support for jquery 1.5 api
    this version add support jquery1.6 api

    Categories:
    Hide Additional Details
    Version Number:
    1.2.0
    Eclipse Versions:
    3.5,3.6
    Date Updated:
    13 June 2011
    Development Status:
    Beta
    License:
    Free for non-commerical use
    Screenshots
    Metrics
    Clickthroughs 000000 22
    Month Ranking Installs Clickthroughs
    12/12 0 7
    11/12 0 83
    10/12 0 93
    9/12 0 91
    8/12 0 85
    7/12 0 119
    6/12 0 86
    5/12 0 115
    4/12 0 105
    3/12 0 145
    2/12 0 139
    1/12 0 135
    View Data for all Listings
    Errors

    Unsuccessful Installs

    Unsuccessful Installs in the last 7 Days:0

    Download last 500 error reports (CSV)

    Reviews

    Login to post comments.

    this is old download url

    Submitted by jim liu on

    move to google project hosting,because sourceforge lost my user info

    Posted by 1010
    01.JAVA/Java2012. 12. 6. 10:25
    반응형

    -- class 주석

    /**
    * <PRE>
    * 보세운송 조회를 한다.
    * </PRE>
    * @author anhanho
    * @version 1.0
    * @since 13/10/2011
    * @modified
    * @modifier
    */

     

    -- method 주석

    /**
      * @description 행정몰수  게시 (5일 ) + 48시간을  지나면  행정몰수확정이 된다.
      * @param List arg0
      * @return void
      * @throws Exception
      */


     

    Posted by 1010
    80.모바일 웹앱2012. 12. 6. 02:09
    반응형

    1. adt-bundle-windows-x86\sdk\tools 에서 tools 폴더를 tools_temp 로 복사함


    2. tools_temp > android.bat 실행 


    3. android.bat 종료(업데이트 한번은 해줌)


    4. 작업관리자 프로세스에서 adb.exe 프로세스 강제 종료 


    5. tool_temp 폴더 삭제


    6. tools 안에 android 다시 실행


    7. update 후 AVD Manager 실행


    이렇게 해도 안되면... java 환경설정이 꼬여있을수 있으니 다시 한번 확인


    자바 설정후 tools 밑에 android.bat 다시 실행 


    ex)



    Posted by 1010