질문이 또 생겼습니다..;;

122 views
Skip to first unread message

우훗

unread,
Sep 6, 2010, 11:03:36 AM9/6/10
to OSGi &SpringDM
시키신대로 파일이름을 똑같이 해서 했는데..

update가 안되고..

여전히 같은 이름의 번들이 하나 더 설치되었습니다.

보니까
bundleContext.getBundle(Long.parseLong(bundleId)).update();

함수가 있던데 이걸 사용하면 되는건지..

어떻게 사용하는건지 가르쳐주시면 감사하겠습니다.

xguru

unread,
Sep 6, 2010, 11:08:35 AM9/6/10
to OSGi &SpringDM
그건 해당 번들을 업데이트 하는 함수입니다만, 설치할때 하드에 있는 파일로 했을때만 동작됩니다.
예제에 있는데로 Stream 을 이용하지 말고 파일을 업로드 받아서 파일로 저장한후
그걸 installBundle 하시구요. 그다음에 다시 업데이트 할때 똑같이 새로 업로드 받아서
같은 위치에 업데이트 한다음. 말씀하신 update() 함수를 이용하면 됩니다.

한 질문에 대해서는 기존의 질문에 다시 덧글로 연달아 적어주시면 보기가 더 편할듯 합니다 :)

우훗

unread,
Sep 7, 2010, 1:11:34 AM9/7/10
to OSGi &SpringDM
install 한 파일을 update 하는것 말고..

처음 실행했을때.. ACTIVE 되는 파일을 update 하는 방법을 알고 싶습니다.

예제의 install 처럼 원격에서 upload 와 update 를 동시에 하는 방법은 없는지..

궁금합니다..;;

> > 어떻게 사용하는건지 가르쳐주시면 감사하겠습니다.- 원본 텍스트 숨기기 -
>
> - 원본 텍스트 보기 -

xguru

unread,
Sep 7, 2010, 2:58:09 AM9/7/10
to OSGi &SpringDM
inputStream 으로 받아서 설치한 번들을 업데이트하시는데 임시파일을 이용하지 않으신다면
getBundle().update(inputStream); 형식으로 번들을 가져와서
그 번들에 업데이트를 호출하면서 inputStream 자체를 넘기시면 됩니다.

Bundle 에 update() , update(inputStream) 두가지 메소드가 있습니다.

우훗

unread,
Sep 7, 2010, 9:01:20 AM9/7/10
to OSGi &SpringDM
ㅇ ㅏㅇ ㅏ 아무리 지지고 볶고 해도 잘 감이 안잡히네요;;

getBundle().update()

를 실행해도 action 변수에는 null 값이 들어가 있네요;;

혹시 getBundle().update() 를 사용한 예제 같은건 없으신가요;; ㅠ

> > > - 원본 텍스트 보기 -- 원본 텍스트 숨기기 -

xguru

unread,
Sep 7, 2010, 9:05:32 AM9/7/10
to OSGi &SpringDM
지금 수정하신 코드부분을 올려주시는게 보기가 빠를듯 합니다.

우훗

