블로그 이미지
올해목표 // 10월 어학연수 떠나자~ 자수씨

카테고리

전체글 (1457)
Brand New! (28)
주절주절 (213)
MOT (11)
해외쇼핑 (49)
쇼핑노트 (150)
취미생활 (94)
iPhone (4)
Eclipse (121)
Google (83)
Spring (31)
JAVA (176)
JavaScript (59)
WEB (49)
Database (20)
OS (26)
Tools (8)
Tips (26)
IT정보 (1)
Book (21)
Programming (37)
외부행사 (43)
주변인들 (17)
여행노트 (60)
학교생활 (30)
회사생활 (52)
사회생활 (5)
외국어공부 (12)
잡동사니 (30)
Total
Today
Yesterday
 
12-31 00:00
 

달력

« » 2024.12
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
 

최근에 올라온 글

최근에 달린 댓글


Windows 2007 서버에 JBoss 5.1 을 인스톨하고 그냥 띄우면 문제가 없는제 "-b" 옵션을 주고 띄우면 아래와 같은 오류가 발생합니다.

java.net.BindException: Address already in use: JVM_Bind


원인은 8083 을 해당 서버에서 사용하고 있기 때문입니다... 어떤 프로그램인지 찾기 보다는 JBoss 의 설정을 바꾸는 것이 훨씬 편한 작업입니다.

해당 서버에서 포트를 사용하는 경우도 있지만... 외부에 공개된 아이피와 실제 머신의 아이피가 달라서 발생한 문제였습니다.
실제로 포트를 사용하는 경우라면 아래의 방법을 사용하시면 되고, 외부 아이피와 실제 아이피가 다른 경우에는 "-b" 옵션의 인자 값을 실제 아이피로 설정하시면 문제가 해결됩니다.


<JBOSS_HOME>\server\<CONFIGURATION>\conf\bindingservice.beans\META-INF\bindings-jboss-beans.xml

<!-- Remote classloading service -->
<bean class="org.jboss.services.binding.ServiceBindingMetadata">
   <property name="serviceName">jboss:service=WebService</property>
   <!--property name="port">8083</property-->
   <property name="port">9083</property>

   <property name="description">Socket for dynamic class and resource loading</property>
</bean>


위의 파일을 열면 여러가지 포트들이 있습니다. 우리가 변경해야 하는 8083 을 찾아서 만만한 9083 으로 변경을 합니다.

JBoss 를 재시작해서 정상적으로 뜨면 문제 해결!!!


Posted by 자수씨
, |

기본 환경의 시작 스크립트
#!/bin/sh
############################################
## On default, to launch JBoss
############################################
nohup ./run.sh -b 192.168.0.11 > /dev/null &

기본 환경의 종료 스크립트
#!/bin/sh
############################################
## On default, to kill JBoss
############################################
ps -ef | grep "/usr/local/jboss5/bin/run.jar" | grep -v grep | awk '{ printf("ProcessID %s Terminated.\n", $2); }'
ps -ef | grep "/usr/local/jboss5/bin/run.jar" | grep -v grep | awk '{ printf("kill -9 %s\n", $2); }' > tmp.$$
sh tmp.$$
rm -f tmp.$$



클러스터링 환경의 시작 스크립트
#!/bin/sh
############################################
## On node1, to launch JBoss
############################################
nohup ./run.sh -c node1 -g vickiPartition -u 239.255.100.100 -b 192.168.0.11 -Djboss.messaging.ServerPeerID=1 -Djboss.service.binding.set=ports-default -Djboss.server.log.dir=/home/vicki/logs/node1 > /dev/null &


클러스터링 환경의 종료 스크립트
#!/bin/sh
############################################
## On node1, to kill JBoss
############################################
ps -ef | grep "ServerPeerID=1" | grep -v grep | awk '{ printf("ProcessID %s Terminated.\n", $2); }'
ps -ef | grep "ServerPeerID=1" | grep -v grep | awk '{ printf("kill -9 %s\n", $2); }' > tmp.$$
sh tmp.$$
rm -f tmp.$$

클러스터링 환경에서는 프로세스가 두 개가 뜨기 때문에 종료 스크립트가 있는 것이 편리합니다. 그렇지 않고 JBoss 에서 제공되는 종료 스크립트를 이용할 경우 바로 프로세스가 떨어지지 않아 사용자의 요청이 종료 중이 프로세스로 갈 수도 있습니다. 바로 프로세스를 죽이는 것이 운영 중에는 좋습니다.

