Jakarta Slide 프로젝트를 이용해 Microsoft Sharepoint Server 연동 문제해결 하기 (
Jakarta Slide 프로젝트를 이용해 Microsoft Sharepoint Server (MOSS or WSS) 연동 문제해결 하기 (NTLM 문제등 ) - v0.4 by Ko,jinhyuk
WebDAV 가 나름 표준이기는 해도 늘 그렇듯 밴더마다 조금식 동작하는게 다르다 보니 이러저런 문제가 생기게 마련이다.
이중에 Java 쪽에 많지 않은 솔루션쪽에 널리알려진게 Jakarta의 Slide WebDAV 프로젝트인데 (2004년 마지막 릴리즈 이후 변화없음)
Slide는 Subversion 에 WebDAV를 얹어서는 잘되던게 MOSS (Microsoft Office Sharepoint Server )에서는 문제가 되는사항들이 좀 있었다. 관련해서 문제가 되었던것과 해결했던것들을
정리해보려고 한다.
이하에서 webdavResource 변수는 org.apache.webdav.lib.WebdavResource 의 인스턴스 이다.
1) isCollection() 의 문제
특정 경로(url)이 directory 인지 여부를 판단할때 사용하게 되는데 문제는 MOSS에서는 파일인 경우에도 isCollection()를 true 로 리턴해버리는 바람에 디렉토리 구별을 할때 문제가 되었다. 이에 대한 대안으로 webdavResource.getSupportedLock() 을 이용해서 결과가 "Exclusive write lock"를 리턴하는 경우에는 파일이므로 (디렉토리에 lock를 걸수는 없으므로) 이를 이용하는 방법이 있었다.
그래서
boolean isFile =!(webdavResource.isCollection() && webdavResource.getSupportedLock().length()<1);
와 같이 할 수 있다.
2) NTLM (NT 도메인 인증 방식)연결을 하려면
일단 최신의 HttpClient 라이브러리 버전을 사용하면 되는데 (Jakarta common library에 있다. ) 여기에 NTLM 관련 scheme 및 NTCredentials 이 포함되어있다.
library 의 jar 경로에 commons-httpclient-3.1.jar 와 같은 최신버전 잡아주고 (아마 commons-codec-1.3.jar,commons-httpclient-contrib.jar 도 필요 할것이다.. 기억이 가물해서).
다음처럼 소스에서 작업을 해주면 된다.
NTCredentials creds = new NTCredentials(userId, password,httpURL.getHost(),NTdomain );
HostConfiguration hostConfig = new HostConfiguration();
hostConfig.setHost(httpURL.getHost());
HttpURL host = new HttpURL(repositoryUrl);
host.setUserinfo(userId,password);
webdavResource = new WebdavResource(host, (Credentials)creds, WebdavResource.DEFAULT, DepthSupport.DEPTH_1);
3) putMethod 의 문제해결
Slide 의 문제인데. NTLM 을 이용한 사용자 인증을 하게 되는 경우 putMethod시 default Auth Scheme 로 Basic 을 사용하다보니 인증실패나고 다시 시도 할때
================================= 에러 스택 =====================================================
org.apache.commons.httpclient.ProtocolException: Unbuffered entity enclosing request can not be repeated.
at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:487)
at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
... 이하 생략
===============================================================================================
위 에러가 발생한다. 이는 put 재시도 를 하면서 발생하는 문제인데 근본적으로 인증실패난 상태에서 put을 날리기 때문이다. slide 의 버그라고 봐야. 기본적으로 connect 하는 과정에서 이미 인증이 되었는데 이때 사용한 auth scheme 를 이용하지 않고 putMethod에서 다시 인증 방식을 새로이 (Basic)하면서 생긴문제다. 여러가지 해결 방안이있겠지만
org.apache.commons.httpclient.auth.AuthState 가 default auth scheme 로 내부변수 PREEMPTIVE_AUTH_SCHEME 에 basic를 박아놓아서... 항상 basic 이 기본이 되는걸...
특정 scheme 가 default로 되도록 고쳐서 적용하려고 한다. 방법은 여러가지가 있겠으나 환경변수로서 NTLM 이나 basic등을 지정하게 하는방법도 있을듯한데
우선 테스트삼아..
/**
* Preemptively assigns Basic authentication scheme.
*/
public void setPreemptive() {
if (!this.preemptive) {
if (this.authScheme != null) {
throw new IllegalStateException("Authentication state already initialized");
}
// this.authScheme = AuthPolicy.getAuthScheme(PREEMPTIVE_AUTH_SCHEME);
this.authScheme = AuthPolicy.getAuthScheme("NTLM");
this.preemptive = true;
}
}
위에// 처리한게 원래 이고 아래줄에 this.authScheme = AuthPolicy.getAuthScheme("NTLM"); 는 일단 동작여부확인을 위해 박아넣은것인데... 예상대로 전송이 안되던게 바로 해결이되었다.
3) getIsHidden() 의 문제해결 - 2007.12.13일 추가
MS WSS 의 경우 DAV Resource(디렉토리나 파일)의 Property 전달과정에서 표준을 지키지 않는 문제가 있다... 뭐 나름 속사정이 있겠지만 . 적어도 표준을 포함하면서 확장하면 모르겠는데 Hidden 디렉토리나 파일에 대한 속석을 slide의 getIsCollection()으로 구하는 경우 false 로 떨어지는 문제가있다. 이것은
보통 Response XML에서0 를 이용하여 속성값을 구하는데 반해 MS의 그것은 Hidden 속성이있는 경우 00000002 처럼 임의 확장 Property 를 추가하고 비트 mask 정보를 이용하여 얻을수있도록하는 (전통적인 MS 방식)것으로 값을 전달하고 있었다. 그래서 이것을 얻어내서 내부적으로 16진수 변환하여 숫자 '2'값과 AND 비트연산을 해봐야 하는것이다.
다음과같이 처리를 했다.
============ 소스 - 1) WebDavResource.java ================
===========================================================
WebDAV 가 나름 표준이기는 해도 늘 그렇듯 밴더마다 조금식 동작하는게 다르다 보니 이러저런 문제가 생기게 마련이다.
이중에 Java 쪽에 많지 않은 솔루션쪽에 널리알려진게 Jakarta의 Slide WebDAV 프로젝트인데 (2004년 마지막 릴리즈 이후 변화없음)
Slide는 Subversion 에 WebDAV를 얹어서는 잘되던게 MOSS (Microsoft Office Sharepoint Server )에서는 문제가 되는사항들이 좀 있었다. 관련해서 문제가 되었던것과 해결했던것들을
정리해보려고 한다.
이하에서 webdavResource 변수는 org.apache.webdav.lib.WebdavResource 의 인스턴스 이다.
1) isCollection() 의 문제
특정 경로(url)이 directory 인지 여부를 판단할때 사용하게 되는데 문제는 MOSS에서는 파일인 경우에도 isCollection()를 true 로 리턴해버리는 바람에 디렉토리 구별을 할때 문제가 되었다. 이에 대한 대안으로 webdavResource.getSupportedLock() 을 이용해서 결과가 "Exclusive write lock"를 리턴하는 경우에는 파일이므로 (디렉토리에 lock를 걸수는 없으므로) 이를 이용하는 방법이 있었다.
그래서
boolean isFile =!(webdavResource.isCollection() && webdavResource.getSupportedLock().length()<1);
와 같이 할 수 있다.
2) NTLM (NT 도메인 인증 방식)연결을 하려면
일단 최신의 HttpClient 라이브러리 버전을 사용하면 되는데 (Jakarta common library에 있다. ) 여기에 NTLM 관련 scheme 및 NTCredentials 이 포함되어있다.
library 의 jar 경로에 commons-httpclient-3.1.jar 와 같은 최신버전 잡아주고 (아마 commons-codec-1.3.jar,commons-httpclient-contrib.jar 도 필요 할것이다.. 기억이 가물해서).
다음처럼 소스에서 작업을 해주면 된다.
NTCredentials creds = new NTCredentials(userId, password,httpURL.getHost(),NTdomain );
HostConfiguration hostConfig = new HostConfiguration();
hostConfig.setHost(httpURL.getHost());
HttpURL host = new HttpURL(repositoryUrl);
host.setUserinfo(userId,password);
webdavResource = new WebdavResource(host, (Credentials)creds, WebdavResource.DEFAULT, DepthSupport.DEPTH_1);
3) putMethod 의 문제해결
Slide 의 문제인데. NTLM 을 이용한 사용자 인증을 하게 되는 경우 putMethod시 default Auth Scheme 로 Basic 을 사용하다보니 인증실패나고 다시 시도 할때
================================= 에러 스택 =====================================================
org.apache.commons.httpclient.ProtocolException: Unbuffered entity enclosing request can not be repeated.
at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:487)
at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
... 이하 생략
===============================================================================================
위 에러가 발생한다. 이는 put 재시도 를 하면서 발생하는 문제인데 근본적으로 인증실패난 상태에서 put을 날리기 때문이다. slide 의 버그라고 봐야. 기본적으로 connect 하는 과정에서 이미 인증이 되었는데 이때 사용한 auth scheme 를 이용하지 않고 putMethod에서 다시 인증 방식을 새로이 (Basic)하면서 생긴문제다. 여러가지 해결 방안이있겠지만
org.apache.commons.httpclient.auth.AuthState 가 default auth scheme 로 내부변수 PREEMPTIVE_AUTH_SCHEME 에 basic를 박아놓아서... 항상 basic 이 기본이 되는걸...
특정 scheme 가 default로 되도록 고쳐서 적용하려고 한다. 방법은 여러가지가 있겠으나 환경변수로서 NTLM 이나 basic등을 지정하게 하는방법도 있을듯한데
우선 테스트삼아..
/**
* Preemptively assigns Basic authentication scheme.
*/
public void setPreemptive() {
if (!this.preemptive) {
if (this.authScheme != null) {
throw new IllegalStateException("Authentication state already initialized");
}
// this.authScheme = AuthPolicy.getAuthScheme(PREEMPTIVE_AUTH_SCHEME);
this.authScheme = AuthPolicy.getAuthScheme("NTLM");
this.preemptive = true;
}
}
위에// 처리한게 원래 이고 아래줄에 this.authScheme = AuthPolicy.getAuthScheme("NTLM"); 는 일단 동작여부확인을 위해 박아넣은것인데... 예상대로 전송이 안되던게 바로 해결이되었다.
3) getIsHidden() 의 문제해결 - 2007.12.13일 추가
MS WSS 의 경우 DAV Resource(디렉토리나 파일)의 Property 전달과정에서 표준을 지키지 않는 문제가 있다... 뭐 나름 속사정이 있겠지만 . 적어도 표준을 포함하면서 확장하면 모르겠는데 Hidden 디렉토리나 파일에 대한 속석을 slide의 getIsCollection()으로 구하는 경우 false 로 떨어지는 문제가있다. 이것은
보통 Response XML에서
다음과같이 처리를 했다.
============ 소스 - 1) WebDavResource.java ================
| public static final String WIN32_ATTRIBUTES="Win32FileAttributes"; ...... ...... protected void processProperty(Property property) { ... 중략 ... // MS WSS (Win32 WebDAV) 서버인경우 처리를 위하여 else if (property.getLocalName().equals(WIN32_ATTRIBUTES)){ if(_logger.isDebugEnabled()){ _logger.debug("set property about Win32 Attributes"); } /** * 1: ReadyOnly, 2:Hidden * http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/createfile.asp * http://www.nlog-project.org/help/NLog.Internal.Win32.Win32FileAttributes.html * * MS의 WSS인경우에는 isHidden 대신 WIN32_ATTRIBUTES 로 속성을 전달하는경우가 있으므로 * * HEX 값으로 변형하여 2 값이 set되어있는 경우 */ if((Integer.parseInt(property.getPropertyAsString(),16) & 2)==2){ this.setIsHidden(true); } } |
와이브로 ITU(국제전기통신여에서 국제표준으로 채택
와이브로 ITU(국제전기통신연합) 에서 국제표준으로 채택
ITU는 2007년 10월 18일 오후 제네바 국제회의센터에서 진행된 전파총회 (Radio Assembly) 본회의에서 한국의 와이브로를 3G 국제표준으로 채택했다.
============
그간 3G 표준으로 채택되려던 기술 가운데 와이브로가 국제표준으로 채택되었다. 많은 3G 기술 가운데서도 4세대에 가까운 기술이라는점(MIMO나 OFDM을 포함한다)도 유리하게 작용했을것으로 본다.
어째거나 이제 국내기술이 3G 표준이 되었고 이에 대한 영향이 당연히 국내에 적잖이 파장을 미칠것으로 본다. HSDPA와 와이브로 기술이 서로 보완재라며 공존하고있는데.. 적어도 데이터통신분야에서는 와이브로가 대세가 되지 않을까싶다.. 해당 업체에서 머뭇거리더라도 늘그렇듯 정부(정통부)에서 밀어부친다면 와이브로가 곧 상용에서도 널리 확산될것이다.
여러가지 많은 기대를 하게 하는 기사였다.
ITU는 2007년 10월 18일 오후 제네바 국제회의센터에서 진행된 전파총회 (Radio Assembly) 본회의에서 한국의 와이브로를 3G 국제표준으로 채택했다.
============
그간 3G 표준으로 채택되려던 기술 가운데 와이브로가 국제표준으로 채택되었다. 많은 3G 기술 가운데서도 4세대에 가까운 기술이라는점(MIMO나 OFDM을 포함한다)도 유리하게 작용했을것으로 본다.
어째거나 이제 국내기술이 3G 표준이 되었고 이에 대한 영향이 당연히 국내에 적잖이 파장을 미칠것으로 본다. HSDPA와 와이브로 기술이 서로 보완재라며 공존하고있는데.. 적어도 데이터통신분야에서는 와이브로가 대세가 되지 않을까싶다.. 해당 업체에서 머뭇거리더라도 늘그렇듯 정부(정통부)에서 밀어부친다면 와이브로가 곧 상용에서도 널리 확산될것이다.
여러가지 많은 기대를 하게 하는 기사였다.
공유 폴더 사용을 Windows Command Line 명령으로 해보자
공유 폴더 사용을 Windows Command Line 명령으로 해보자
net use 명령을 사용하면 된다. 다음과 같은 형태로 입력을 하면되고
net use <드라이브명>: "\" <패스워드> /USER:<도메인><사용자id>
사용예제는
net use G: \192.168.1.1sampledir iloveyou /USER:WORKfooman
WORK 도메인에 속한 fooman이란 사용자로 로그인을 하며 이때 비번이 iloveyou 이고 드라이브명은 G 로 한다.
이렇게해서 배치파일등에서 사용이 가능하다.
net use 명령을 사용하면 된다. 다음과 같은 형태로 입력을 하면되고
net use <드라이브명>: "\
사용예제는
net use G: \192.168.1.1sampledir iloveyou /USER:WORKfooman
WORK 도메인에 속한 fooman이란 사용자로 로그인을 하며 이때 비번이 iloveyou 이고 드라이브명은 G 로 한다.
이렇게해서 배치파일등에서 사용이 가능하다.
VMRCPlus 설치 하다가 Virtual Server Enterprise R2 SP1 업그레이드 .
VMRCPlus 설치 하다가 Virtual Server Enterprise R2 SP1 업그레이드 .
며칠전 Virtual Server 설치할때 버전을 별 신경안쓰고 누가 링크해놓은걸로 클릭해서 다운받아서 설치했었는데.. 알고보니..
구버전이군이런... VMRCPlus 설치하다보니 옛날버전이라고 해서... SP1 을 받아서 설치하니.. upgrade 를 해주네...
쩝..
아래 SP1 다운경로
금연을 하면 바로 나타나는 직접적인 효과들 - 영문/한글
Tuesday, October 2, 2007
Quitting Smoking Has Immediate Benefits - 금연을 하면 바로 나타나는 직접적인 효과들
Within hours, health improves

(HealthDay News) - Most people know that in the long term, quitting smoking offers enormous health benefits.
대부분의 사람들은 금연후 좋아지려면 오랜기간이 걸린다고 알고 있다.
But within weeks -- and even hours -- after quitting smoking, your body has already shown health improvements.
하지만 금연한뒤 몇 주 나 몇 시간만에 몸은 벌써 좋아지는 걸 볼 수 있다.
The Canadian non-profit organization Tobacco Facts lists some of the immediate health benefits when you quit smoking:
캐나다의 비영리단체인 Tobacco Facts 에서는 다음과 같은 직접적인 금연효과를 제시한다.
-- Diana Kohnle
Quitting Smoking Has Immediate Benefits - 금연을 하면 바로 나타나는 직접적인 효과들
Within hours, health improves
(HealthDay News) - Most people know that in the long term, quitting smoking offers enormous health benefits.
대부분의 사람들은 금연후 좋아지려면 오랜기간이 걸린다고 알고 있다.
But within weeks -- and even hours -- after quitting smoking, your body has already shown health improvements.
하지만 금연한뒤 몇 주 나 몇 시간만에 몸은 벌써 좋아지는 걸 볼 수 있다.
The Canadian non-profit organization Tobacco Facts lists some of the immediate health benefits when you quit smoking:
캐나다의 비영리단체인 Tobacco Facts 에서는 다음과 같은 직접적인 금연효과를 제시한다.
- Within eight hours, the level of carbon monoxide in the body drops, while oxygen levels rise to normal.
(8시간안에 몸안에 일산화탄소 수치가 떨어지고 산소농도는 정상 수준으로 증가 된다.
- After two days, taste and smell is enhanced, and the risk of heart attack decreases.
이틀뒤에는 미각과 후각이 좋아지고 심장의 부하도 낮아진다. - Breathing becomes easier within three or four days, because of increased lung capacity.
사나흘 안에 숨쉬기도 좋아진다. 왜냐하면 폐활량이 증가하기 때문이다.
- After two weeks, no nicotine is left in the body, and blood flow is improved.
2주뒤에는 몸안에 니코틴이 모두 제거되고 혈액순환도 좋아진다.
- Within three months, circulation and lung function are improved, and physical activity is significantly easier.
석달안에 순환기와 폐기능이 좋아지므로 인해 신체활동이 눈에 띄게 좋아진다.
- Within nine months, coughing, congestion, fatigue and shortness of breath are significantly reduced.
9개월안에 기침,울혈(congestion),피로도,숨가뿜 현상도 현저하게 줄어든다.
-- Diana Kohnle
Virtual Server R2 x64 를 Vista (x64) Ultimate K 에 설치하기
Virtual Server R2 x64 를 Vista (x64) Ultimate K 에 설치하기
베타버전의 Vista에 설치해서 사용하보다. R2는 처음 설치해본다. 그래서 이전에 설치하던 과정에서 발생했는 삽질(?)을 또하게되어 .. 정리해두려고 한다.
일단 계정컨트롤은 disable해놓은 상태라 따로 관리자모드로 실행하지 않아도 되는 상태이다. 계정컨트롤을 사용중이라면 Administrator권한으로 실행하면 되고.
Virtual Server 설치에 있어 사실 특별히 어려운 것은 없다. 절차대로 준비만 잘해주면 되는데 이게 시행착오끝에 알게되었다는 것일 뿐이다.
Vista 를 설치하였다면 IIS7 이 기본적으로 설치되어있지 않은데 IIS7을 설치해주어야 한다.
이것은 시작->제어판->프로그램->프로그램 및 기능 -> Windows 기능 사용 /사용안함
을 선택하여 여기서 IIS 를 추가하면 된다. <== 이전에 XP 까지에 있는 프로그램추가제거에서 Windows 구성요소 추가/제거 와 같다고 보면된다.
이때 IIS 버전7 이어서 Virtual Server R2 가 사용이 가능하도록 하려면 몇가지 사항을 주의해서 설치해주면 된다.
베타버전의 Vista에 설치해서 사용하보다. R2는 처음 설치해본다. 그래서 이전에 설치하던 과정에서 발생했는 삽질(?)을 또하게되어 .. 정리해두려고 한다.
일단 계정컨트롤은 disable해놓은 상태라 따로 관리자모드로 실행하지 않아도 되는 상태이다. 계정컨트롤을 사용중이라면 Administrator권한으로 실행하면 되고.
Virtual Server 설치에 있어 사실 특별히 어려운 것은 없다. 절차대로 준비만 잘해주면 되는데 이게 시행착오끝에 알게되었다는 것일 뿐이다.
Vista 를 설치하였다면 IIS7 이 기본적으로 설치되어있지 않은데 IIS7을 설치해주어야 한다.
이것은 시작->제어판->프로그램->프로그램 및 기능 -> Windows 기능 사용 /사용안함
을 선택하여 여기서 IIS 를 추가하면 된다. <== 이전에 XP 까지에 있는 프로그램추가제거에서 Windows 구성요소 추가/제거 와 같다고 보면된다.
이때 IIS 버전7 이어서 Virtual Server R2 가 사용이 가능하도록 하려면 몇가지 사항을 주의해서 설치해주면 된다.
위에 보이듯 선택하면 되는데 구성중
1) 웹관리도구 -> II6 관리 호환성 -> IIS 메타베이스 및 IIS6 구성호환성
2) 응용 프로그램 개발 기능 에서 ->CGI
3) 윈도우즈 인증
위 3가지는 반드시 선택되어야 한다. 아닐경우 설치과정에서 문제가 되거나 설치후에 다음과 같이
위 처럼 문제가 된경우에는 Windows 인증이 선택이 안되어있었던 경우 이다.
그리고 CGI 가 선택이 안되면 .http://localhost/VirtualServer/vswebapp.exe?view=1 를 실행하는 과정에서 vswebapp.exe 를 다운받아버리는 현상이 발생하기도 한다.
위처럼 해주고 설치해주면 된다..