unread,
Sep 7, 2010, 9:22:47 AM9/7/10
to OSGi &SpringDM
case update:
ServletFileUpload upload = new ServletFileUpload();
try{
FileItemIterator iter = upload.getItemIterator(request);
while(iter.hasNext()){
FileItemStream item = iter.next();
String name = item.getFieldName();
if(name.equals("bundlefile")){

bundleContext.getBundle(Long.parseLong(bundleId)).update(item.openStream()); }
break;*/

책에 보니까

case install:

에서 "번들파일을 스트림으로 읽어서 설치한다."

고 되어있길래... update() 도 그렇게 하면 되겠지.. 하는 생각에..

installBundle 대신에 update()를 넣어서.. 해당 bundleId 를 업데이트 하려고 했습니다..

제 생각이 틀린건지..;; 아마도 틀렸으니까 안되는거겠죠.. 제가 기초지식이 좀 부족한 터라 ㅠㅠ

xguru

unread,
Sep 7, 2010, 9:36:05 AM9/7/10
to OSGi &SpringDM
올려주신 코드로 업데이트 하는게 맞습니다. install 과 똑같이 처리되는게 맞구요.
이렇게 실행하는데 에러가 나나요 ? 어떤 에러가 나는지 궁금하네요.

그리고 이 case 문에 update 가 추가되었다면
UI 에서 install 인지 update 인지를 따로 구분해서 post 하게만 해주면 될듯 한데요.
UI 도 수정하신건가요 ?

우훗

unread,
Sep 7, 2010, 9:47:27 AM9/7/10
to OSGi &SpringDM
최종적인 UI 는 책에 install 하는 부분처럼

테이블을 따로 만들어서 업데이트할 번들을 선택을 하던지... 할 예정입니다.

일단은 update가 되어야하니까..

private static final String TABLE_ROW = "<tr>"

여기에

+ "<form name=\"form_{0}\" method='post'>"
+ "<input type='hidden' name='bundleId' value=\"{0}\" />"
+ "<input class='submit' type='submit' value='Update' />"
+ "<input class='input' type='file' name='bundlefile' style='width:
235px; background:#EFEFEF'> &nbsp;"
+ "</form>"

버튼을 하나 더 만들어서 하고 있습니다.

이렇게 해서 실행을 시키면..

아무 반응이 없이 그냥 흰페이지가 나옵니다.

실행하고 나서

void doPost(HttpServletRequest request, HttpServletResponse response)

안에 있는

action 변수 값을 출력 하도록

System.out.println("==="+action);

을 넣었는데 이 값은 ===null 이 나옵니다.

제대로 된다면 ===update가 나와야 될 것 같은데..;; 뭐가 잘못된건지;;

그렇게 하는게 맞는거 맞죠??

xguru

unread,
Sep 7, 2010, 10:50:50 AM9/7/10
to OSGi &SpringDM
아 중간에 hidden input 하나가 없네요

+ "<form name=\"form_{0}\" method='post'>"
+ "<input type='hidden' name='bundleId' value=\"{0}\" /
>"

==> + "<input type='hidden' name='action' value='update' />"


+ "<input class='submit' type='submit' value='Update' /
>"
+ "<input class='input' type='file' name='bundlefile'
style='width:
235px; background:#EFEFEF'> &nbsp;"
+ "</form>"

action 이 빠져서 null 로 나오는듯합니다.

우훗

unread,
Sep 7, 2010, 11:24:51 AM9/7/10
to OSGi &SpringDM
그렇게 했는데도 여전히 null이 나오네요..

근데 공백 페이지가 나오진 않네요..

getBundle().update() 부분이 잘못된건가..

update() 메소드가 수행되는 과정을 정확히 이해를 못해서 그런건가..

xguru

unread,
Sep 7, 2010, 11:28:24 AM9/7/10
to OSGi &SpringDM
update 메소드랑 2개를 분리해서 생각하셔야 할듯한데요.

지금 문제는 OSGi 코드가 아니고,
웹에서 update 버튼을 눌렀을때 update 라는 action 자체가
doPost 메소드에 제대로 전달이 안되서 문제인듯합니다.

우훗

unread,
Sep 7, 2010, 11:52:50 AM9/7/10
to OSGi &SpringDM
아아아!!

제가 System.out.println("==="+action);

이거 위치를 잘못해 놨었네요..;;

-ㅅ-..

보니까..

case update:
ServletFileUpload upload = new ServletFileUpload();
try{
FileItemIterator iter1 = upload.getItemIterator(request);
while(iter1.hasNext()){
FileItemStream item = iter1.next();
String name = item.getFieldName();
if(name.equals("bundlefile")){

bundleContext.getBundle(Long.parseLong(bundleId)).update(item.openStream());//
updateBundle(item.getName(), item.openStream());
}
}
}catch(Exception e) {

}
break;

여기서

try 가 실행이 안되고..

catch(Exception e){}

부분이 실행이 되네요..;;;ㅠ

xguru

unread,
Sep 7, 2010, 11:55:09 AM9/7/10
to OSGi &SpringDM
Exception 이 뭐가 나나요 ?

우훗

unread,
Sep 7, 2010, 12:02:59 PM9/7/10
to OSGi &SpringDM
음음..

catch(Exception e){
System.out.println("@#$");
}

이렇게 하고 실행 시키니까

콘솔 창에 @#$ 가 출력됐어요..
> > 부분이 실행이 되네요..;;;ㅠ- 원본 텍스트 숨기기 -

xguru

unread,
Sep 7, 2010, 12:10:13 PM9/7/10
to OSGi &SpringDM
catch ( Exception e ) {
System.out.println(e.getMessage());
}

입니다. 혹시 자바언어 처음이신가요 ?

우훗

unread,
Sep 7, 2010, 8:51:20 PM9/7/10
to OSGi &SpringDM
처음은 아닌데;;

많이 다뤄보진 않았어요..;;
> > > - 원본 텍스트 보기 -- 원본 텍스트 숨기기 -

우훗

unread,
Sep 7, 2010, 8:53:51 PM9/7/10
to OSGi &SpringDM
the request doesn't contain a multipart/form-data or multipart/mixed
stream, content type header is application/x-www-form-urlencoded

이런 메시지가 나오네요;;

Chris Kwon / 권정혁

unread,
Sep 7, 2010, 8:59:29 PM9/7/10
to osgi-s...@googlegroups.com
그 에러는 버튼눌렀을때 파일이 첨부가 안되어서 multipart 로 전송이 안된경우구요. 아래 파일선택창과 update버튼이 같은 form 태그안으로 안묶인듯합니다

==
Guru / Chris Kwon / 권정혁
gu...@xguru.net
http://xguru.net
http://twitter.com/xguru

2010. 9. 8. 오전 9:53 우훗 <ydro...@nate.com> 작성:

Reply all
Reply to author
Forward
0 new messages