클러스터링 환경에서 시작 스크립트 테스트
[root@localhost bin]# ./run.node1.sh
[root@localhost bin]# ps -ef | grep jboss
root      3123     1  0 11:32 pts/0    00:00:00 /bin/sh ./run.sh -c node1 -g vickiPartition -u 239.255.100.100 -b 192.168.0.11 -Djboss.messaging.ServerPeerID=1 -Djboss.service.binding.set=ports-default -Djboss.server.log.dir=/home/vicki/logs/node1
root      3146  3123 60 11:32 pts/0    00:00:01 java -Dprogram.name=run.sh -server -Xms128m -Xmx512m -XX:MaxPermSize=256m -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djava.net.preferIPv4Stack=true -Djava.endorsed.dirs=/usr/local/jboss5/lib/endorsed -classpath /usr/local/jboss5/bin/run.jar org.jboss.Main -c node1 -g vickiPartition -u 239.255.100.100 -b 192.168.0.11 -Djboss.messaging.ServerPeerID=1 -Djboss.service.binding.set=ports-default -Djboss.server.log.dir=/home/vicki/logs/node1
root      3158  3086  0 11:32 pts/0    00:00:00 grep jboss
실제로 프로세스를 실행 시키면 위와 같이 jboss 와 관련된 프로세스 2개를 확인할 수 있습니다. 한 서버에 두 개의 인스턴스가 있을 경우 구분할 수 있는 것은 ServerPeerID 이기 때문에 실행 스크립트에서 "ServerPeerID=1" 를 사용하였습니다.


클러스터링 환경에서 종료 스크립트 테스트
[root@localhost bin]# ./stop.node3.sh
ProcessID 3123 Terminated.
ProcessID 3146 Terminated.




Posted by 자수씨
, |

JBoss 에서 고가용성(High Availability) 환경을 구성하기 위해서는 세션 클러스터링이 필요합니다.

테스트에 사용된 환경은 다음과 같습니다.
System: VMWare
OS: CentOS 5.5 x86-64
HTTP Server: Apache HTTP Server 2.2.3
WAS: JBoss 5.1.0 GA



[그림 1] 서버 구성

위의 [그림 1] 에서 보는 것 처럼 하나의 시스템에 하나의 Apache HTTP Server 와 두 개의 JBoss Web Application Server 로 구성할 것 입니다.








 

어떻게 보면 테스트 환경은 쉽게 구성될 수 있지만, 실제로 운영환경에서는 각 설정값을 변경해주어야 재대로 성능을 발휘할 수 있습니다. 그리고 방화벽이 있는 경우 세션 복제를 위한 멀티캐스트 송수신이 정상적으로 안될 수도 있습니다.

간단한 웹 어플리케이션이 포함된 JBoss 인스턴스 하나 띄우는데 메모리가 600 메가 정도 사용하는 것 같습니다. 한 시스템에 2개의 인스턴스를 띄우려면 적어도 인스턴스당 1.5 기가의 메모리가 필요하지 않을까 생각이 됩니다.

이외에도 많은 변수가 있기에 실제 운영 환경에 배포하기 위해서는 많은 공수가 들 것으로 생각됩니다.


참고자료
http://www.jboss.org/file-access/default/members/jbossclustering/freezone/docs/cluster_guide/5.1/pdf/Clustering_Guide.pdf
http://community.jboss.org/wiki/ConfigurationChangesforClusteredWebApplicationsinAS5
http://www.datadisk.co.uk/html_docs/java_app/jboss5/jboss5_clustering.htm

Posted by 자수씨
, |

JBoss 의 배포 경로를 "D:\Server\webapps" 도 추가하려면 JBoss 설정을 변경합니다.


<JBOSS_HOME>/server/<CONFIGURATION>/conf/bootstrap/profile.xml 를 열어 하일라이팅 된 부분과 같이 경로를 추가합니다.




	...
	
	
	
		${jboss.server.home.url}conf/bindingservice.beans
		${jboss.server.home.url}conf/jboss-service.xml
		${jboss.server.home.url}deployers
		
			
				${jboss.server.home.url}deploy
				file://D:/Server/webapps
			
		
		${jboss.server.data.dir}/attachments
		
	

	...




-_-;; syntax highlight 가 좀 이상해서 element 가 대문자로 표시가 되네요;;; 쿨럭;;;


정리 차원에서...

참고자료: 우리 회사 데모서버, http://cafe.naver.com/jbossug.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=2081

Posted by 자수씨
, |

어쩌다보니 웹 서비스 업무가 할당 되어서 인증까지 확인해야 하는 신세가 되었습니다.

다행히 회사에서 JBoss 책을 발견하고 바로 작업을 진행하였습니다.


1. web.xml 에서 인증을 추가할 웹 서비스 관련 설정을 확인합니다.
[Listing. 1] [ContextRoot]/WEB-INF/web.xml

현재 웹 서비스는 /WorkflowWebServices 로 배포된 상태입니다.


2. JBoss 의 login-config.xml 설정에서 JBossWS 관련 application-policy 를 확인합니다.
[Listring. 2] [JBOSS_HOME]/server/[CONFIGURATION]/conf/login-config.xml


기존에 설정되어 있던 login-config.xml 을 이용하려 합니다.
기본적으로 JBoss 설치 시에 있는 JBossWS application-policy 를 이용하려 합니다.
인증되지 않은 사용자에 대한 설정은 잘 모르니 주석처리하였습니다.

이제 위의 application-policy 에 정의된 users 와 roles properties 를 수정합니다.
[Listring. 3] [JBOSS_HOME]/server/[CONFIGURATION]/conf/props/jboss-users.properties
#아이디=패스워드
vicki=vickivicki

[Listring. 4] [JBOSS_HOME]/server/[CONFIGURATION]/conf/props/jboss-roles.properties
#아이디=Role
vicki=webservice

jboss-users.properties 에 사용자 아이디와 비밀번호를 설정하고, jboss-roles.properties 에 사용자가 어떤 롤을 갖는지 설정합니다.



3. jboss-web.xml 을 수정합니다.
[Listing. 5] [ContextRoot]/WEB-INF/jboss-web.xml


jboss-web 설정에 <security-domain> 엘리먼트에 위에서 확인하였던 application-policy 이름을 설정합니다.
<security-domain>java:/jaas/[application-policy name]<security-domain>



4. web.xml 을 수정합니다.
[Listing. 6] [ContextRoot]/WEB-INF/web.xml


<security-constraint>: 어떤 접속에 어떤 권한으로 인증 절차를 처리할지 설정
<login-config> : 어떤 방식으로 인증을 처리할지를 설정
<security-role> : 어떤 권한을...  (-ㅁ-;;; 잘 모르겠습니다;;;;)



5. 테스트
JBoss 를 재시작하면 기존에 그냥 접속되었던 웹 서비스 WSDL 이 인증을 하라고 합니다.



아이디와 패스워드를 입력하고 확인을 누르면~ 끝입니다.





Posted by 자수씨
, |

새로운 외근용 노트북에 JBoss 환경을 설정하고 웹 서비스를 띄우는데...

아래와 같은 오류가 발생하였습니다.

ERROR [SOAPFaultExceptionHelper] SOAP request exception
java.lang.UnsupportedOperationException: setProperty must be overridden by all subclasses of SOAPMessage


빠른 구글링을 통해 알아본 결과 라이브러리 설정이 필요한 것이였습니다.

해결 방법은 다음과 같습니다. JBoss 실행 옵션에 다음을 추가합니다.
-Djava.endorsed.dirs=%JBOSS_HOME%\lib\endorsed


정상적으로 잘 뜨네요~ 후훗~


참고사이트 : http://community.jboss.org/thread/101651?tstart=0

Posted by 자수씨
, |

회사에서 개발하는 솔루션이 spring framework 기반이라 웹서비스도 spring webservices 로 구축을 하였는데, JBoss 에 올리려고 하니 여러 오류가 생겨 재 작년부터 고민하고 여러가지 시도를 하였으나 실패를 하였습니다.

우연히 다른 것을 검색하다가 발견한 것에서 아이디어가 떠올라서 여러가지 실험을 해본 결과 JBoss 용 웹 서비스를 publish 하는 데 성공하였습니다.



기존의 Spring WebServices Class

별 다른 작업 없이 DI 를 이용하여 service 객체를 이용하여 웹 서비스를 제공하였습니다.



JBossWS 에서 Spring Bean 사용하는 WebService Class

JBossWS 에서@Resource 라는 어노테이션을 이용하여 ThreadLocal 한 WebServiceContext 객체를 설정할 수 있습니다.
메소드에 어노테이션 설정하여 WebServiceContext 객체가 웹 서비스 객체에 설정이 될 때 Spring Bean 을 WebApplicationContext 를 이용하여 가지고 오는 방법을 사용하였습니다.


이렇게 구성된 웹 서비스를 JBoss 에 publish 하는 방법은 단순합니다.

web.xml 에 servlet 과 servlet-mapping 에 웹 서비스 클래스를 등록하는 것이 전부입니다.


Spring WebService 로 publish 할 경우 별도의 포트로 binding 해야 하지만 JBossWS 는 JBoss 포트로 서비스가 가능합니다.

포트가 하나로 통합되면 얻는 이점이 많을 듯 합니다





Posted by 자수씨
, |

이번에 새로 구축하는 사이트에 JBoss 와 우리 webapp 을 배포한 후 JBoss 를 시작하니 아래와 같은 오류가 뜹니다.

ERROR [AbstractKernelController] Error installing to Parse: name=vfszip:/...

위 내용만으로는 도저히 답을 찾을 수 없어 에러 로그를 더 살펴보았습니다.

org.xml.sax.SAXException: Content is not allowed in prolog.

구글링의 결과 UTF-8 문서는 BOM (Byte order Mark) 데이터가 추가된 파일을 못 읽어서 발생하는 문제였습니다.

일단 EditPlus 에서 해당 파일 내용을 복사하여 붙여 넣은 뒤 UTF-8 로 저장한 후, 배포하여 JBoss 를 재시작 하였는데, 주석 비스므레한 부분에서 에러가 나길래 주석을 다 제거한 후 다시 배포하였습니다.

쩝;;; 잘 뜨네요...




Posted by 자수씨
, |

JBoss 를 로컬환경에서 띄울려고 하다 보니 아래와 같은 오류가 발생하였습니다.

22:52:20,485 INFO  [JMXKernel] Legacy JMX core initialized
22:52:21,235 ERROR [AbstractKernelController] Error installing to Instantiated: name=AttachmentStore state=Described
java.lang.IllegalArgumentException: Wrong arguments. new for target java.lang.reflect.Constructor expected=[java.net.URI] actual=[java.io.File]
 at org.jboss.reflect.plugins.introspection.ReflectionUtils.handleErrors(ReflectionUtils.java:395)
 at org.jboss.reflect.plugins.introspection.ReflectionUtils.newInstance(ReflectionUtils.java:153)
 at org.jboss.reflect.plugins.introspection.ReflectConstructorInfoImpl.newInstance(ReflectConstructorInfoImpl.java:106)

구글링을 하다보니 JBoss 의 jira 에 해결책이 있었습니다.
https://jira.jboss.com/jira/browse/JBAS-6973

설정 중에 AttachmentStore 를 생성하는 부분의 constructor 를 수정합니다.

[JBOSS_HOME]\server\default\conf\bootstrap\profile.xml
주석처리한 기존 부분 대신에 새로운 constructor 를 넣습니다. parameter 의 클래스를 정의해 주는 부분이 추가되었습니다.

일단 JBoss 는 뜨는 듯 합니다.


Posted by 자수씨
, |

하나의 문제를 해결하니 다른 하나의 문제에 봉착...

처음 페이지에 접속하려 하니 아래와 같은 오류가 발생하였습니다.

13:06:51,379 ERROR [[jsp]] Servlet.service() for servlet jsp threw exception
javax.servlet.ServletException: OncePerRequestFilter just supports HTTP requests
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:62)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)


조금 전의 노하우를 살려서 servlet 관련 라이브러리가 있는지를 확인하였습니다.

대충 의심스러운 jar 파일이... servlet-api.jar

위의 jar 을 제거하고 재기동하니 정상 동작합니다.


이런 건 원인 분석하기도 어렵네요;;; 일단 문제가 먼지도 알기 힘들고...

Posted by 자수씨
, |

글 보관함

최근에 받은 트랙백