98..Etc/70.JEUS2010. 12. 21. 09:48
반응형

Tidy: character ";" not allowed in attribute specification list

Possible Cause:

Unescaped JavaScript generates multiple validation errors, this is one of them.

Example:


잘못된 예
<script language="javascript">
for(x=0;x<item.length;x++){
    //
}
</script>

올바른 예
<script language="javascript">
//<![CDATA[
for(x=0;x<item.length;x++){
    //
}
//]]>
</script>

Solution:

Wrap the JavaScript code in CDATA; Hide the CDATA from JavaScript with a // comment.

References:

Posted by 1010
98..Etc/70.JEUS2009. 10. 9. 18:24
반응형
 

[jeus@localhost config]$ cat ws_engine.m
*DOMAIN
jeuservice

*NODE
localhost   * 컨테이너 1
  WEBTOBDIR = "/usr/local/jeus5/webserver",
  SHMKEY    = 54000,
  DOCROOT   = "/home/free/webapps/WebContent",
  PORT      = "8080",
  LOGGING   = "log1",
  ERRORLOG  = "log2",
  JSVPORT   = 9900,
  IndexName = "index.do,index.html,index.jsp",
  HTH       = 1

*VHOST     * 컨테이너2 가상 호스트 추가
vhost1    
  DOCROOT   = "/home/free2/webapps/WebContent",  * 새로운 컨텍스트 경로
  PORT      = "8088",           * 사용할 포트 번호 지정(포트번호만 변경하여 다른 컨텍스트 사용)
  NODENAME  = "localhost",    * 상위에  정의한 NODE 명을 지정
  HOSTNAME  = "192.168.1.11",   * DNS 명(예: aaa.co.kr) 또는 localhost IP(IP로 외부 접속)
                                                * HOSTNAME에서 DNS 명을 설정시에 로컬의 hosts 파일에 dns 추가
  IndexName = "index.do,index.html,index.jsp",  * 컨테이너 기동시에 읽어들일 파일
  LOGGING   = "log3",    * 로그 정의
  ERRORLOG  = "log4"  


*SVRGROUP
htmlg       NODENAME = "localhost", SVRTYPE = HTML
cgig        NODENAME = "localhost", SVRTYPE = CGI
ssig        NODENAME = "localhost", SVRTYPE = SSI
jsvg        NODENAME = "localhost", SVRTYPE = JSV
jsvg1       NODENAME = "localhost", SVRTYPE = JSV, VHOSTNAME = vhost1  * 가상 호스트 추가

*SERVER
html        SVGNAME  = htmlg, MinProc = 1,  MaxProc = 2
cgi         SVGNAME  = cgig,  MinProc = 1,  MaxProc = 2
ssi         SVGNAME  = ssig,  MinProc = 1,  MaxProc = 2
MyGroup     SVGNAME  = jsvg,  MinProc = 5, MaxProc = 10
MyGroup2    SVGNAME  = jsvg1,  MinProc = 5, MaxProc = 10    * 추가된 컨테이너에서 사용하는 그룹

*URI
uri1        Uri      = "/cgi-bin/",  Svrtype = CGI
uri2        Uri      = "/free1/", Svrtype = JSV     * 컨테이너1 의 이름(JEUSMain.xml)
uri3        Uri      = "/free2/", Svrtype = JSV, VhostName=vhost1, SvrName = MyGroup2  * 컨테이너2의 이름(JEUSMain.xml)
uri4        Uri      = "/", Svrtype = JSV

*ALIAS
alias1      URI      = "/cgi-bin/", RealPath = "/usr/local/jeus5/webserver/cgi-bin/"

*LOGGING
log1        Format   = "DEFAULT",   FileName = "/home/free/webapps/logs/webserver/access.log", Option = "sync"
log2        Format   = "ERROR",     FileName = "/home/free/webapps/logs/webserver/error.log",  Option = "sync"
log3        Format   = "DEFAULT",   FileName = "/home/free2/webapps/logs/webserver/access.log", Option = "sync" * 로그파일 저장 경로
log4        Format   = "ERROR",     FileName = "/home/free2/webapps/logs/webserver/error.log",  Option = "sync"

*EXT
htm         MimeType = "text/html",  SvrType = HTML
do              Mimetype ="application/jsp",  Svrtype=JSV,  SvrName=MyGroup  * 사용 확장자 정의
jsf             Mimetype ="application/jsp",  Svrtype=JSV,  SvrName=MyGroup
jsp             Mimetype ="application/jsp",  Svrtype=JSV,  SvrName=MyGroup
html            MimeType = "text/html", SvrType = HTML
hwp             MimeType = "application/x-hwp", SvrType = HTML
pdf             MimeType = "application/x-pdf", SVRTYPE = HTML
css             MimeType = "text/css", SvrType = HTML
js              MimeType = "application/x-javascript", SvrType = HTML
gul             MimeType = "application/gul", SvrType = HTML
gif             MimeType = "image/gif", SvrType=HTML
jpeg            MimeType = "image/gif", SvrType=HTML
jpg             MimeType = "image/gif", SvrType=HTML
zip             MimeType = "application/zip", SvrType=HTML
jar             MimeType = "application/x-java-archive", SvrType=HTML
exe             MimeType = "application/octet-stream", SvrType=HTML
wml             MimeType = "application/vnd.wap.wml", SvrType=HTML
wmls            MimeType = "application/vnd.wap.wmlscript", SvrType=HTML
wmlc            MimeType = "application/vnd.wap.wmlc", SvrType=HTML
wmlsc           MimeType = "application/vnd.wap.wmlscript", SvrType=HTML
wbmp            MimeType = "application/vnd.wap.wbmp", SvrType=HTML
swf             MimeType = "application/x-shockwave-flash", SvrType=HTML
csv             MimeType = "application/octet-stream", SvrType=HTML
xml             MimeType = "text/html", SvrType = HTML
asd             MimeType = "application/astound",SvrType=HTML
asn             MimeType = "application/astound",SvrType=HTML
doc             MimeType = "application/msword",SvrType=HTML
wiz             MimeType = "application/msword",SvrType=HTML
rtf             MimeType = "application/msword",SvrType=HTML
xls             MimeType = "application/vnd.ms-excel",SvrType=HTML
xlw             MimeType = "application/vnd.ms-excel",SvrType=HTML
xla             MimeType = "application/vnd.ms-excel",SvrType=HTML
xlc             MimeType = "application/vnd.ms-excel",SvrType=HTML
xlm             MimeType = "application/vnd.ms-excel",SvrType=HTML
xlt             MimeType = "application/vnd.ms-excel",SvrType=HTML
ppt             MimeType = "application/vnd.ms-powerpoint",SvrType=HTML
pps             MimeType = "application/vnd.ms-powerpoint",SvrType=HTML
pot             MimeType = "application/vnd.ms-powerpoint",SvrType=HTML
m13             MimeType = "application/x-msmediaview",SvrType=HTML
m14             MimeType = "application/x-msmediaview",SvrType=HTML
wmf             MimeType = "application/x-msmetafile",SvrType=HTML
midi            MimeType = "audio/midi",SvrType=HTML
mid             MimeType = "audio/midi",SvrType=HTML
aif             MimeType = "audio/x-aiff",SvrType=HTML
aiff            MimeType = "audio/x-aiff",SvrType=HTML
aifc            MimeType = "audio/x-aiff",SvrType=HTML
wav             MimeType = "audio/x-wav",SvrType=HTML
cab             MimeType = "x-application/octet-stream", SvrType = HTML
fla             MimeType = "application/x-fla", SvrType=HTML

ws_engine.m 파일은 설정후 컴파일 과정을 함
[jeus@localhost localhost]$
wscfl -i ws_engine.m

##############################################################################

content=Vim/7.2 name=Generator>[jeus@localhost localhost]$ cat JEUSMain.xml
<?xml version="1.0" ENCODING="utf-8"?>
<jeus-system xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <node>
                <name>localhost</name>
        <engine-container>
<!-- 컨테이너 1 -->
            <name>container1</name>
            <command-option>-Xms256m -Xmx512m</command-option>
            <engine-command>
                <type>ws</type>
                <name>engine1</name>
            </engine-command>
            <engine-command>
                <type>servlet</type>
                <name>engine1</name>
            </engine-command>
            <sequential-start>true</sequential-start>
        </engine-container>
<!-- 컨테이너 2 -->
                <engine-container>
            <name>container2</name>
            <command-option>-Xms256m -Xmx512m</command-option>
            <engine-command>
                <type>servlet</type>
                <name>engine2</name>
            </engine-command>
            <sequential-start>true</sequential-start>
        </engine-container>

        <class-ftp>true</class-ftp>
        <sequential-start>true</sequential-start>
        <enable-webadmin>true</enable-webadmin>
    </node>
    <application>
        <!-- 노드 localhost 에서 사용할 컨테이너 이름(ws_engine.m)-->
        <name>free1</name> 
        <path>/home/free/webapps/WebContent</path>
        <deployment-type>COMPONENT</deployment-type>
        <deployment-target>
            <target>
                <engine-container-name>localhost_container1</engine-container-name>
                <web-context-group>
                    <name>MyGroup</name>
                </web-context-group>
            </target>
        </deployment-target>
        <web-component/>
    </application>
    <application>
        <!-- 가상호스트 vhost1 에서 사용할 컨테이너 이름(ws_engine.m)-->
        <name>free2</name>
        <path>/home/free2/webapps/WebContent</path> <!-- 추가할 컨텍스트 경로 -->
        <deployment-type>COMPONENT</deployment-type>
        <deployment-target>
            <target>
                <engine-container-name>localhost_container2</engine-container-name>
                <web-context-group>
                    <name>MyGroup2</name>
                </web-context-group>
            </target>
        </deployment-target>
        <web-component/>
    </application>
</jeus-system>


##############################################################################

content=Vim/7.2 name=Generator>기본으로 제우스에서 하나의 webtob 와 하나의 호스트명_ws_engine1 를 사용.
컨테이너 1 다음으로 추가되는 컨테이너는,
컨테이너 1에 설정된 호스트명_ws_engine1/WSMain.xml 에 설정부분을 추가하여 사용.

[jeus@localhost localhost_ws_engine1]$ cat WSMain.xml
<?xml version="1.0" ENCODING="UTF-8"?>
<ws-engine xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <domain>
        <name>jeuservice</name>
<!-- 컨테이너 1에서 사용. -->
        <node>
            <name>localhost</name> 
            <webtob-dir>/usr/local/jeus5/webserver</webtob-dir>
            <shmkey>54000</shmkey>
            <docroot>/home/free/webapps/WebContent</docroot>
            <jsv-port>9900</jsv-port>
            <hth>1</hth>
            <port>8080</port>
            <logging>log1</logging>
            <error-log>log2</error-log>
        </node>

<!-- 추가된 컨테이너 설정은 아래 해당하는 엘리먼트 추가  -->
        <svrgroup>
            <name>htmlg</name>
            <svr-type>HTML</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <svrgroup>
            <name>cgig</name>
            <svr-type>CGI</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <svrgroup>
            <name>ssig</name>
            <svr-type>SSI</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <svrgroup>
            <name>jsvg</name>
            <svr-type>JSV</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <svrgroup>
            <name>jsvg2</name>
            <svr-type>JSV</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <server>
            <name>html</name>
            <svg-name>htmlg</svg-name>
            <min-proc>1</min-proc>
            <max-proc>2</max-proc> 
            <asq-count>1</asq-count>
        </server>
        <server>
            <name>cgi</name>
            <svg-name>cgig</svg-name>
            <min-proc>1</min-proc>
            <max-proc>2</max-proc>
        </server>
        <server>
            <name>ssi</name>
            <svg-name>ssig</svg-name>
            <min-proc>1</min-proc>
            <max-proc>2</max-proc>
        </server>
        <server>
            <name>MyGroup</name>
            <svg-name>jsvg</svg-name>
            <min-proc>5</min-proc>
            <max-proc>10</max-proc>
        </server>
        <server> <!-- 컨테이너 그룹 추가 (ws_engine.m)-->
            <name>MyGroup2</name>
            <svg-name>jsvg1</svg-name>
            <min-proc>5</min-proc>
            <max-proc>10</max-proc>
        </server>
        <uri>
            <name>uri1</name>
            <uri-def>/cgi-bin/</uri-def>
            <svr-type>CGI</svr-type>
        </uri>
        <uri>
            <name>uri2</name>
            <uri-def>/webapps</uri-def>
            <svr-type>JSV</svr-type>
        </uri>
        <uri>
            <name>uri3</name>
            <uri-def>/free2</uri-def>
            <svr-type>JSV</svr-type>
        </uri>
        <uri>
            <name>uri4</name>
            <uri-def>/</uri-def>
            <svr-type>JSV</svr-type>
        </uri>
        <logging>
            <name>log1</name>
            <format>DEFAULT</format>
            <file-name>/home/free/webapps/logs/webserver/access.log</file-name>
            <option>sync</option>
        </logging>
        <logging>
            <name>log2</name>
            <format>ERROR</format>
            <file-name>/home/free/webapps/logs/webserver/error.log</file-name>
            <option>sync</option>
        </logging>
        <logging>
            <name>log3</name>
            <format>DEFAULT</format> <!-- 추가할 컨텍스트의 로그 파일 저장 경로 (ws_engine.m) -->
            <file-name>/home/free2/webapps/logs/webserver/access.log</file-name>
            <option>sync</option>
        </logging>
        <logging>
            <name>log4</name>
            <format>ERROR</format>
            <file-name>/home/free2/webapps/logs/webserver/error.log</file-name>
            <option>sync</option>
        </logging>
        <ext>
            <name>htm</name>
            <mimetype>text/html</mimetype>
            <svr-type>HTML</svr-type>
        </ext>
        <ext>
            <name>jsp</name>
            <mimetype>application/jsp</mimetype>
            <svr-type>JSV</svr-type>
            <svr-name>MyGroup</svr-name>
        </ext>
    </domain>
</ws-engine>


##############################################################################

content=Vim/7.2 name=Generator>
컨테이너 1에서 사용하는
호스트명_servlet_engine1

[jeus@localhost localhost_servlet_engine1]$ cat WEBMain.xml
<?xml version="1.0" ENCODING="UTF-8"?>
<web-container xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <context-group>
        <group-name>MyGroup</group-name>
        <webserver-connection>
            <webtob-listener>
                <listener-id>webtob1</listener-id>
                <port>9900</port>
                <output-buffer-size>8192</output-buffer-size>
                <thread-pool>
                    <min>5</min>
                    <max>10</max>
                    <step>1</step>
                    <max-idle-time>30000</max-idle-time>
         
      </thread-pool>
                <webtob-address>127.0.0.1</webtob-address>
                <registration-id>MyGroup</registration-id>
            </webtob-listener>
        </webserver-connection>
        <print-error-to-browser>true</print-error-to-browser>
        <ENCODING>
            <request-ENCODING>
                <default>MS949</default>
                <forced>MS949</forced>
            </request-ENCODING>
            <response-ENCODING>
                <default>MS949</default>
                <forced>MS949</forced>
            </response-ENCODING>
            <postdata-ENCODING>
                <default>MS949</default>
                <forced>MS949</forced>
            </postdata-ENCODING>
        </ENCODING>
        <jsp-engine>
            <jsp-work-dir>/home/free/webapps/jspwork</jsp-work-dir>
        </jsp-engine>
        <logging>
            <access-log>
                <handler>
                    <file-handler>
                        <name>handler1</name>
                        <valid-day>1</valid-day>
                    </file-handler>
                </handler>
            </access-log>
        </logging>
    </context-group>
    <session-cluster>
        <session-routing>false</session-routing>
    </session-cluster>
</web-container>


##############################################################################

content=Vim/7.2 name=Generator>컨테이너 2에서 사용하는 호스트명_servlet_engine2
필요한 설정부분은 그룹명과 jsp 컴파일된 클래스가 저장될 경로 변경

[jeus@localhost localhost_servlet_engine2]$ cat WEBMain.xml
<?xml version="1.0" ENCODING="UTF-8"?>
<web-container xmlns=http://www.tmaxsoft.com/xml/ns/jeus>
    <context-group>
        <group-name>MyGroup2</group-name>
        <webserver-connection>
            <webtob-listener>
                <listener-id>webtob1</listener-id>
                <port>9900</port> <!-- 하나의 webtob 를 공유하기때문에 통신 포트 동일-->
                <output-buffer-size>8192</output-buffer-size>
                <thread-pool>
                    <min>5</min>
                    <max>10</max>
                    <step>1</step>
                    <max-idle-time>30000</max-idle-time>
                </thread-pool>
                <registration-id>MyGroup2</registration-id>
                <webtob-home>/usr/local/jeus5/webserver</webtob-home>
            </webtob-listener>
        </webserver-connection>
        <print-error-to-browser>true</print-error-to-browser>
        <ENCODING>
            <request-ENCODING>
                <default>MS949</default>
                <forced>MS949</forced>
            </request-ENCODING>
            <response-ENCODING>
                <default>MS949</default>
                <forced>MS949</forced>
            </response-ENCODING>
            <postdata-ENCODING>
                <default>MS949</default>
                <forced>MS949</forced>
            </postdata-ENCODING>
        </ENCODING>
        <jsp-engine>
            <jsp-work-dir>/home/free2/webapps/jspwork</jsp-work-dir>
        </jsp-engine>
        <logging>
            <access-log>
                <handler>
                    <file-handler>
                        <name>handler1</name>
                        <valid-day>1</valid-day>
                    </file-handler>
                </handler>
            </access-log>
        </logging>
    </context-group>
    <session-cluster>
        <session-routing>false</session-routing>
    </session-cluster>
</web-container>


출처 : http://javaiyagi.tistory.com/187


 
 
 
Posted by 1010
98..Etc/70.JEUS2009. 10. 9. 18:19
반응형

실습 5 : 가상 호스트와 JEUS 연동

WebtoB 환경 설정

*NODE
challenge22 WEBTOBDIR="C:/TmaxSoft/WebtoB4.1",
.................
  JSVPORT = 9900


*SVRGROUP
..........
v_jsvg  NODENAME = "challenge22", SVRTYPE = JSV, VHOSTNAME="vhost1"


*SERVER
..............
vjMyGroup SVGNAME = v_jsvg, MinProc = 10, MaxProc = 20


*VHOST
vhost1    HOSTNAME = "test.tmax.co.kr",
              DOCROOT = "C:/TmaxSoft/webhome",

  PORT = "80",
  NODENAME = "challenge22",
  IndexName = "welcome.html"


DNS 등록

윈도우 가상

c:\Windows\system32\drivers\etc\hosts

 127.0.0.1       localhost
 127.0.0.1       test.tmax.co.kr

실제 서버

dns에 등록



제우스 환경 설정

환경설정 파일 위치 : C:\TmaxSoft\JEUS5.0\config\노드명\노드명_servlet_engine1\WEBMain.xml


    <webtob-listener>
                <listener-id>webtob2</listener-id>  <-제우스가 인식하는 리스너 아이디
                <port>9900</port>                          <-다른 시스템에 제우스와 WebtoB가 있을 경우 연동하기 위한 포트
                <output-buffer-size>8192</output-buffer-size
                <thread-pool>                                <-WebtoB 프로세스 정보,, WebtoB 설정보다 작거나 같게 설정
                   <min>10</min>
                   <max>20</max>
                   <step>1</step>
                   <max-idle-time>30000</max-idle-time>
                </thread-pool>
                <webtob-address>localhost</webtob-address>
                <registration-id>jv_jMyGroup</registration-id>            <-WebtoB에서 설정한 서버 지정
   </webtob-listener>


페이지 히스토리
출처 : http://zzru.springnote.com/pages/1458126




---------------------------------


WebtoB+Jeus 가상호스트설정

www.bbb.co.kr 와 www.bbb.co.kr/aaa 는 도메인 주소와 포트번호가
동일하므로 VHOST를 이용한 구분은 불가능합니다.
URI 설정을 이용하여 Context Path "/" 와 "/aaa" 를 구분하여
처리하면 됩니다.

설정 예는 다음과 같습니다.

===========================================================
상략

*NODE
nodename    WEBTOBDIR = "/home/jeus42/webserver",
           SHMKEY    = 54000,
           DOCROOT   = "/home/Jeus42/webserver/docs",
           PORT      = "8080",
           JSVPORT   = 9900,
           HTH       = 1

*SVRGROUP
htmlg       NODENAME = "nodename", SvrType = HTML
jsvg        NODENAME = "nodename", SVRTYPE = JSV

*SERVER
html        SVGNAME  = htmlg, MinProc = 1,  MaxProc = 2
MyGroup     SVGNAME  = jsvg,  MinProc = 25, MaxProc = 30
HpGroup     SVGNAME  = jsvg,  MinProc = 25, MaxProc = 30

*URI
uri1        Uri      = "/aaa/", Svrtype = JSV, SvrName = "MyGroup"
uri2        Uri      = "/", Svrtype = JSV, SvrName = "HpGroup"

하략
=====================================================================

그리고 A장비_servlet_engine1 의 WEBMain.xml(jeus4.x)
설정중 webtob-listener 설정을 하나 더 추가하여 B장비 웹투비의
MyGroup과 연결해야 합니다. webtob-listener는 반복구조를 가집니다.
즉, 하나의 엔진이 여러 웹투비와의 연결을 제공합니다. 
Posted by 1010
98..Etc/70.JEUS2009. 8. 20. 17:25
반응형
출처 : http://searcher.tistory.com/entry/Jeus-webtob%EC%9D%98-%EB%AA%A8%EB%93%A0%EA%B2%83%ED%8E%8C

이 문서는 ww.tmax.co.kr 에서 개발/배포하는

웹서버(WebToB)와 웹어플리케이션서버(JEUS)의 설치 및 시동, 연동, 경로설정에 관한 자료입니다.

(버젼 : JEUS4.2, WEBTOB3.1.6(build3), j2sdk1.4.1_07)

 

 

### 설치/시동/테스팅/종료 ###

----------------------------------------------------------------------------------------

1. 필요 프로그램

- j2sdk1.4.1_07 (http://java.sun.com)       # j2sdk1.4.1_07 이하 버젼 권장 (1.4.2버젼대에서는 문제발생할 수 있음)

- jeus42.exe (http://www.tmax.co.kr)

- webtob_3.1.6(build3).exe (http://www.tmax.co.kr)

----------------------------------------------------------------------------------------

2. j2sdk1.4.1_07 설치

- path 맨 앞에 C:/jdk1.4.1_07/bin 설정

- classpath에 . 설정

----------------------------------------------------------------------------------------

3. JEUS42 설치

- JEUS42.exe를 실행 

  (windows2003 서버의 경우 installing... uninstall부분에서 정지시는 windows2000호환성모드로 다시 실행)

- http://www.tmax.co.kr의 download링크를 클릭 (회원가입필요)

  JEUS license를 신청 -> 이메일을 통해 license부여받음 (90일 사용가능)

  부여받은 license파일을 제우스홈\license에 복사 (덮어쓰기)

- 설치 후 다음 세개의 파일을 자신의 환경에 맞게 편집

  1) 제우스홈\config\노드명\JEUSMain.xml 

  2) 제우스홈\webhome\servlet_home\webapps\examples\web-inf\web.xml
  3) 제우스홈\config\노드명\노드명_servlet_engine1\WEBMain.xml

-------------------------------------------------------------------------------------

4. webtob3.1.6 설치

- webtob_3.1.6(build3).exe 실행하여 설치 

  (windows2003에서 installing... uninstall부분에서 정지시는 windows2000호환성모드로 다시 실행)

- http://www.tmax.co.kr의 download링크를 클릭 (회원가입필요)

  WEBTOB license를 신청 -> 이메일을 통해 license.dat부여 (90일 사용가능)

  부여받은 license.dat파일을 c:\webtob\license에 복사 (덮어쓰기)

-------------------------------------------------------------------------------------

5. PATH 설정 후 리부팅 : 자신의 환경에 맞게 설정하고 시스템을 리부팅

  (Program Files처럼 공백을 포함한 디렉토리를 가진 경로는 맨뒤로...)

ex) PATH=C:\J2SDK1.4.1_07\bin;C:\webtob\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOW
S\System32\Wbem;C:\webtob\bin;C:\Jeus42\lib\etc\ant\bin;C:\Jeus42\bin;C:\Jeus42\lib\system

-------------------------------------------------------------------------------------

6. WEBTOB 환경설정

  1) 웹투비홈\config\sample.m을 카피해서 http.m을 생성

  2) wscfl -i http.m을 커맨드창에서 실행 (webtob 환경설정)

  정상결과 예)

        Current configuration:
                Number of client handler(HTH) = 1
                Supported maximum user per node = 975
                Supported maximum user per handler = 975
        CFL is done successfully for node(노드명(노드명))

---------------------------------------------------------------------------------------

7. 시동

1) webtob를 실행

- webtob 실행 :  wsboot

2) JEUS를 실행

- 우선 command창을 두개 띄웁니다.(제우스, 제우스관리자)

- 제우스창에 "jeus + 엔터"

- 제우스관리자창에 "jeusadmin 노드명 -U유져명 -P제우스패스워드 ->boot

- 제우스창에 에러(Exception)가 없다면 실행 성공!!!

--------------------------------------------------------------------------------------

8. 테스팅

- JEUS기본포트는 8088, webtob기본포트는 8080

- JSP 기본경로

제우스홈\webhome\servlet_home\webapps\examples
           http://127.0.0.1/examples/

- Servlet 기본경로

제우스홈\webhome\servlet_home\webapps\examples\WEB-INF\classes
    http://127.0.0.1/examples/

--------------------------------------------------------------------------------------

9. 종료

1) JEUS종료

- 제우스관리자창에 down -> jeusexit

2) WEBTOB종료

- 웹투비창에 wsdown -i

--------------------------------------------------------------------------------------

 

 

 

 

### JEUS/WEBTOB 연동하기 ###

--------------------------------------------------------------------------------------

1. webtob 설정

   - 웹투비홈/config/http.m의 각 항목에 추가합니다.

   *NODE

       JSVPORT = 9900

   *SVRGROUP

       jsvg     NODENAME=노드이름, SVRTYPE=JSV

   *SERVER

      MyGroup    SVGNAME=jsvg, MinProc=10, MaxProc=10

   *URI

      uri2    Uri="/examples/", Svrtype=JSV

--------------------------------------------------------------------------------------

2. jeus 설정

   - 제우스홈/config/노드이름/노드이름_servlet_engine1/WEBMain.xml 수정

        <webserver-connection>
            <webtob-listener>
                <listener-id>webtob1</listener-id>
                <port>9900</port>
                <hth-count>1</hth-count>
                <webtob-address>IP 혹은 127.0.0.1(동일서버에 JEUS와 WEBTOB존재시)</webtob-address>
                <registration-id>MyGroup</registration-id>
                <thread-pool>
                    <min>4</min>
                    <max>10</max>
                    <step>2</step>
                    <max-idle-time>30000</max-idle-time>
                    <max-wait-queue>4</max-wait-queue> 
                </thread-pool>
            </webtob-listener>
        </webserver-connection>


--------------------------------------------------------------------------------------

3. 제우스홈/bin/jeus.properties 조정

    - JEUS_WSDIR 부분을 주석처리 하거나 삭제

    - PATH 에서 $JEUS_HOME/webserver 부분도 제거

--------------------------------------------------------------------------------------

4. webtob 와 jeus 를 부팅 후 확인

   http://주소:8080/exapmples/index.jsp 에서 테스팅 페이지 보기

--------------------------------------------------------------------------------------

 

 

### DB 연동 ###

--------------------------------------------------------------------------------------

* MySQL 커넥션풀 샘플 (WEBMain.xml에 추가)

JEUS에서 제공하는 ConnectionPool은 JDBC Drive를 통해 얻은 Connection의 관리는 
엔진에서 해주는 것이므로 JDBC Driver를 $JEUS_HOME/lib/datasource 아래에 두고
DBConnectionPool은 container.xml에 DataSource는 JeusMain.xml에 다음과 같이 
설정을 하시면 사용하실 수가 있습니다. 
 
1) DBConnectionPool
------------------------------------------------------------------------------
<DBConnectionPool MaxUseCount="-1" 
                  ConnectionPoolType="shared" 
                  CloseDelayMillis="-1" 
                  MaxActiveTimeSecs="-1" 
                  ConnectionPoolID="mysql-shared" 
                  ConnectionArguments="user=root;password=" 
                  DriverClassName="org.gjt.mm.mysql.Driver" 
                  DynamicIncrement="true" 
                  ConnectionURL="jdbc:mysql://localhost:3306/mysql" 
                  LoginDelayMillis="-1" 
                  CloseLongActiveConnection="false" 
                  ConnectionTimeOutSecs="10"> 
        <DBPoolControl MaxCapacity="30" 
                   InitCapacity="20" 
                   MaxIdleTimeSecs="300" 
                   IncrementRate="4" /> 
        <DBAConnection ForcedClose="false" />
</DBConnectionPool>
 
 
2) DataSource
------------------------------------------------------------------------------
<DataSource> 
    <Database> 
            <Vendor>others</Vendor> 
            <ExportName>mysql</ExportName> 
            <DataSourceClassName>
                jeus.jdbc.driver.blackbox.BlackboxConnectionPoolDataSource
            </DataSourceClassName> 
            <Property> 
                <Name>URL</Name> 
                <Type>java.lang.String</Type> 
                <Value>jdbc:mysql://localhost:3306/mysql</Value> 
            </Property> 
            <Property> 
                <Name>DriverClassName</Name> 
                <Type>java.lang.String</Type> 
                <Value>com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource</Value> 
            </Property> 
            <Property> 
                <Name>Password</Name> 
                <Type>java.lang.String</Type> 
                <Value></Value> 
            </Property> 
            <Property> 
                <Name>User</Name> 
                <Type>java.lang.String</Type> 
                <Value>root</Value> 
            </Property> 
            <DataSourceType>ConnectionPoolDataSource</DataSourceType> 
            <ConnectionPool> 
                <MinPoolSize>4</MinPoolSize> 
                <MaxPoolSize>4</MaxPoolSize> 
                <IncreasingStep>1</IncreasingStep> 
                <ResizingPeriod>10</ResizingPeriod> 
                <OperationTimeout>30000</OperationTimeout> 
                <WaitForFreeConnection> 
                    <WaitingTime>10000</WaitingTime> 
                </WaitForFreeConnection> 
            </ConnectionPool> 
        </Database> 
  </DataSource>
--------------------------------------------------------------------------------------

* Oracle 커넥션풀 샘플 (JEUSMain.xml의 </node>하단에 추가)

    <resource>
        <data-source>
            <database>
                <vendor>oracle</vendor>
                <export-name>오라클UID</export-name>
                <data-source-class-name>oracle.jdbc.pool.OracleConnectionPoolDataSource</data-source-class-name>
                <data-source-type>DataSource</data-source-type>
                <database-name>디비명</database-name>
                <data-source-name>oracle.jdbc.pool.OracleConnectionPoolDataSource</data-source-name>
                <network-protocol>tcp</network-protocol>
                <user>scott</user>
                <password>tiger</password>
                <port-number>1521</port-number>
                <server-name>아이피 또는 127.0.0.1</server-name>
                <driver-type>thin</driver-type>
                <connection-pool>
                    <pooling>
                        <max>20</max>
                        <step>1</step>
                        <period>500000</period>
                    </pooling>
                </connection-pool>
            </database>
        </data-source>
    </resource>

--------------------------------------------------------------------------------------

* DB2

  1) JEUS 3.x ($JEUS_HOME/config/<NODENAME>/JeusMain.xml
        <Database> 
            <Vendor>db2</Vendor> 
            <ExportName>db2local</ExportName> 
            <DatabaseName>SAMPLE</DatabaseName> 
            <DataSourceClassName>COM.ibm.db2.jdbc.DB2ConnectionPoolDataSource</DataSourceClassName>
            <DataSourceName/> 
            <ServiceName/> 
            <Description/> 
            <NetworkProtocol/> 
            <Password>jeus2013</Password> 
            <PortNumber>포트번호</PortNumber> 
            <ServerName>DB서버 IP</ServerName> 
            <User>db2inst1</User> 
            <DataSourceType>LocalXADataSource</DataSourceType> 
            <ConnectionPool> 
                <MinPoolSize>2</MinPoolSize> 
                <MaxPoolSize>4</MaxPoolSize> 
                <IncreasingStep>1</IncreasingStep> 
                <ResizingPeriod>600000</ResizingPeriod> 
                <OperationTimeout>30000</OperationTimeout> 
                <WaitForFreeConnection> 
                    <WaitingTime>10000</WaitingTime> 
                </WaitForFreeConnection> 
            </ConnectionPool> 
        </Database>  
  2) JEUS 4.x ($JEUS_HOME/config/<NODENAME>/JEUSMain.xml
           <database>
                <vendor>db2</vendor>
                <export-name>db2XADatasource1</export-name>
<data-source-class-name>COM.ibm.db2.jdbc.DB2XADataSource</data-source-class-name>
                <data-source-type>XADataSource</data-source-type>
                <database-name>sample</database-name>
                <description>Customer DB</description>
                <password>db2inst1</password>
                <encryption>false</encryption>
                <port-number>포트번호</port-number>
                <server-name>DB서버 IP</server-name>
                <user>db2inst1</user>
                <connection-pool>
                    <pooling>
                        <min>2</min>
                        <max>4</max>
                        <step>1</step>
                        <period>600000</period>
                    </pooling>
                    <wait-free-connection>
                        <enable-wait>false</enable-wait>
                        <wait-time>10000</wait-time>
                    </wait-free-connection>
                    <operation-to>30000</operation-to>
                </connection-pool>
            </database>
--------------------------------------------------------------------------------------


 

 

### TIPS ###

--------------------------------------------------------------------------------------

* 파일경로설정

1) 파일 실제경로 (기본값)

- servlet : 제우스홈\webhome\servlet_home\webapps\examples\WEB-INF\classes

- jsp : 제우스홈\webhome\servlet_home\webapps\examples

2) 기존의 examples 컨텍스트 이외에 새로운 aaa라는 컨텍스트를 추가하는 방법 (컨텍스트 설정법)
- WEBMain.xml에서 다음 부분을 추가한다. 
  <context> 
    <context-name>aaa</context-name> 
    <context-path>/aaa</context-path> 
  </context> 
- aaa 컨텍스트의 DD(deployment descriptor)파일을 작성 
  제우스홈\config\노드명\[SERVLET_ENGINE_NAME]\jeus-web-dd_examples.xml 파일을 jeus-web-dd_aaa.xml 파일로 복사  

  하여 편집. context-name, docbase 만 설정하면 됩니다. WEBMain.xml의 이름과 동일해야 함. 
  <?xml version="1.0"?> 
  <!DOCTYPE jeus-web-dd PUBLIC "-//Tmax Soft., Inc.//DTD JEUS WEB Deployment Info 4.0//EN" 
                             "http://www.tmaxsoft.com/jeus/dtd/4.0/jeus-web-dd.dtd"> 
  <jeus-web-dd> 
    <context> 
        <context-name>aaa</context-name> 
        <docbase>서버의 물리적 절대경로</docbase> 
        <auto-reload> 
            <enable-reload>true</enable-reload> 
            <check-on-demand>true</check-on-demand> 
        </auto-reload> 
    </context> 
  </jeus-web-dd> 
- WebtoB의 환경설정파일(http.m)의 URI 절에 aaa 컨텍스트 경로를 다음과 같이 추가한다. 
  *URI 
  uri8 Uri = "/aaa/",Svrtype = JSV 
- WebtoB의 환경파일 수정 후에는 반드시 환경파일 컴파일 후 WebtoB를 재기동 : wscfl -i http.m 
- JEUS 를 재기동



--------------------------------------------------------------------------------------

* index.jsp를 자동으로 인식시키려면

- 제우스홈\config\노드명\[SERVLET_ENGINE_NAME]\webcommon.xml 파일에 index.jsp추가

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

--------------------------------------------------------------------------------------

* jspwork 디렉토리 변경

1. JEUS 3.x
$JEUS_HOME/config/<HOSTNAME>/<SERVLET_ENGINE_NAME>/container.xml의
<JSPEngine> 태그 안에 JspWorkDir을 설정하면 됩니다.
<Container>
  ...
  <ContextGroup>
    ...
    <JSPEngine ... 
      JspWorkDir="/app/jwork" 
      ...
    />
2. JEUS 4.x
$JEUS_HOME/config/<HOSTNAME>/<SERVLET_ENGINE_NAME>/WEBMain.xml의
<jsp-engine> 태그 안에 <jsp-work-dir>를 설정하면 됩니다.
<web-container>
  <context-group>
    ...
    <jsp-engine>
      ...
      <jsp-work-dir>/app/jwork</jsp-work-dir>
      ...
    </jsp-engine>
--------------------------------------------------------------------------------------

* 폴더관리 (webtob, jeus 연동시)

- image, js, css, html 등은WebToB홈\docs 에 폴더로 관리해서 WEBTOB가 처리

- jsp, servlet은 context를 별도 설정 (컨텍스트 설정법 참조)해서 JEUS가 처리

--------------------------------------------------------------------------------------

* 오라클 데이터베이스 사용시 C:/jeus/lib/datasource 폴더에 classes12.zip 복사

--------------------------------------------------------------------------------------

* trouble shooting

- Out Of Memory 에러

  JVM에서 사용할 수 있는 memory가 부족할 때 발생합니다. 
  이것을 해결하는 방법으로는 버전별로 다음과 같이 JEUS 환경 파일에서
  추가하면 됩니다. -Xms가 min 값이고 -Xmx가 max 값입니다.
  1) JEUS 3.x ($JEUS_HOME/config/<HOSTNAME>/JeusMain.xml)
  <JeusSystemConfig>
      <NodeConfig>
          ...
          <EngineContainer>
              ...
              <CommandOption>-Xms256m -Xmx256m<CommandOption>
  2) JEUS 4.x ($JEUS_HOME/config/<HOSTNAME>/JEUSMain.xml)
  <jeus-system>
      <node>
          ...
          <engine-container>
             ...
              <command-option>-Xms256m -Xmx256m<command-option>
- 노드명에 '-' 문자를 썼을 경우 또는 노드명에 공백이 있는 경우

  wscfl -i http.m 부분에서 오류 -> 노드명을 ""으로 묶어준다.

- 8080포트 사용하려고 할때 XDB 인증창이 뜬다면... 

  =====> 오라클의 XDB포트와 충돌하는 경우이므로 오라클의 XDB포트를 아래와 같이 변경해준다.

  [시작] -> [프로그램] -> [Oracle - OraHome92] -> [Configuration and Migration Tools] 

  -> [Database Configuration Assistant]   선택

  프로그램이 실행이되면.....

  [다음] 버튼을 Click -> [데이터베이스의 데이이터베이스 옵션구성] 선택 -> [사용 가능한 데이터베이스] 선택 

  -> [표준데이터베이  스 기능...] 버튼을 Click -> Oracle XML DB 의 [사용자 정의 ...] 버튼을 Click 

  -> [포트 번호 구성] 항목의 [사용자 정의 값 지정] 을 선택하셔서 HTTP 포트를 바꿔줍니다. 

  그리고 FTP 및 WebDAV 포트는 기본 설정인 2100 을 사용합니다. -> [확인] 버튼을 Click 하시고 

  [다음] 버튼을 Click 하셔서 데이터베이스를 실행할 기본모드를 선택하시고 [완료] 버튼을 눌러주시면 

  요약 메세지창이 뜨고 [확인] 버튼을 눌러주시면 XDB 의 Port 설정이 끝나게 됩니다.

- 다음과 같은 nullpointer exception 발생시

  <<__Exception__>>
  java.lang.NullPointerException
          at javax.servlet.GenericServlet.getServletContext(GenericServlet.java:20
  5)
          at javax.servlet.GenericServlet.log(GenericServlet.java:300)
          at javax.servlet.GenericServlet.init(GenericServlet.java:257)
          at jeus.servlet.common.WebContainerManager.startContainer(WebContainerMa
  nager.java:538)
          at jeus.servlet.syscontext.SystemContext.startup(SystemContext.java:64)
          at jeus.servlet.deployment.SystemWebContainer.startup(SystemWebContainer
  .java:35)
          at jeus.server.SystemEngineController.startEngine(SystemEngineController
  .java:26)
          at jeus.server.JeusServer.boot(JeusServer.java:720)
          at jeus.server.ControlThread.acceptRequests(ControlThread.java:181)
          at jeus.server.ControlThread.run(ControlThread.java:86)
  java.lang.NullPointerException : null
  [SystemEngineController] fail to start System Engine [devserver_system_engine] :
   jeus.server.JeusServerException
  <<__!Exception__>>
  [2005.05.26 10:30:05][2] [ControlThread] command (210.117.198.62:1063) : disconn
  ect()

 =====> j2sdk1.4.1_07 이하 버젼으로 jdk를 다시 설치한 수 jeus/webtob 다시설치 해보세요.

- C:\Program Files\Java\j2re1.4.1_07\bin\server\jvm.dll 파일을 찾지 못할때

  =====> C:\j2sdk1.4.1_07\jre\bin\server 폴더를 카피해서 

             C:\Program Files\Java\j2re1.4.1_07\bin 폴더에 복사하세요.

--------------------------------------------------------------------------------------

* 클래스파일 변경시 실시간으로 변경 반영

소스가 WEB-INF/classes 아래에 있으면 리부팅이 필요 없습니다. 
단, 확인 하실 것이 container.xml(WEBMain.xml)에 context 태그 내에 AutoReload="true"가 설정되어 있으면 됩니다.
WEB-INF/lib/*.jar는 라이브러리와 같이 수정하지 않는다는 의미를 포함하고 있으므로(J2EE 스펙에 준하면...) 
jar 파일 내의 수정은  반드시 제우스를 리부팅 해야 적용됩니다.
--------------------------------------------------------------------------------------

* 인클루드된 파일 변경시 즉시 적용(<%@ include 자동 반영하기)

JSP의 include의 방식에는 <%@ include (action), <jsp:include (directive) 가 있다.

이 중 <jsp:include (action) 는 include하는 JSP(a.jsp)와 include되는 JSP(b.jsp)가 각각 별도의 servlet으로 변환된다.
a.jsp가 수행 도중 b.jsp의 include 구문을 만나면 b.jsp로 제어권이 넘어가서 수행된 후 다시 a.jsp로 제어권이 넘어와서 계속 수행된다.
그래서 b.jsp가 변경된 경우 변경사항이 자동으로 반영된다.

그리고 <%@ include (directive)는 include하는 JSP(a.jsp)와 include되는 JSP(b.jsp)가  하나의 servlet으로 변환되어서 a.jsp 내에 b.jsp가 완전히 포함되는 형태로 변환된다.
<%@ include (directive)의 목적은 JSP가 Servlet으로 변환되어 컴파일 될 때에
특정 코드나 text를 포함하기 위해서 이다.
따라서 b.jsp가 변경된 경우 a.jsp는 b.jsp가 변경되었는지 모르기 때문에 include 된 JSP의 변경시 이것을 인지하지 못한다.

<%@ include (directive) 를 사용하는 경우 JSP container가 include된 파일이 변경된 경우 자동으로 반영해 주기 위해서는 include하는 파일이 수행될 때 마다 include된 파일의 변경 여부를 검사해서 변경되었다면 include 하는 파일을 recompile 해 주어야 한다.
이것은 JSP container에게는 상당히 부하를 주는 작업이다.
그래서 JSP Spec에서는 include된 파일의 변경시 반영 여부는 명시하지 않고 있다.

JEUS에서는 개발과 운영의 편의성을 위해서 이것을 옵션으로 지정하여 변경시 자동 반영이 되게 설정할 수 있다.
하지만 이 옵션을 true로 설정하는 경우 불필요한 검사가 들어가게 되므로 수행 속도에 지장을 주게됩니다. 반드시 JSP 파일의 변경이 빈번한 경우에만 설정하면 된다.

1. JEUS 3.x
$JEUS_HOME/config/<HOSTNAME>/<SERVLET_ENGINE_NAME>/container.xml에 설정
---------------------------------------------------------
<Container>
    ...
    <ContextGroup>
        ...
        <JSPEngine ...
            CheckIncludedJspFile="true"
            ... />
2. JEUS 4.x
$JEUS_HOME/config/<HOSTNAME>/<SERVLET_ENGINE_NAME>/WEBMain.xml에 설정
---------------------------------------------------------
<web-container>
    ...
    <context-group>
        ...
        <jsp-engine>
            ...
            <check-included-jspfile>true</check-included-jspfile>
            ...
        </jsp-engine>
        ...
    </context-group>
    ...
</web-container>
--------------------------------------------------------------------------------------

* http.m 샘플

*DOMAIN
WebtoB

*NODE
devserver WEBTOBDIR="C:/webtob", 
  SHMKEY = 54000,
  DOCROOT="C:/tmax/webdocs",
  IndexName="index.jsp,index.html,index.htmm",
  PORT = "80", 
  LOGGING = "log1",
  ERRORLOG = "log2",
  HTH = 1,
  JSVPORT = 9900

*SVRGROUP
htmlg  NODENAME = devserver, SvrType = HTML
cgig  NODENAME = devserver, SVRTYPE = CGI
ssig  NODENAME = devserver, SVRTYPE = SSI
jsvg  NODENAME = devserver, SVRTYPE=JSV

*SERVER
html  SVGNAME = htmlg, MinProc = 3, MaxProc = 10
cgi  SVGNAME = cgig, MinProc = 3, MaxProc = 10
ssi  SVGNAME = ssig, MinProc = 3, MaxProc =10
MyGroup  SVGNAME=jsvg, MinProc=10, MaxProc=10

*URI
uri1  Uri = "/cgi-bin/", Svrtype = CGI
uri2  Uri="/examples/", Svrtype=JSV
uri3  Uri="/", Svrtype=JSV

*ALIAS
alias1  URI = "/cgi-bin/", RealPath = "C:/webtob/cgi-bin/"

*LOGGING
log1  Format = "DEFAULT", FileName = "C:/webtob/log/access.log", Option = "sync"
log2  Format = "ERROR", FileName = "C:/webtob/log/error.log", Option = "sync"

*EXT
htm  MimeType = "text/html", SvrType = HTML
--------------------------------------------------------------------------------------

* JEUSMain.xml 샘플

<?xml version="1.0"?>
<!DOCTYPE jeus-system PUBLIC "-//Tmax Soft, Inc.//DTD JEUS Main Config 4.0//EN"
                             "http://www.tmaxsoft.com/jeus/dtd/4.0/jeus-main-config.dtd">
<jeus-system>
    <node>
        <name>devserver</name>
        <class-ftp>true</class-ftp>
        <sequential-start>true</sequential-start>
        <enable-webadmin>true</enable-webadmin>
        <system-log>
            <level>debug</level>
        </system-log>
        <engine-container>
            <name>container1</name>
            <engine-command>
                <type>servlet</type>
                <name>engine1</name>
                <startup-mode>xml</startup-mode>
            </engine-command>
            <tm-config>
                <pooling>
                    <min>10</min>
                    <max>20</max>
                    <step>2</step>
                    <period>600000</period>
                </pooling>
                <active-timeout>300000</active-timeout>
                <commit-timeout>120000</commit-timeout>
                <capacity>20000</capacity>
            </tm-config>
        </engine-container>
    </node>
</jeus-system>

--------------------------------------------------------------------------------------

* WEBMain.xml 샘플

<?xml version="1.0"?>
<!DOCTYPE web-container PUBLIC "-//Tmax Soft., Inc.//DTD WEB Main Config 4.0//EN"
                               "http://www.tmaxsoft.com/jeus/dtd/4.0/web-main-config.dtd">
<web-container>
    <context-group>
        <group-name>MyGroup</group-name>
        <group-docbase>webapps</group-docbase>
        <session-config>
            <timeout>20</timeout>
            <shared>true</shared>
        </session-config>
        <logging>
            <error-log>
                <target>stdout</target>
                <level>information</level>
                <buffer-size>0</buffer-size>
                <valid-day>1</valid-day>
            </error-log>
            <user-log>
                <target>file</target>
                <buffer-size>0</buffer-size>
                <valid-day>1</valid-day>
            </user-log>
            <access-log>
                <target>file</target>
                <buffer-size>0</buffer-size>
                <valid-day>1</valid-day>
                <log-format>
                    <time-format>default</time-format>
                </log-format>
            </access-log>
        </logging>
        <context>
            <context-name>examples</context-name>
            <context-path>/examples</context-path>
        </context>
  <context> 
   <context-name>ngi</context-name> 
   <context-path>/</context-path> 
  </context> 
        <webserver-connection>
            <webtob-listener>
                <listener-id>webtob1</listener-id>
                <port>9900</port>
                <hth-count>1</hth-count>
                <webtob-address>127.0.0.1</webtob-address>
                <registration-id>MyGroup</registration-id>
                <thread-pool>
                    <min>4</min>
                    <max>10</max>
                    <step>2</step>
                    <max-idle-time>30000</max-idle-time>
                    <max-wait-queue>4</max-wait-queue> 
                </thread-pool>
            </webtob-listener>
        </webserver-connection>
    </context-group>
</web-container>
--------------------------------------------------------------------------------------

 

 

 

### 실무 적용 예 (버츄얼호스팅 사용) ###

-------------------------------------------------------------------------------------- 

프로젝트 실제환경을 로컬에서 구현해 작업해야 하는 상황에서...

두대의 IBM서버로 돌아가는 JEUS/WEBTOB의 환경설정 입니다.

 

<<< 실제환경 >>>

---------------------------------------------------------------------------

- 서버1 : WindowsServer2003Standard, 웹서버 (WEBTOB)

- 서버2 : WindowsServer2003Standard, 웹컨테이너 (JEUS), DB(Oracle9i)

- 두 서버는 9999포트를 통해 연동한다.

- images,css,js는 서버1에 jsp,java는 서버2에 위치시킨다.

- 서버구조는 1 WEBSERVER, 2 CONTAINER (원래 4개에서 필요한 두개만 가동)

- 윈도우 hosts파일에 localhost2, localhost3 추가

----------------------------------------------------------------------------

 

<<< sample.m >>>

*DOMAIN
WebtoB

*NODE
realchokyCompaq
  WebtobDir="C:/webtob",
  Shmkey=54000,
  Docroot="C:/center",
  HTH=1,
  port="9900",
  JSVPort=9999,
  IndexName="index.jsp,index.htm,index.html",
  Logging="log1",
  ErrorLog="log2"

*VHOST
center
  NodeName="realchokyCompaq",
  HostName="localhost2",
  DocRoot="C:/center",
  Port="9900",
  SSLFlag=N,
  IndexName="index.jsp,index.htm,index.html"

admin
  NodeName="realchokyCompaq",
  HostName="localhost3",
  DocRoot="C:/admin",
  Port="9900",
  IndexName="index.jsp,index.htm,index.html"

*SVRGROUP
htmlg
  NodeName="realchokyCompaq",
  SvrType=HTML

jsvg
  NodeName="realchokyCompaq",
  SvrType=JSV,
  VHostName=center

jsvg2
  NodeName="realchokyCompaq",
  SvrType=JSV,
  VHostName=admin

*SERVER
html
  SvgName=htmlg,
  MinProc=30,
  MaxProc=60

Center
  SvgName=jsvg,
  MinProc=30,
  MaxProc=30,
  HttpInBufsize=0,
  HttpOutBufsize=0

Admin
  SvgName=jsvg2,
  MinProc=10,
  MaxProc=10,
  HttpInBufsize=0,
  HttpOutBufsize=0

*URI
images
  Uri="/images/",
  SvrType=HTML

center
  Uri="/",
  SvrType=JSV,
  VhostName=center

admin
  Uri="/",
  SvrType=JSV,
  VhostName=admin

*LOGGING
log1
  FileName="C:/webtob/log/access.log",
  Format="DEFAULT",
  Option="sync"

log2
  FileName="C:/webtob/log/error.log",
  Format="ERROR",
  Option="sync"

*EXT
htm
  Mimetype="text/html",
  Svrtype=HTML

jsp
  Mimetype="application/jsp",
  Svrtype=JSV

 

 

<<< JEUSMain.xml >>>

 

<?xml version="1.0"?>
<!DOCTYPE jeus-system PUBLIC "-//Tmax Soft, Inc.//DTD JEUS Main Config 4.0//EN"
                             "http://www.tmaxsoft.com/jeus/dtd/4.0/jeus-main-config.dtd">
<jeus-system>
    <node>
        <name>realchokyCompaq</name>
        <class-ftp>true</class-ftp>
        <sequential-start>true</sequential-start>
        <system-log>
            <level>debug</level>
        </system-log>
        <engine-container>
            <name>container1</name>
            <engine-command>
                <type>servlet</type>
                <name>engine1</name>
                <startup-mode>xml</startup-mode>
            </engine-command>
            <tm-config>
                <pooling>
                    <min>10</min>
                    <max>20</max>
                    <step>2</step>
                    <period>600000</period>
                </pooling>
                <active-timeout>300000</active-timeout>
                <commit-timeout>120000</commit-timeout>
                <capacity>20000</capacity>
            </tm-config>
        </engine-container>
        <engine-container>
            <name>container2</name>
            <engine-command>
                <type>servlet</type>
                <name>engine2</name>
                <startup-mode>xml</startup-mode>
            </engine-command>
            <tm-config>
                <pooling>
                    <min>10</min>
                    <max>20</max>
                    <step>2</step>
                    <period>600000</period>
                </pooling>
                <active-timeout>300000</active-timeout>
                <commit-timeout>120000</commit-timeout>
                <capacity>20000</capacity>
            </tm-config>
        </engine-container>
    </node>
    <resource>
        <data-source>
            <database>
                <vendor>oracle</vendor>
                <export-name>오라클UID</export-name>
                <data-source-class-name>oracle.jdbc.pool.OracleConnectionPoolDataSource</data-source-class-name>
                <data-source-type>DataSource</data-source-type>
                <database-name>디비명</database-name>
                <data-source-name>oracle.jdbc.pool.OracleConnectionPoolDataSource</data-source-name>
                <network-protocol>tcp</network-protocol>
                <user>아이피</user>
                <password>패스워드</password>
                <port-number>1521</port-number>
                <server-name>아이피 혹은 127.0.0.1</server-name>
                <driver-type>thin</driver-type>
                <connection-pool>
                    <pooling>
                        <max>20</max>
                        <step>1</step>
                        <period>500000</period>
                    </pooling>
                </connection-pool>
            </database>
        </data-source>
    </resource>
</jeus-system>

 

 

<<< WEBMain.xml (컨테이너 1) >>>

 

<?xml version="1.0"?>
<!DOCTYPE web-container PUBLIC "-//Tmax Soft., Inc.//DTD WEB Main Config 4.0//EN"
                               "http://www.tmaxsoft.com/jeus/dtd/4.0/web-main-config.dtd">
<web-container>
    <context-group>
        <group-name>Center</group-name>
        <group-docbase>webapps</group-docbase>
        <servlet-home>c:\</servlet-home>
        <context>
            <context-name>Center</context-name>
            <context-path>/</context-path>
        </context>
        <session-config>
            <shared>true</shared>
            <timeout>20</timeout>
        </session-config>
        <webserver-connection>
            <webtob-listener>
                <listener-id>Center</listener-id>
                <port>9999</port>
                <output-buffer-size>0</output-buffer-size>
                <webtob-address>127.0.0.1</webtob-address>
                <thread-pool>
                    <min>30</min>
                    <max>30</max>
                </thread-pool>
            </webtob-listener>
        </webserver-connection>
        <logging>
            <error-log>
                <target>stdout</target>
                <buffer-size>0</buffer-size>
                <level>information</level>
            </error-log>
            <user-log>
                <buffer-size>0</buffer-size>
            </user-log>
            <access-log>
                <buffer-size>0</buffer-size>
                <valid-day>1</valid-day>
                <log-format>
                    <time-format>default</time-format>
                </log-format>
            </access-log>
        </logging>
    </context-group>
</web-container>

 

 

<<< jeus-web-dd_Center.xml >>>

 

<?xml version="1.0"?>
<!DOCTYPE jeus-web-dd PUBLIC "-//Tmax Soft., Inc.//DTD JEUS WEB Deployment Info 4.0//EN"
                             "http://www.tmaxsoft.com/jeus/dtd/4.0/jeus-web-dd.dtd">
<jeus-web-dd>
    <context>
        <context-name>center</context-name>
        <docbase>center</docbase>
        <auto-reload>
            <enable-reload>true</enable-reload>
            <check-on-demand>true</check-on-demand>
        </auto-reload>
    </context>
</jeus-web-dd>

 

 

 

<<< WEBMain.xml (컨테이너 2) >>>

 

<?xml version="1.0"?>
<!DOCTYPE web-container PUBLIC "-//Tmax Soft., Inc.//DTD WEB Main Config 4.0//EN"
                               "http://www.tmaxsoft.com/jeus/dtd/4.0/web-main-config.dtd">
<web-container>
    <context-group>
        <group-name>Admin</group-name>
        <group-docbase>webapps</group-docbase>
        <servlet-home>c:\</servlet-home>
        <context>
            <context-name>Admin</context-name>
            <context-path>/</context-path>
        </context>
        <session-config>
            <shared>true</shared>
            <timeout>20</timeout>
        </session-config>
        <webserver-connection>
            <webtob-listener>
                <listener-id>Center</listener-id>
                <port>9999</port>
                <output-buffer-size>0</output-buffer-size>
                <webtob-address>127.0.0.1</webtob-address>
                <thread-pool>
                    <min>30</min>
                    <max>30</max>
                </thread-pool>
            </webtob-listener>
        </webserver-connection>
        <logging>
            <error-log>
                <target>stdout</target>
                <buffer-size>0</buffer-size>
                <level>information</level>
            </error-log>
            <user-log>
                <buffer-size>0</buffer-size>
            </user-log>
            <access-log>
                <buffer-size>0</buffer-size>
                <valid-day>1</valid-day>
                <log-format>
                    <time-format>default</time-format>
                </log-format>
            </access-log>
        </logging>
    </context-group>
</web-container>


 

 

<<< jeus-web-dd_Admin.xml >>>

 

<?xml version="1.0"?>
<!DOCTYPE jeus-web-dd PUBLIC "-//Tmax Soft., Inc.//DTD JEUS WEB Deployment Info 4.0//EN"
                             "http://www.tmaxsoft.com/jeus/dtd/4.0/jeus-web-dd.dtd">
<jeus-web-dd>
    <context>
        <context-name>admin</context-name>
        <docbase>admin</docbase>
        <auto-reload>
            <enable-reload>true</enable-reload>
            <check-on-demand>true</check-on-demand>
        </auto-reload>
    </context>
</jeus-web-dd>


--------------------------------------------------------------------------------------

 

 

이 문서는 실무에서 자주 사용되는 웹/웹어플서버인 JEUS/WEBTOB를 접하면서 생기게된

설정문제와 기타 문제들을 정리해볼 목적으로 만들어 졌습니다. 오류사항이 있으면 메일을 보내주세요.

기타 문의는 http://www.tmax.co.kr 개발자포럼을 이용하세요.
Posted by 1010
98..Etc/70.JEUS2009. 8. 20. 17:05
반응형
우선 webtob/config/http.m 파일을 열어서

변경전)
css  MimeType = "application/x-pointplus", SVRTYPE = HTML

변경후)
css  MimeType = "text/css", SVRTYPE = HTML



------------위에 않되는 경우----------------------

htc MimeType ="text/x-component" SvrType =HTML (추가)
#txt MimeType ="text/plain" SvrType =HTML (주석처리)

-
-----------------------------------------------

컴파일 하고 webtob 재시작 해주세요...

wscfl -i http.m


원인은 아래 잃어보세요...

하도 틀린 곳이 많아서 (특히,  MS IIS를 돌리는 곳 가운데) 어디를 딱히 찍어낼 수도 없습니다. text/css나 text/html, text/javascript 등을 http 헤더에 지정하지 않은 채로 파일을 내보내는 곳이 아주 많습니다.

이런 곳이 많은 이유 중 하나는 M$ IE가 http 표준을 무시하고 제멋대로 file type sniffer인지 뭔지 하는 것을 쓰면서 웹 제작자의 버릇을 아주 잘못 들여 놓았기 때문입니다. 표준을 지키는 것이 얼마나 중요한지 보여 주는 단적인 보기입니다.


http 헤더의 Content-Type에 지정한 값을 _무조건_ 믿어야 함에도 불구하고, MS IE는  그것을 믿지 않고 파일 확장자와 파일 첫 부분을 직접 들여다 보고서 제멋대로 파일의 MIME type을 결정합니다.   이 바람에 상당수의 웹 개발자들이 http content-type header field에 제대로 된 값을 지정하지 않은 채로 파일을 내보냅니다.  그럴 경우 서버는 디폴트 값을 쓰므로, html, css 등이  text/html이나 text/css 대신 application/octet-stream이란 머릿표를  달고 클라이언트로 보내집니다. 이런 Content-Type 헤더를 달고 온 파일에 대해 http 표준을 따르는 모질라와 같은 브라우저는 application/octetstream은 자체 처리할 수 없으므로 저장하라는 대화 상자를 띄웁니다. 또 어떤 경우는 text/html이나 text/css 자리에 text/plain이 붙어 있어서 iframe으로 포함시킨 html 문서의 소스가 그대로 보이는 경우도 있습니다.

    IIS이든 Apache이든 또다른 웹 서버이든 정적 문서는 확장자 별로 (apache는 필요하면 특정 파일에 대해서만 따로 MIME type을 지정할 수도 있습니다) 기본 MIME type을 지정할 수 있습니다. 웹 서핑 하다가 html 소스가 화면 일부에 보인다든지, MS IE로 볼 때에는 '광고'가 뜨던 부분에서 모질라는 파일을 저장하라는 대화 상자가 뜬다든지 하면 신고해 주십시오. 다 이런 문제 때문입니다.

   참, MS IE의 file type sniffer는 어떨 때에는 아주 엉터리입니다. 전에 제가 운영하던 곳에서 database로부터 동적으로 PDF를 생성해서 (LaTeX을 써서) 뿌려 준 적이 있습니다. 물론, application/pdf란 http 헤더를 달아서 내보냈지요. acroread도 군소리 없이 잘 보여 주는 pdf 파일을 보고 MS IE의 filetype sniffer는 제멋대로 pdf가 아니라고 판단하고서 acroread를 띄우는 대신 저장하라고 하더군요.
Posted by 1010
98..Etc/70.JEUS2009. 8. 19. 09:42
반응형
출처 : http://develop.sunshiny.co.kr/143

[
jeus@localhost config]$ cat ws_engine.m
*DOMAIN
jeuservice

*NODE
localhost   * 컨테이너 1
  WEBTOBDIR = "/usr/local/jeus5/webserver",
  SHMKEY    = 54000,
  DOCROOT   = "/home/free/webapps/WebContent",
  PORT      = "8080",
  LOGGING   = "log1",
  ERRORLOG  = "log2",
  JSVPORT   = 9900,
  IndexName = "index.do,index.html,index.jsp",
  HTH       = 1

*VHOST     * 컨테이너2 가상 호스트 추가
vhost1    
  DOCROOT   = "/home/free2/webapps/WebContent",  * 새로운 컨텍스트 경로
  PORT      = "8088",           * 사용할 포트 번호 지정(포트번호만 변경하여 다른 컨텍스트 사용)
  NODENAME  = "localhost",    * 상위에  정의한 NODE 명을 지정
  HOSTNAME  = "192.168.1.11",   * DNS 명(예: aaa.co.kr) 또는 localhost IP(IP로 외부 접속)
                                                * HOSTNAME에서 DNS 명을 설정시에 로컬의 hosts 파일에 dns 추가
  IndexName = "index.do,index.html,index.jsp",  * 컨테이너 기동시에 읽어들일 파일
  LOGGING   = "log3",    * 로그 정의
  ERRORLOG  = "log4"  


*SVRGROUP
htmlg       NODENAME = "localhost", SVRTYPE = HTML
cgig        NODENAME = "localhost", SVRTYPE = CGI
ssig        NODENAME = "localhost", SVRTYPE = SSI
jsvg        NODENAME = "localhost", SVRTYPE = JSV
jsvg1       NODENAME = "localhost", SVRTYPE = JSV, VHOSTNAME = vhost1  * 가상 호스트 추가

*SERVER
html        SVGNAME  = htmlg, MinProc = 1,  MaxProc = 2
cgi         SVGNAME  = cgig,  MinProc = 1,  MaxProc = 2
ssi         SVGNAME  = ssig,  MinProc = 1,  MaxProc = 2
MyGroup     SVGNAME  = jsvg,  MinProc = 5, MaxProc = 10
MyGroup2    SVGNAME  = jsvg1,  MinProc = 5, MaxProc = 10    * 추가된 컨테이너에서 사용하는 그룹

*URI
uri1        Uri      = "/cgi-bin/",  Svrtype = CGI
uri2        Uri      = "/free1/", Svrtype = JSV     * 컨테이너1 의 이름(JEUSMain.xml)
uri3        Uri      = "/free2/", Svrtype = JSV, VhostName=vhost1, SvrName = MyGroup2  * 컨테이너2의 이름(JEUSMain.xml)
uri4        Uri      = "/", Svrtype = JSV

*ALIAS
alias1      URI      = "/cgi-bin/", RealPath = "/usr/local/jeus5/webserver/cgi-bin/"

*LOGGING
log1        Format   = "DEFAULT",   FileName = "/home/free/webapps/logs/webserver/access.log", Option = "sync"
log2        Format   = "ERROR",     FileName = "/home/free/webapps/logs/webserver/error.log",  Option = "sync"
log3        Format   = "DEFAULT",   FileName = "/home/free2/webapps/logs/webserver/access.log", Option = "sync" * 로그파일 저장 경로
log4        Format   = "ERROR",     FileName = "/home/free2/webapps/logs/webserver/error.log",  Option = "sync"

*EXT
htm         MimeType = "text/html",  SvrType = HTML
do              Mimetype ="application/jsp",  Svrtype=JSV,  SvrName=MyGroup  * 사용 확장자 정의
jsf             Mimetype ="application/jsp",  Svrtype=JSV,  SvrName=MyGroup
jsp             Mimetype ="application/jsp",  Svrtype=JSV,  SvrName=MyGroup
html            MimeType = "text/html", SvrType = HTML
hwp             MimeType = "application/x-hwp", SvrType = HTML
pdf             MimeType = "application/x-pdf", SVRTYPE = HTML
css             MimeType = "text/css", SvrType = HTML
js              MimeType = "application/x-javascript", SvrType = HTML
gul             MimeType = "application/gul", SvrType = HTML
gif             MimeType = "image/gif", SvrType=HTML
jpeg            MimeType = "image/gif", SvrType=HTML
jpg             MimeType = "image/gif", SvrType=HTML
zip             MimeType = "application/zip", SvrType=HTML
jar             MimeType = "application/x-java-archive", SvrType=HTML
exe             MimeType = "application/octet-stream", SvrType=HTML
wml             MimeType = "application/vnd.wap.wml", SvrType=HTML
wmls            MimeType = "application/vnd.wap.wmlscript", SvrType=HTML
wmlc            MimeType = "application/vnd.wap.wmlc", SvrType=HTML
wmlsc           MimeType = "application/vnd.wap.wmlscript", SvrType=HTML
wbmp            MimeType = "application/vnd.wap.wbmp", SvrType=HTML
swf             MimeType = "application/x-shockwave-flash", SvrType=HTML
csv             MimeType = "application/octet-stream", SvrType=HTML
xml             MimeType = "text/html", SvrType = HTML
asd             MimeType = "application/astound",SvrType=HTML
asn             MimeType = "application/astound",SvrType=HTML
doc             MimeType = "application/msword",SvrType=HTML
wiz             MimeType = "application/msword",SvrType=HTML
rtf             MimeType = "application/msword",SvrType=HTML
xls             MimeType = "application/vnd.ms-excel",SvrType=HTML
xlw             MimeType = "application/vnd.ms-excel",SvrType=HTML
xla             MimeType = "application/vnd.ms-excel",SvrType=HTML
xlc             MimeType = "application/vnd.ms-excel",SvrType=HTML
xlm             MimeType = "application/vnd.ms-excel",SvrType=HTML
xlt             MimeType = "application/vnd.ms-excel",SvrType=HTML
ppt             MimeType = "application/vnd.ms-powerpoint",SvrType=HTML
pps             MimeType = "application/vnd.ms-powerpoint",SvrType=HTML
pot             MimeType = "application/vnd.ms-powerpoint",SvrType=HTML
m13             MimeType = "application/x-msmediaview",SvrType=HTML
m14             MimeType = "application/x-msmediaview",SvrType=HTML
wmf             MimeType = "application/x-msmetafile",SvrType=HTML
midi            MimeType = "audio/midi",SvrType=HTML
mid             MimeType = "audio/midi",SvrType=HTML
aif             MimeType = "audio/x-aiff",SvrType=HTML
aiff            MimeType = "audio/x-aiff",SvrType=HTML
aifc            MimeType = "audio/x-aiff",SvrType=HTML
wav             MimeType = "audio/x-wav",SvrType=HTML
cab             MimeType = "x-application/octet-stream", SvrType = HTML
fla             MimeType = "application/x-fla", SvrType=HTML

ws_engine.m 파일은 설정후 컴파일 과정을 함
[jeus@localhost localhost]$
wscfl -i ws_engine.m

##############################################################################

[jeus@localhost localhost]$ cat JEUSMain.xml
<?xml version="1.0" encoding="utf-8"?>
<jeus-system xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <node>
                <name>localhost</name>
        <engine-container>
<!-- 컨테이너 1 -->
            <name>container1</name>
            <command-option>-Xms256m -Xmx512m</command-option>
            <engine-command>
                <type>ws</type>
                <name>engine1</name>
            </engine-command>
            <engine-command>
                <type>servlet</type>
                <name>engine1</name>
            </engine-command>
            <sequential-start>true</sequential-start>
        </engine-container>
<!-- 컨테이너 2 -->
                <engine-container>
            <name>container2</name>
            <command-option>-Xms256m -Xmx512m</command-option>
            <engine-command>
                <type>servlet</type>
                <name>engine2</name>
            </engine-command>
            <sequential-start>true</sequential-start>
        </engine-container>

        <class-ftp>true</class-ftp>
        <sequential-start>true</sequential-start>
        <enable-webadmin>true</enable-webadmin>
    </node>
    <application>
        <!-- 노드 localhost 에서 사용할 컨테이너 이름(ws_engine.m)-->
        <name>free1</name> 
        <path>/home/free/webapps/WebContent</path>
        <deployment-type>COMPONENT</deployment-type>
        <deployment-target>
            <target>
                <engine-container-name>localhost_container1</engine-container-name>
                <web-context-group>
                    <name>MyGroup</name>
                </web-context-group>
            </target>
        </deployment-target>
        <web-component/>
    </application>
    <application>
        <!-- 가상호스트 vhost1 에서 사용할 컨테이너 이름(ws_engine.m)-->
        <name>free2</name>
        <path>/home/free2/webapps/WebContent</path> <!-- 추가할 컨텍스트 경로 -->
        <deployment-type>COMPONENT</deployment-type>
        <deployment-target>
            <target>
                <engine-container-name>localhost_container2</engine-container-name>
                <web-context-group>
                    <name>MyGroup2</name>
                </web-context-group>
            </target>
        </deployment-target>
        <web-component/>
    </application>
</jeus-system>


##############################################################################

기본으로 제우스에서 하나의 webtob 와 하나의 호스트명_ws_engine1 를 사용.
컨테이너 1 다음으로 추가되는 컨테이너는,
컨테이너 1에 설정된 호스트명_ws_engine1/WSMain.xml 에 설정부분을 추가하여 사용.

[jeus@localhost localhost_ws_engine1]$ cat WSMain.xml
<?xml version="1.0" encoding="UTF-8"?>
<ws-engine xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <domain>
        <name>jeuservice</name>
<!-- 컨테이너 1에서 사용. -->
        <node>
            <name>localhost</name> 
            <webtob-dir>/usr/local/jeus5/webserver</webtob-dir>
            <shmkey>54000</shmkey>
            <docroot>/home/free/webapps/WebContent</docroot>
            <jsv-port>9900</jsv-port>
            <hth>1</hth>
            <port>8080</port>
            <logging>log1</logging>
            <error-log>log2</error-log>
        </node>

<!-- 추가된 컨테이너 설정은 아래 해당하는 엘리먼트 추가  -->
        <svrgroup>
            <name>htmlg</name>
            <svr-type>HTML</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <svrgroup>
            <name>cgig</name>
            <svr-type>CGI</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <svrgroup>
            <name>ssig</name>
            <svr-type>SSI</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <svrgroup>
            <name>jsvg</name>
            <svr-type>JSV</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <svrgroup>
            <name>jsvg2</name>
            <svr-type>JSV</svr-type>
            <node-name>localhost</node-name>
        </svrgroup>
        <server>
            <name>html</name>
            <svg-name>htmlg</svg-name>
            <min-proc>1</min-proc>
            <max-proc>2</max-proc> 
            <asq-count>1</asq-count>
        </server>
        <server>
            <name>cgi</name>
            <svg-name>cgig</svg-name>
            <min-proc>1</min-proc>
            <max-proc>2</max-proc>
        </server>
        <server>
            <name>ssi</name>
            <svg-name>ssig</svg-name>
            <min-proc>1</min-proc>
            <max-proc>2</max-proc>
        </server>
        <server>
            <name>MyGroup</name>
            <svg-name>jsvg</svg-name>
            <min-proc>5</min-proc>
            <max-proc>10</max-proc>
        </server>
        <server> <!-- 컨테이너 그룹 추가 (ws_engine.m)-->
            <name>MyGroup2</name>
            <svg-name>jsvg1</svg-name>
            <min-proc>5</min-proc>
            <max-proc>10</max-proc>
        </server>
        <uri>
            <name>uri1</name>
            <uri-def>/cgi-bin/</uri-def>
            <svr-type>CGI</svr-type>
        </uri>
        <uri>
            <name>uri2</name>
            <uri-def>/webapps</uri-def>
            <svr-type>JSV</svr-type>
        </uri>
        <uri>
            <name>uri3</name>
            <uri-def>/free2</uri-def>
            <svr-type>JSV</svr-type>
        </uri>
        <uri>
            <name>uri4</name>
            <uri-def>/</uri-def>
            <svr-type>JSV</svr-type>
        </uri>
        <logging>
            <name>log1</name>
            <format>DEFAULT</format>
            <file-name>/home/free/webapps/logs/webserver/access.log</file-name>
            <option>sync</option>
        </logging>
        <logging>
            <name>log2</name>
            <format>ERROR</format>
            <file-name>/home/free/webapps/logs/webserver/error.log</file-name>
            <option>sync</option>
        </logging>
        <logging>
            <name>log3</name>
            <format>DEFAULT</format> <!-- 추가할 컨텍스트의 로그 파일 저장 경로 (ws_engine.m) -->
            <file-name>/home/free2/webapps/logs/webserver/access.log</file-name>
            <option>sync</option>
        </logging>
        <logging>
            <name>log4</name>
            <format>ERROR</format>
            <file-name>/home/free2/webapps/logs/webserver/error.log</file-name>
            <option>sync</option>
        </logging>
        <ext>
            <name>htm</name>
            <mimetype>text/html</mimetype>
            <svr-type>HTML</svr-type>
        </ext>
        <ext>
            <name>jsp</name>
            <mimetype>application/jsp</mimetype>
            <svr-type>JSV</svr-type>
            <svr-name>MyGroup</svr-name>
        </ext>
    </domain>
</ws-engine>


##############################################################################


컨테이너 1에서 사용하는
호스트명_servlet_engine1

[jeus@localhost localhost_servlet_engine1]$ cat WEBMain.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-container xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <context-group>
        <group-name>MyGroup</group-name>
        <webserver-connection>
            <webtob-listener>
                <listener-id>webtob1</listener-id>
                <port>9900</port>
                <output-buffer-size>8192</output-buffer-size>
                <thread-pool>
                    <min>5</min>
                    <max>10</max>
                    <step>1</step>
                    <max-idle-time>30000</max-idle-time>
                </thread-pool>
                <webtob-address>127.0.0.1</webtob-address>
                <registration-id>MyGroup</registration-id>
            </webtob-listener>
        </webserver-connection>
        <print-error-to-browser>true</print-error-to-browser>
        <encoding>
            <request-encoding>
                <default>MS949</default>
                <forced>MS949</forced>
            </request-encoding>
            <response-encoding>
                <default>MS949</default>
                <forced>MS949</forced>
            </response-encoding>
            <postdata-encoding>
                <default>MS949</default>
                <forced>MS949</forced>
            </postdata-encoding>
        </encoding>
        <jsp-engine>
            <jsp-work-dir>/home/free/webapps/jspwork</jsp-work-dir>
        </jsp-engine>
        <logging>
            <access-log>
                <handler>
                    <file-handler>
                        <name>handler1</name>
                        <valid-day>1</valid-day>
                    </file-handler>
                </handler>
            </access-log>
        </logging>
    </context-group>
    <session-cluster>
        <session-routing>false</session-routing>
    </session-cluster>
</web-container>


##############################################################################

컨테이너 2에서 사용하는 호스트명_servlet_engine2
필요한 설정부분은 그룹명과 jsp 컴파일된 클래스가 저장될 경로 변경

[jeus@localhost localhost_servlet_engine2]$ cat WEBMain.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-container xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <context-group>
        <group-name>MyGroup2</group-name>
        <webserver-connection>
            <webtob-listener>
                <listener-id>webtob1</listener-id>
                <port>9900</port> <!-- 하나의 webtob 를 공유하기때문에 통신 포트 동일-->
                <output-buffer-size>8192</output-buffer-size>
                <thread-pool>
                    <min>5</min>
                    <max>10</max>
                    <step>1</step>
                    <max-idle-time>30000</max-idle-time>
                </thread-pool>
                <registration-id>MyGroup2</registration-id>
                <webtob-home>/usr/local/jeus5/webserver</webtob-home>
            </webtob-listener>
        </webserver-connection>
        <print-error-to-browser>true</print-error-to-browser>
        <encoding>
            <request-encoding>
                <default>MS949</default>
                <forced>MS949</forced>
            </request-encoding>
            <response-encoding>
                <default>MS949</default>
                <forced>MS949</forced>
            </response-encoding>
            <postdata-encoding>
                <default>MS949</default>
                <forced>MS949</forced>
            </postdata-encoding>
        </encoding>
        <jsp-engine>
            <jsp-work-dir>/home/free2/webapps/jspwork</jsp-work-dir>
        </jsp-engine>
        <logging>
            <access-log>
                <handler>
                    <file-handler>
                        <name>handler1</name>
                        <valid-day>1</valid-day>
                    </file-handler>
                </handler>
            </access-log>
        </logging>
    </context-group>
    <session-cluster>
        <session-routing>false</session-routing>
    </session-cluster>
</web-container>
Posted by 1010
98..Etc/70.JEUS2009. 7. 31. 10:25
반응형
C:\TmaxSoft\JEUS6.0\config\administrator\administrator_servlet_engine1

WEBMain.xml 설정 부분에 웹투비 리스너를 두개등록하여 기동한다.
 

<webtob-listener>            <=== WebtoB와의 연동을 위해서 추가해야 하는 부분입니다.
                <listener-id>webtob1</listener-id>
                <port>9900</port>        <=== WebtoB의 JSVPORT 와 동일해야 합니다.
                <webtob-address>127.0.0.1</webtob-address>     <=== WebtoB의 IP 입니다.
                <registration-id>MyGroup</registration-id>     <=== WebtoB의 SERVER 명과 동일
                <thread-pool>
                    <min>25</min>
                    <max>30</max>
                </thread-pool>
            </webtob-listener>
        </webserver-connection>


 <webtob-listener>            <=== WebtoB와의 연동을 위해서 추가해야 하는 부분입니다.
                <listener-id>webtob1</listener-id>
                <port>9900</port>        <=== WebtoB의 JSVPORT 와 동일해야 합니다.
                <webtob-address>127.0.0.1</webtob-address>     <=== WebtoB의 IP 입니다.
                <registration-id>MyGroup</registration-id>     <=== WebtoB의 SERVER 명과 동일
                <thread-pool>
                    <min>25</min>
                    <max>30</max>
                </thread-pool>
            </webtob-listener>
        </webserver-connection>

Posted by 1010
98..Etc/70.JEUS2009. 7. 29. 10:40
반응형

- 라이센스 교체시 재 컴파일 필요함
  wscfl -i http.m (/jeus/webserver/config/http.m)
jeusadmin -fullversoin : 버전 체크
jeusadmin -licenseinfo : 라이센스 정보
jeusadmin -licensedue : 라이센스 기간 확인

Posted by 1010
98..Etc/70.JEUS2009. 7. 27. 14:30
반응형

제우스 설정 방법 몇 가지 (JEUS 6.0 기반)


이는 티맥스소프트에 AS 요청을 하면 원격으로 작업해주고 알려주는데, 체크시 자주 이용하는 것이라 정리하였다.



*. DB Close 가 정상적이지 않는 부분을 추적할 때 JEUSMain.xml 설정
<invocation-manager-action>Warning</invocation-manager-action>
<!--invocation-manager-action>AutoClose</invocation-manager-action-->

-> Warning 으로 설정하면 로그 파일에 DB Close 가 정상적이지 않는 파일의 이력이 나타남.
-> AutoClose 으로 설정하면 비정상인 소스를 자동 닫는 기능을 수행하나 디버깅이 안됨. 따라서 정상가동전에는 반드시

     Warning 상태로 테스트해야 함.


*. DB Connection 유실 있는 소스를 리눅스 콘솔에서 찾는 방법
[tmax@WEMS WEMS]$ grep "RequestURI" Jeus*20090312*.log
[2009.03.12 17:04:06][0][b168] [container1-42] [MGR-0107] RequestURI : /cewolf
[2009.03.12 17:04:14][0][b168] [container1-22] [MGR-0107] RequestURI : /cewolf
[2009.03.12 17:04:18][0][b168] [container1-32] [MGR-0107] RequestURI : /cewolf
[2009.03.12 17:04:19][0][b168] [container1-33] [MGR-0107] RequestURI : /cewolf
[2009.03.12 17:04:23][0][b168] [container1-26] [MGR-0107] RequestURI : /cewolf
[2009.03.12 17:04:35][0][b168] [container1-33] [MGR-0107] RequestURI : /cewolf
[2009.03.12 17:05:15][0][b168] [container1-30] [MGR-0107] RequestURI : /cewolf
[2009.03.12 17:05:22][0][b168] [container1-36] [MGR-0107] RequestURI : /cewolf

-> RequestURI 라는 예약어를 통해 관련 소스를 찾을 수 있음.


*. DB ConnectionPool 상태 보기
[tmax@WEMS WEMS]$ ja // 제우스 콘솔로 화면 전환
JEUS 6.0 (Fix#4) Jeus Manager Controller
WEMS>dsinfo 혹은 WEMS>dsinfo -i 5 -k 999 // 파라미터 의미: i(internal), k(repeat)


Connection pool information for engine container 'WEMS_container1'

----------------------------------------------------------------------------------
| id |        name | min | max | active | idle | disp | total | wating | working |
----------------------------------------------------------------------------------
|  1 | jdbc/source |   5 |  15 |      15 |    0 |    0 |     15 |   true |    true |
----------------------------------------------------------------------------------

disp : disposable connection, total = active + idle + disp
-> 컨넥션 풀로 설정한 정보를 제공하여 준다. 필요시 JEUSMain.xml에서 갯수를 변경할 수 있음


*. 제우스 쓰레드 상태 보기, 응답속도, 메모리 관련
[tmax@WEMS WEMS]$ ja // 제우스 콘솔로 화면 전환
JEUS 6.0 (Fix#4) Jeus Manager Controller


WEMS>ti

< ContainerName : WEMS_container1 >
-- Thread State [webtob1-hth0(localhost_9900)] --
[webtob1-hth0(localhost:9900)-w00][waiting, wt=84007 ms]
[webtob1-hth0(localhost:9900)-w01][waiting, wt=84004 ms]
[webtob1-hth0(localhost:9900)-w02][waiting, wt=84003 ms]
[webtob1-hth0(localhost:9900)-w03][waiting, wt=84000 ms]
[webtob1-hth0(localhost:9900)-w04][waiting, wt=84000 ms]
[webtob1-hth0(localhost:9900)-w05][waiting, wt=83996 ms]
[webtob1-hth0(localhost:9900)-w06][waiting, wt=83995 ms]
[webtob1-hth0(localhost:9900)-w07][waiting, wt=83993 ms]
[webtob1-hth0(localhost:9900)-w08][active, rt=111992 ms] /aaa/bbb/test.jsp
[webtob1-hth0(localhost:9900)-w09][waiting, wt=83990 ms]
[webtob1-hth0(localhost:9900)-w10][waiting, wt=83989 ms]
[webtob1-hth0(localhost:9900)-w11][waiting, wt=83986 ms]
[webtob1-hth0(localhost:9900)-w12][waiting, wt=83986 ms]
[webtob1-hth0(localhost:9900)-w13][waiting, wt=83882 ms]

-> active 상태가 장시간 지속되는 관련 소스는 반드시 체크되어야 함.


WEMS>st  -r // 요청에 대한 처리시간을 제공
< ContainerName : WEMS_container1 >
< request information(MyGroup/wems) >
   - total requests          : 19
   - total processing time   : 26023 ms
   - average processing time : 1369 ms


WEMS>st -m // 현재 사용중인 JVM 메모리 정보 제공
< ContainerName : WEMS_container1 >
< memory information >
VM Total Memory    = 648740864 Bytes
VM Free Memory     = 510449952 Bytes


*. 제우스 덤프 (AS 요청시 이 정보가 제공하면 빨리 처리될 수 있음.)
-> 아래와 같이 하면 로그 파일에 덤프가 수행됨

 

[tmax@WEMS WEMS]$ ja // 제우스 콘솔로 화면 전환하여 컨테이너의 pid값을 얻음.
JEUS 6.0 (Fix#4) Jeus Manager Controller

WEMS>pidlist
node or container : WEMS, pid : 25195
node or container : WEMS_container1, pid : 25248


[tmax@WEMS WEMS]$ kill -3  25248 // 콘솔상태에서 덤프실행 10초간격 3회 정도

-> 이를 수행하면 로그 파일에 덤프 정보가 수집됨.


*. OutOfMemoryError: PermGen Space 에러가 발생하였을 경우의 JEUSMain.xml 설정
-> Permsize를 조금 크게 하여 가동시킨다. 테스트 운영이나 스트레스 테스트 툴을 이용해 에러가 발생하지

     않는 값으로 최종 설정하면 된다.

<engine-container>
    <name>container1</name>
    <invocation-manager-action>Warning</invocation-manager-action>
    <command-option>
           -Xms512m -Xmx1024m -Djava.awt.headless=true
          -XX:PermSize=512m -XX:MaxPermSize=1024m
    </command-option>
    <sequential-start>true</sequential-start>
    <engine-command>
        <type>servlet</type>
        <name>engine1</name>
    </engine-command>
</engine-container>

Posted by 1010
98..Etc/70.JEUS2009. 7. 10. 19:12
반응형

WebtoB + JEUS + web application

1. WebtoB 설치
1.1 설치파일, 라이센스(license.dat)준비
1.2 라이센스 적용 : webtoB4.1\license\license.dat
2. WebToB 실행
2.1 실행파일생성(wsconfig) --> 환경파일 컴파일 : wscfl -i [환경파일]
2.2 실행 : wsboot --> wsboot -w (handler가 process들을 확인하며 booting->안정적인 booting)
2.3 종료 : wsdown --> wsdown -i (질의를 던지지 않고 바로 down)
2.4 웹서비스 테스트 : http://127.0.0.1:8080/
3. WebToB 환경설정 파일 : sample.m
3.1 가상홍스트 추가하기
*VHOST
vhost1 DOCROOT="D:/TmaxSoft/edu01", HOSTNAME="test.tmax.co.kr",
NODENAME="Impression32", PORT="80"
3.2 윈도우의 hosts 파일에 등록하기
D:\WINDOWS\system32\drivers\etc\hosts 파일에 등록
3.3 환경파일 컴파일 : wscfl -i sample.m
3.4 기동중인 webtob 다운 후 재부팅 : wsdown -i / wsboot
3.5 테스트
NODE절 포트 수정 확인 :
http://127.0.0.1:80/
가상호스트 추가 확인 : http://test.tmax.co.kr:80/
4. WebtoB 관리 툴 : wdadmin
4.1 wi : 웹투비의 기본 정보 출력
4.2 ci : 접속한 클라이언트의 정보 출력
ci -s : 접속한 클라이언트의 수 출력
cfg : 웹투비의 환경설정 내용 확인
cfg -n : 노드 환경설정 내용 확인
si : 웹투비의 서비스 목록 출력
st -v : 웹투비의 서비스 상태 출력
st -p : 웹투비의 프로세스 상태 출력
repeat(r) : 웹투비의 명령을 반복적으로 수행하여 모니터링 효과를 냄
ex) r -i 2 -k 10 si
5. JEUS 설치
5.1 JEUS 설치파일, 라이센스
5.2 라이센스 적용 : D:\TmaxSoft\JEUS5.0\license\license파일적용
6. JEUS 실행
6.1 Two-step 부팅
: 서버실행 - jeus
: 엔진실행 - JEUS의 웹관리자
웹관리자주소 :
http://127.0.0.1:9744/webadmin
포트번호지정 : 기본Base port(9736) + 8
포트번호변경 : bin/jeus.properties.cmd
JEUS/config/vhost.xml 의 포트번호를 변경합니다.
웹관리자 계정 : administrator
패스워드 : jeusadmin
노드선택 --> 제어 --> 부트

6.2 One-step 부팅
: 부트명령(jboot.bat) --> jeus -xml -Uadministrator -Pjeusadmin
: 종료명령(jdown.bat) --> jeusadmin [노드명] -Uadministrator -Pjeusadmin jeusexit

6.3 JEUS 웹서비스 테스트
:
http://127.0.0.1:8088/
7. JEUS의 환경설정 파일
7.1 JEUS\config\JEUSMain.xml : JEUS서버 전체의 환경 설정
7.2 EJBMain.xml : EJB엔진에 대한 환경 설정
7.3 JMSMain.xml : JMS엔진에 대한 환경 설정
7.4 WEBMain.xml : Servlet엔진에 대한 환경 설정
web.xml : 웹의 컨텍스트를 만들때 컨텍스트의 환경설정
7.5 WSMain.xml : WS엔진에 대한 환경 설정
1. JEUS에서 web application 서비스하기
1.1 물리적 Context 생성
C:\tmaxsoft\edu01
|----WEB-INF
web.xml(NODE의 servlet engine에서 가져옴)
1.2 JEUS에 Context 등록
웹관리자 로그인 --> J2EE 어플리케이션 모듈배치 --> 절대경로
--> ~~~~ --> 배치(2단계배치[J2EE어플리케이션모듈], 영구배치[J2EE어플리케이션모듈배치])
1.3 서비스 실행
:테스트를 위한 jsp파일 생성(test.jsp)
:http://127.0.0.1:8088/edu01/test.jsp
8088 : http_listener port
edu01: 배치한 모듈명
test.jsp :
실습) edu02 컨텍스트 생성, 실행 웹 어플리케이션 파일 test02.jsp --> http://127.0.0.1:8088/edu02/test02.jsp
2. JEUS container 관리
2.1 생성 : 서블릿 엔진 생성(리스너ID, 리스너PORT 지정)
2.2 서블릿 엔진 테스트 --> http://127.0.0.1:8089/edu01/test.jsp
3. WebtoB와 JEUS연동하기
3.1 WebtoB 설정 : sample.m 파일에 추가
3.2 JEUS 설정 : 해당 컨테이너의 webtob 리스너 연결 설정
3.3 연동 설정 테스트 --> http://127.0.0.1:80/edu01/test.jsp
4. 실 습
WebtoB의 가상호스트 vhost1 과 JEUS의 container1에 webtob2 리스너 추가, 연동.
http://test.tmax.co.kr:80/edu01/test.jsp
4.1 WebtoB 설정 추가
4.2 JEUS container1에 webtob2 리스너 추가
5. JEUS에서 서블릿 실습
5.1 서블릿 코드 작성 : HelloWorldServlet.java
5.2 컴파일 : jeus.jar 파일 경로 지정후
javac -d . HelloWorldServlet.java
5.3 JEUS에서 실행 --> http://127.0.0.1:8088/edu01/servlets/HelloWorldServlet
web.xml 문서의 WorkServlet 은 /servlets/* 로 매핑되어 있음
1. WAR 파일 생성하기
1.1 패키징하기 : JeusBuilder 사용
- 파일명 : wartest.war
서블릿명 : Hello
서블릿 클래스 : tmax.HelloWorldServlet
URI 패턴지어 : /helloworld
Contextpath(url에서 context호출) : /hello
1.2 JEUS에 패키징한 모듈 배치하기
- JEUS 웹관리자 --> J2EE 어플리케이션 모듈 배치 --> 모듈배치 --> ~~~ --> 배치(2단계 배치, 영구배치)
http://1273.0.0.1:8088/Hello (/Context를 정의, /Context는 모듈에 하나존재)
1.4 실 습
파일명 : wartest2.war
서블릿명 : Hello2
서블릿 클래스 : tmax.HelloWorldServlet
URI 패턴지정 : /helloworld2/
Contextpath : /hello2
<결과확인>
http://127.0.0.1:8088/hello2/Hello2 , http://127.0.0.1:8088/hello2/helloworld2/
2. DB 연동
2.1 DataBase 정보 확인
- 서버 IP : 192.169.10.5
- 접속계정 : oracle/dkzkepal(아카데미)
- sql접속계정 : sqlplus edu01~edu32/edu01~edu32
- SID 명 : ORA10G
- 테이블 생성 : TmaxTest
create table TmaxTest ( name varchar(20), address varchar(20) );
- 데이터 입력 :
Insert into TmaxTest values('장동건','서울'); Insert into TmaxTest values('강호동','부산');
- commit;

2.2 드라이버 준비 및 JEUS 서버 등록
- JDBC 드라이버 : ojdbc14.zip
- 오라클 JDBC 드라이버 다운로드 사이트 :
http://www.oracle.com/global/kr
- JEUS 등록 : D:\TmaxSoft\JEUS5.0\lib\datasource\ojdbc14.jar
2.3 DataSource 설정
- JEUS 웹관리자 -> JEUS 매니저 리소스 -> JDBC -> 새 JDBC 데이터 소스 생성
2.4 실 습
로그인 실행 테스트 : MVC
login.jsp (presentation 로직 : View)
loginCheck.jsp (business 로직 : Control)
TmaxLogin (data : Model)
아이디 : tmax 비밀번호 : 1234
***************************************************************************************************************
*** webToB
***************************************************************************************************************
*VHOST
vhost11 DOCROOT="c:/xxx/webapps/test/",
NODENAME = "web1",
HOSTNAME = "test.com",
PORT = "80"
vhost12 DOCROOT="c:/xxx/webapps/test/",
NODENAME = "web1",
HOSTNAME = "www.test.com",
PORT = "80"

* SVRGROUP
vhost11g NODENAME = "web1", SVRTYPE = JSV,Vhostname="vhost11"
vhost12g NODENAME = "web1", SVRTYPE = JSV,Vhostname="vhost12"

* SERVER
test SVGNAME = vhost11g, MinProc = 20, MaxProc = 20, HttpInBufSize=0
wwwtest SVGNAME = vhost12g, MinProc = 20, MaxProc = 20, HttpInBufSize=0

***************************************************************************************************************
*** JEUS
***************************************************************************************************************
container.xml 에 두개의 contextgroup을 생성하여 각각의 RegistrationID 를 test, wwwtest 로 하여 연동
***************************************************************************************************************
웹모듈(application) 추가하기
1) %JEUS_HOME%\config\노드명\JEUSMain.xml 수정
- 아래내용 추가
<application>
<absolute-path>폴더위치</absolute-path>
<name>애플리케이션명</name>
<path>\</path>
<deployment-type>COMPONENT</deployment-type>
<web-component/>
<deployment-target>
<target>
<engine-container-name>컨테이너명</engine-container-name>
<web-context-group>
<name>MyGroup</name>
</web-context-group>
</target>
</deployment-target>
<classloading>ISOLATED</classloading>
<class-ftp-unit>JAR</class-ftp-unit>
</application>
2) JEUS 재시작
3) 해당폴더\WEB-INF/web.xml 생성 확인
4) 해당폴더\WEB-INF/jeus-web-dd.xml 생성 확인
<?xml version="1.0" encoding="UTF-8"?>
<jeus-web-dd xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
<context-path>/</context-path>
<enable-jsp>true</enable-jsp>
<auto-reload>
<enable-reload>false</enable-reload>
<check-on-demand>false</check-on-demand>
</auto-reload>
<max-instance-pool-size>-1</max-instance-pool-size>
<url-rewriting>false</url-rewriting>
<enable-default-login>false</enable-default-login>
<webinf-first>false</webinf-first>
<jndi-properties>
<local-bindings>false</local-bindings>
</jndi-properties>
</jeus-web-dd>
============================================================================================================
JDBC
*Class Loading : Class.forName();
->class를 사용하는 방법

*Connection 생성방법 2가지
-DBCP를 사용안함 (Driver class를 로드하여 DB에 접근)
public Connection connectDbms() {
Connection con = null;
Properties env = new Properties(); //사용자 환경변수 객체

try {
env.load(new FileInputStream("d:\\java\\day6\\db.properties"));
Class.forName(env.getProperty("driver")); // JDBC 드라이버용 클래스 로드
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null;
}catch (FileNotFoundException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}

// 1. DB Connection 얻기
String url = env.getProperty("url");
//"jdbc:oracle:thin:@127.0.0.1:1521:ORCL"; // JDBC 전용 URL 형식으로 기술
// thin = type4(순수java)
String user = env.getProperty("user"); //"scott";
String password = env.getProperty("password"); //"tiger";

try {
con = java.sql.DriverManager.getConnection(url, user, password);
System.out.println("****** Connect to DBMS! *******");
} catch (SQLException e) {
e.printStackTrace();
return null;
}
return con;
}
-DBCP 사용 (server.xml, web.xml에 Container에 대한 코드 추가)
try{
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
ds = (DataSource)envCtx.lookup("jdbc/EmployeeDB");
}catch(NamingException ne){
ne.printStackTrace();
}
1. Servlet의 init()메소드에서 DataSource를 생성하여 인자로 넘겨 connection 가져오기
-Servlet 마다 DataSource 생성
2. ServletContextListener에서 한번만 생성하여 인자로 넘김
-DataSource 한번만 생성해도 됨(Servlet마다 DataSource를 생성하지 않음)
3. ServletContextListener에서 생성한 DataSource를 Single tone pattern으로 사용
-class에서도 single.getAttribute()로 DataSource를 얻어 올 수 있음

*statement
상속관계
Statement <---------- PreparedStatement <------------- CallableStatement
(가장 보편적인 처리) (binding 변수를 통해 빠를 sql처리) (가장 특화 function, procedure호출)
->Statement
String sql = "select age from test1 where id='syh1011'";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);

->PreparedStatement
String sql = "select age from test1 where ?=?";
PreparedStatement pstmt = con.prepareStatementStatement(sql);
pstmt.setString(1, "id");
pstmt.setString(2,"syh1011");
ResultSet rs = pstmt.executeQuery();
->CallableStatement
String sql = "select anem from salary";
PreparedStatement pstmt = conpreparedStatement(sql);
CallableStatement sctmt = con.prepareCall("{call adjust(?,?)}");
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
cstmt.setString(1, rs.getString("name"));
cstmt.setFloat(2, (float)0.05);
cstmt.executeUpdate();
}
executeQeury(String sql) : SQL문이 select일 경우
executeUpdate(String sql): SQL문이 insert, update, delete문 등일 경우
execute(String sql) : SQL문을 알지 못할 경우
->장점, 단점
*ResultSet, getXXX()로 Column값 얻기, Type별로 다른 method사용
getXXX(int columnindex) : columnIndex의 값을 XXX타입으로 반환
getXXX(String columnName): columnName의 값을 XXX타입으로 반환
*Transaction 처리
Transaction의 4가지 특성(ACID)
*원자성(Atomicity)
*일관성(Consistency)
*고립성(Isolation)
*지속성(Durability)
con.setAutoCommit(false); ->true : transaction을 시작하지 않겠다. ->false: transaction을 시작하겠다.
setAutoCommit(false)와 commit(), rollback()사이의 operation들에 대한 transaction 처리
-> con.commit(); -> con.rollback();
***********************************************************************************************************
#####
##### DOMAIN 절
#####
# 독립적인 WebtoB 시스템의 전반적인 환경 설정을 할 수 있다.
*DOMAIN
# 도메인 네임은 string 형식으로 31자까지 사용 가능.
# 다른 절들의 string 항목도 이와 동일하다.
webtob1

#####
##### NODE 절
#####
# WebtoB를 이루는 각 Node들에 대한 구체적인 환경 설정을 할 수 있다.
# 필수 항목으로 WebtobDir, ShmKey, DocRoot 항목을 설정해야 있다.
*NODE
# 실제 등록된 호스트의 이름을 말하며, UNIX의 경우 "uname -n" 명령으로 각 Host의 이름을 확인할 수 있다.
# Node명은 반드시 UNIX의 경우 "/etc/hosts"(Windows의 경우 C:\WINNT\system32\drivers\etc) 파일에 등록되어 있어야 한다.
# 하나의 Domain은 하나 이상의 Node로 이루어지므로, NODE절에는 최소한 하나 이상의 Node 이름이 정의되어야 한다.
WebServer
# WebtoB가 설치되어 있는 Home Directory 의 절대 경로명이다.
# 환경변수로 정의되는 WEBTOBDIR 과 동일한 값으로 설정하면 된다.
WebtobDir = "/data2/wbqam/webtob",
# Shared Memory Segment를 가리키는 값이다.
# 32768 ~ 262143 범위 내에서 다른 업무에 사용되는 키값과 충돌이 나지 않게 Shared Memory의 Key값을 설정 하면 된다.
ShmKey = 78100,
# WebtoB가 웹을 통해 서비스하는 모든 문서를 포함하는 Root Directory 의 절대 경로를 설정한다.
DocRoot="/data2/wbqam/webtob/docs",
# HTTP Request Handler) Process의 개수를 설정한다.
# Hth하나당 약 800개 이상의 Client를 수용할 수 있다.
# Default Number 설정은 1 이며, 최대 20개 까지 지정할 수 있다.
Hth = 2,
# WebtoB가 Listen하는 Port를 지정한다.
# 일반적으로 Web Server는 80 Port 이용하므로 설정하지 않을경우 default 값으로 80으로 설정된다.
# 최대 100개의 포트를 동시에 지정하여 사용할 수도 있다.
# Listen 항목과 동시에 운영할 수 없으며, Port보다 Listen항목에서 지정되는 Port가 우선순위가 높아
# 동시에 지정하면 Port항목은 무시 된다.
Port = "8100,8200",
##### User, Group 설정
# WebtoB에서 시스템의 보안을 위하여 WebtoB의 실제 실행 Process에 대한 권한 설정을 할 수 있다.
# 설정한 권한으로 Process가 실행되기 위해서는 반드시 root 권한으로 WebtoB를 실행해야 한다.
# 설정된 Group의 권한으로 WebtoB가 요구를 수행하게 된다.
# Client 요구를 수행하기 위하여 Group 설정을 권장한다.
# Group 설정은 Unix계열의 OS에서만 지원한다.
Group = "nobody",
# 설정된 User의 권한으로 WebtoB가 요구를 수행하게 된다.
# Client 요구를 수행하기 위하여 User 설정을 권장한다.
# User 설정은 Unix계열의 OS에서만 지원한다.
User = "nobody",
# 관리자의 정보를 나타낸다.
# 관리자에게 연락할 수 있는 e-mail address를 설정할 수 있다.
Admin = "wbqam@tmax.co.kr",
# Http Response Header의 host name field에 기록될 값을 설정할 수 있다.
HostName = "www.tmax.co.kr",
# 해당 서버의 HostName를 적어 준다.
# 특별히 $(NODENAME)이라고 적어주면, 자동으로 해당 서버의 HostName가 적용된다.
# 한글 노드명을 사용하거나 긴 노드명을 사용할 경우 NodeName 을 설정한다.
NodeName = "$(NODENAME)"
# MultiNode 설정시 각 Node들 간의 연결 Port 번호를 지정한다.
# MultiNode 설정시 반드시 지정해 주어야 한다.
# default 설정은 7777 번이다.
# NodePort = 7777,
# WebtoB와 Servlet 수행 Server간의 연결 Port 번호를 지정한다.
# default 설정은 9999 번이다.
JSVPort = 9100,
# Multi Node 구성시 Node 관리 차원에서 Node간 통신을 위한 Port번호를 지정한다.
# 위의 NodePort와는 달리 이것은 관리 Process 중 하나인 wsracd Daemon에서 사용하는 Port번호이다.
# default 설정은 3333 번이다.
RacPort = 4455,
# WebtoB는 Server 내부 Caching의 한 Entry의 크기로서 기본단위는 Kbyte이다.
# default size는 128 Kbyte 이다.
CacheSize = 128,
# Cache의 총 Hashing Key 엔트리 개수를 설정한다.
# default 개수는 128개 이다.
CacheEntry = 256,
# HTML file에 대한 cache refresh time을 설정한다.
# default 설정은 0 second 이다.
CacheRefreshHtml = 60,
# DirIndex에 대한 cache refresh time을 설정한다.
# default 설정은 0 second 이다.
CacheRefreshDir = 60,
# 사용자가 웹사이트에 접속한 후, 다른 웹페이지를 읽어 들이기 위해 곧 다시 접속을 시도 할 경우
# 불필요한 시간 지연이 없도록 하려면 이 항목을 지정함으로써 접속을 단절하지 않고 유지할 수 있다.
KeepAlive = Y,
# 커넥션 설정후 일정 개수의 요구는 커넥션을 유지한 상태로 서비스를 하고 커넥션을 끊도록 하는데,
# 커넥션을 끊기 전에 들어주는 요구의 개수를 지정한다.
# default 설정은 9999 이다.
KeepAliveMax = 10,
# 하나의 Client가 불필요하게 커넥션을 오래 잡고 있는 경우를 막기 위해
# 다음 Request 까지 일정 시간 이상이 되면 커넥션을 끊을 수 있도록 설정할 수 있다.
# default 설정은 60 second 이다.
KeepAliveTimeout = 30,
# 사용자의 최대 접속시간을 지정한다.
# default 설정은 300 second 이다.
Timeout = 100,
# WebtoB를 통해 사용자별로 동시에 서비스 하려는 경우 설정한다.
# 값이 설정이 되면 각 사용자의 directory를 찾아서 서비스 한다.
UserDir = "public_html",
# WebtoB를 통해 응용 프로그램을 바로 호출하는 경우 해당 프로그램이 위치할 디렉토리를 설정한다.
# 경로명은 절대 경로와 WEBTOBDIR을 기준으로 한 상대 경로를 사용할 수 있다.
AppDir = "/data2/wbqam/webtob/ap",
##### Log Directory
# WebtoB에서는 기본적으로 Log 정보를 남기기 위하여 설정한다.
# 환경파일에 따로 설정하지 않을경우 WEBTOBDIR/log 디렉토리에 기록이 된다.
# 로그가 기록될 디렉토리가 없을경우 booting시 에러가 나므로, 실제 존재하는 디렉토리여야 한다.
# 경로명은 절대 경로와 WEBTOBDIR을 기준으로 한 상대 경로를 사용할 수 있다.
# 시스템 메시지가 기록될 Directory의 경로명을 설정한다.
# Default Path는 (WEBTOBDIR)/log/syslog 이다.
SysLogDir = "/data2/wbqam/webtob/log/syslog",
# 사용자 메시지가 기록될 Directory의 경로명을 설정한다.
UsrLogDir = "/data2/wbqam/webtob/log/usrlog",
# Service Directory로 요청이 올대 기본적으로 서비스되는 파일 이름을 설정한다.
# 기본 설정은 index.html 이다.
IndexName = "indexname.html",
# Service Directory에 요구를 보낼 때의 동작을 지정한다.
# Options에 지정할수 있는 서비스와 기능들을 아래와 같다.
# Service: HTML, CGI, SSI, PHP, JSV
# Function: INDEX, INCLUDE
# 모든 기능을 이용하려면 "+ALL", 모든 기능을 이용하지 않으려면 "-ALL"을 설정할 수 있다.
Options = "+Index",
# Client가 보내는 Request Method에 대한 정의를 할 수 있다.
# HEAD, GET, POST, OPTIONS 등을 설정을 할 수 있으며, 사용하고 싶지 않을경우 "-Option" 으로 설정하면 된다.
# 참고로 HTTP Method CONNECT, DELETE, GET, HEAD, OPTIONS, POST, PUT, TRACE 등이 있다.
Method = "GET,POST,HEAD,-OPTIONS",
# 여러개의 IP Address를 가진 Server에서 자신이 원하는 IP로만 서비스 하기를 원할때 지정한다.
# 여러개의 아이피와 포트를 지정할 수도 있다.
# Port항목과 Listen 항목을 동시에 지정하는 경우 Port에 지정한 Port는 무시된다.
# Listen="192.168.1.43:8300",
# DIRINDEX절에서 설정하는 디렉토리 인덱스의 이름을 적어준다.
DirIndex = "diridx_def"
# 접속 Client가 사용 언어를 지정하지 않았을 경우
# Server쪽에서 지정된 언어 순서대로 Multiview request 등의 처리가 이루어지도록 한다.
LanguagePrio = "kr",
# LOGGING절에서 설정하는 Logging Name을 설정하며, 해당 설정에 해당하는 Log를 남기게 되는 것이다.
Logging = "log1",
# LOGGING절에서 설정하는 Logging Name을 설정하며, 해당 설정에 따라 Error Log를 남기게 된다.
ErrorLog = "log2",
# WebtoB에서 특정 정보를 읽어 들일 필요가 있는 경우 이용된다.
# EnvFile = "WebtoB.env",
# WebtoB에서 SSL을 이용할 때 Y 로 설정한다.
# default 설정은 N 이다.
# SslFlag = Y,
# SslFlag = Y 상태일때 적용이 되며, SSL절에 설정한 Ssl Name를 지정한다.
# SSLNAME = "ssl_def",
# 서버 프로세스에 속한 노드의 최대 동시 접속자 수를 설정한다.
MaxUser = 4000,
# WebtoB 내부 프로세스의 접근권한을 설정한다.
# Default 설정은 0700 이다.
# IpcPerm = 0744,
# 접속을 기다리는 큐(queue)의 길이를 제한하는 것으로,
# 서버가 대량의 접속 시도를 한꺼번에 날려주는 TCP SYN해킹을 당하고 있다면 유용하게 사용 될수 있을 것이다.
# default 설정은 511 이다.
ListenBacklog = 100,
# TCP 전송 Buffer의 크기를 설정하는 것으로, 이 항목을 이용하면 특정한 환경에서 동작 속도를 향상시킬 수 있다.
# default 설정은 0이며, 0의 값은 OS default값을 사용함을 의미한다.
SendBufferSize = 4096,
# 클라이언트의 요청시 HTTP 프로토콜을 통해 서버가 제공할 수 있는 Request Body 크기를 바이트 단위로 정의하는 것으로,
# 0의 값은 크기에 제한이 없음을 의미한다.
# default 설정은 0 bytes 이다.
LimitRequestBody = 20000,
# 클라이언트의 요청시 허용되는 HTTP Request header field의 수를 설정한다.
# 0의 값은 제한이 없음을 의미한다.
# default 설정은 100 이다.
LimitRequestFields = 20,
# 클라이언트의 요청시 허용되는 각 HTTP Request header field의 크기를 설정한다.
# 최대 허용되는 값은 8190이다.
# default 설정은 8190 bytes 이다.
LimitRequestFieldSize = 300,
# 클라이언트의 요청시 허용되는 HTTP Request line의 최대 크기를 설정한다.
# 최대 허용되는 값은 8190이다.
# default 설정은 8190 이다.
LimitRequestLine = 4000,
# HTTP 응답 헤더의 Server에 관한 정보를 어떻게 다룰지 결정한다.
# "Off", "Prod[uctOnly]", "Min[imal]", "OS", "Full", "Custom=xxx/x.x" 등을 설정할 수 있다.
ServerTokens = "Minimal",
# HTTP 요청으로부터 해당 Server와 Service를 결정할때, URI절과 EXT절의 우선순위를 결정한다.
# Vhost절에 이 항목이 설정되지 않은 경우는 Node절에 설정된 값이나 기본값을 Vhost가 따르게 된다.
# default 설정은 "uri,ext" 이다.
ServiceOrder = "ext,uri",
# HTTP header의 Content-Type에 character set 설정이 없는 Request에 응답에 추가될 character set의 이름을 설정한다.
# "On"(ISO-8859-1), "Off"(설정안함), "_charset_"(사용자 기술) 중 하나를 설정할 수 있다.
# 여러 절에서 적용되는 우선 순위는 Node < Vhost < SvrGroup < Directory 순이다.
DefaultCharset = "Off",
# MIME-Type을 결정할 수 없는 문서의 Default Content-Type을 설정한다.
# Default Content-Type은 SvrGroup, Vhost, Node절의 순으로 결정된다
DefaultMimetype = "text/html",
# Web Server에서 내부 프로세스간 IPC통신을 하기 위해서 기본적으로 특정 포트(6666)를 사용하는데,
# IPCBasePort항목을 통해 해당 포트를 변경할 수 있다.
# 현재 Windows에서만 지원된다. (UNIX의 경우 PIPE통신)
# default 설정은 6666 이다.
# IpcBasePort = 6667,
# EXPIRES절의 설정한 Expires이름을 설정한다.
Expires = "exp11, exp12, expdef1",
# TCPGW 절에 설정한 tcpgw 이름을 설정한다.
TcpGW = "tcpgw_full",
# ERRORDOCUMENT절에 설정한 ErrorDocument 이름을 설정한다.
ErrorDocument = "404",
# WebtoB 내부 프로세스 통신을 위한 socket생성 디렉토리를 설정한다.
# default 설정은 $WEBTOBDIR/path 이다.
PathDir="/data2/wbqam/webtob/path",
##### 멀티노드 구성시 아래와 같이 추가적으로 노드를 정의한다.
#tmaxi1
# WEBTOBDIR="/data/wbqam/webtob",
# SHMKEY = 78100,
# DOCROOT="/data/wbqam/webtob/docs",
# APPDIR="/data/wbqam/webtob/ap",
# PORT = "8100",
# HTH = 2,
# LOGGING = "log5",
# ERRORLOG = "log6",
# HostName = "www.tmax.co.kr",
# RACPORT = 4455,
# NodePort = 7787
**********************************************************************************************************
1. WebToB의 가상호스트 설정
1.1 환경설정파일(sample.m)을 추가, 컴파일
*VHOST
vhost1 HostName="test.tmax.co.kr",
DOCROOT="C:/TmaxSoft/edu02", # 웹서비스 파일 위치 지정
NODENAME="respect04",
PORT="80", # URL 이름이 같은 경우 포스번호를 다르게 설정해야 함. 현재는 호스트네이임이 다르므로 포스번호가 같아도 상관없다
IndexName="test.html", # Wellcome page 설정
KeepAlive=Y, # KeepAlive와 KeepAliveTimeout은 같이 사용해야 함(set 구성)
KeepAliveTimeout=30

1.2 윈도우 hosts 파일에 가상호스트 설정 (실제 서비스할 경우 DNS서버에 추가)
(C:\WINDOWS\system32\drivers\etc\hosts)
추가 => 127.0.0.1 test.tmax.co.kr
1.3 기동 후 테스트
1) sample.m 컴파일(wscfl -i sample.m)
2) ws 재기동
3) C:/TmaxSoft/edu02에 test.html 추가
4) 웹에서 test.html 확인 url=http://test.tmax.co.kr
# 알아둡시다
- sample.m에서 정의된 *NODE는 localhost(127.0.0.1)이다.
- sample.m에서 정의되지 않은 기본설정 확인은 wsadmin에서 cfg명령어로 확인한다
cfg -n : Node 환경설정
cfg -vh : vhost 환경설정 (sample.m에 *VHOST가 정의 되었을 때만 사용)
- 기본설정을 변경할 경우 cfg에서 보여진 명령어를 sample.m에 재정의한다
- DOCROOT의 디렉토리 구분은 ''이 아니라 '/'로 구분한다
2. WebToB의 가상호스트와 JEUS연동설정
2.1 가상호스트를 인식 시키기 위한 WebToB설정
sample.m에 정의
*SVRGROUP
v_jsvg NODENAME = "respect04", SVRTYPE = JSV, VHOSTNAME="vhost1" #가상호스트에서 인식
*SERVER #컨테이너 그룹명과 연동정의 및 몇개의 프로세스 사용할 것인가 정의
v_MyGroup SVGNAME = v_jsvg, MinProc = 10, MaxProc = 20 # 가상호스트 MyGroup
2.2 JEUS 설정
2.2.1 웹관리자 이용 시
1) 새 웹 리스너 생성
경로 : 서블릿엔진 - MyGroup - 웹리스너
2) 설정
- Listener Id : alias 명
- PORT : 기존 webtob 포트번호와 다르게 설정
- 스레드풀 : max, min은 sample.m *SERVER에서 정의한 내용과 동일하게 처리
- Webtob Address : 해당 Listener와 연결되는 WebtoB서버의 IP어드레스
- Registration Id : sample.m *SERVER에서 정의한 그룹ID
- Webtob Home : C:\TmaxSoft\WebtoB4.1 => webtob가 설치되어 있는 home 디렉토리
2.2.2 서블릿 WEBMain.xml 정의
<webtob-listener>
<listener-id>v_webtob1</listener-id>
<port>9901</port>
<thread-pool>
<min>10</min>
<max>20</max>
</thread-pool>
<scheme>http</scheme>
<registration-id>v_MyGroup</registration-id>
<webtob-home>C:\TmaxSoft\WebtoB4.1</webtob-home>
</webtob-listener>

3. 컨테이너 추가 (웹관리자) 후 WebToB 연동
3.1 새 엔진 컨테이너 생성
- Name : container3
- ID, BasePort
- 서블릿 엔진 : engine2
- 리스너 ID/서버 채널 이름 : http2 (#http 리스너를 반드시 추가하세요.)
- 리스너/서버 채널 포트 : 8087
3.2 새 어플리케이션 모듈 배치 - 모듈 선택
- 2단계 배치
- 영구배치는 J2EE 어플리케이션 모듈 배치에서 영구배치를 클릭 시
에디터아이콘을 선택하여 영구 모듈 디플로이 컨테이너대상을 설정
3.3 추가한 컨테인너 서블릿 WEBMain.xml 정의
<?xml version="1.0" encoding="UTF-8"?>
<web-container xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
<context-group>
<group-name>MyGroup</group-name>
<webserver-connection>
<http-listener>
<listener-id>http2</listener-id>
<port>8087</port>
<output-buffer-size>8192</output-buffer-size>
<thread-pool>
<min>10</min>
<max>20</max>
</thread-pool>
</http-listener>
<webtob-listener>
<listener-id>v_webtob1</listener-id>
<port>9901</port>
<thread-pool>
<min>10</min>
<max>20</max>
</thread-pool>
<scheme>http</scheme>
<registration-id>v_MyGroup</registration-id>
<webtob-home>C:\TmaxSoft\WebtoB4.1</webtob-home>
</webtob-listener>
</webserver-connection>
</context-group>
</web-container>

4. 서블릿 작성/실행하기
4.1 HelloWorldServlet.java 작성
==============================================================================
package tmax;
import! java.io.*;
import! javax.servlet.*;
import! javax.servlet.http.*;
public class HelloWorldServlet extends HttpServlet
{
protected void doGet(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException,
java.io.IOException {
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Hellow World Sample</title>");
out.println("</head>");
out.println("<body>");
out.println("<center><h1>Hello World!!!</h1></center>");
out.println("</body>");
out.println("</html>");
out.close();
}
}
================================================================================
4.2 컴파일
C:\TmaxSoft\edu01\WEB-INF\classes>javac -d . H*.java
4.3 실행
http://127.0.0.1:8088/edu01/servlets/tmax/HelloWorldServlet

4.4. web.xml에 서블릿명 추가(HelloWorld)
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>tmax.HelloWorldServlet</servlet-class>
<load-on-startup>-1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/helloworld/</url-pattern>
</servlet-mapping>
4.5 실행
http://127.0.0.1:8088/edu01/HelloWorld

5. WebToB에서 서블릿을 실행하기 위한 url 설정
5.1 sample.m 파일 수정
*URI
uri2 Uri = "/edu01/", Svrtype = JSV #url에 edu01이 들어간 문자는 서블릿을 실행하게 한다
5.2 실행
Posted by 1010
98..Etc/70.JEUS2009. 7. 10. 18:35
반응형




1. WebtoB윈도우 서비스 등록

명령프롬프트 창에서
cd %WEBTOB_HOME%\bin
srvinstall



2. WebtoB윈도우 서비스 제거
먼저 로드되어 있는 webtob를 down한다.
srvremove



3. jeus윈도우 서비스 등록
%JEUS_HOME%\bin\jeus.ini 파일의 내용을 확인한 후

명령프롬프트 창에서
cd %JEUS_HOME%\bin
svcinstall jeus.ini administrator PASSWORD -hotspot



4. jeus윈도우 서비스 제거
먼저 로드되어 있는 jeus를 down한다.
svcremove -list 해서 먼저 현재 운영중인 서비스를 확인한 다음
svcremove jeus(:서비스명)


hanho9@gmail.com

Posted by 1010
98..Etc/70.JEUS2009. 7. 10. 18:25
반응형
- Windows 에서 WebtoB, JEUS의 서비스 등록 -
 
 
- jboot.bat(Jeus Start 배치)
  C:\>jeus -xml -Uadministrator  -P3gcorecom
 
- jdown.bat(Jeus Shutdown 배치)
  C:\>jeusadmin  'hostname'  jeusexit  -Uadministrator  -P3gcorecom
 
 
<WebtoB 등록하기>
 
1.      서비스 등록을 위한 환경
 
Windows의 Edition별 서비스 등록 가능 여부
 
WebtoB 3.1.5
WebtoB 3.1.6
Windows NT
O
O
Windows 2000
O
O
Windows XP
O
O
Windows 2003
O
O
 
             WebtoB의 버젼별 서비스 등록을 위한 파일
WebtoB 3.1.5
WebtoB 3.1.6
Description
srvinstall.exe
svcinstall.exe
서비스 등록(설치)
srvloader.exe
svcloader.exe
서비스에서 WebtoB 구동
srvremove.exe
svcremove.exe
서비스 제거
 
2.      Windows Platform에서 WebtoB의 서비스 등록
 
1. WebtoB 설치
 - 인스톨 과정을 거쳐 설치
 
2. System 환경변수에 WEBTOBDIR 추가
 - 시스템 속성 > 고급 > 환경변수 > 시스템 변수 에 WebtoB Home Directory 추가
 
3. > cd %WEBTOBDIR%\bin
 - WebtoB 의 실행파일들이 있는 디렉토리로 이동
 
4. > svcinstall.exe %WEBTOBDIR%
 - Windows 에서 WebtoB의 서비스 등록
 
3.      Windows Platform에서 WebtoB의 서비스 등록 확인
 
1. Process 확인
 - 작업관리자에서 wsm, hth, htl 프로제스가 보인다.
 
2. Port 확인
 - netstat –na 에서 80 Port에서 LISTENING하는지 확인
Proto  Local Address          Foreign Address        State
TCP    0.0.0.0:80                  0.0.0.0:0                 LISTENING
 
3. wsadmin tool 확인
 - wsadmin으로 console tool에 들어가서 st –s 명령어로 서비스가 정상적으로 등록되어
 있는지 확인
 
4.      Windows Platform에서 WebtoB의 서비스 제거
 
1. > cd %WEBTOBDIR%\bin
 - WebtoB 실행 파일들이 있는 디렉토리로 이동
 
2. > svcremove.exe
 - Windows 에서 WebtoB 서비스 제거
 
<JEUS 등록하기>
 
1.      서비스 등록을 위한 환경
 
Windows의 Edition별 서비스 등록 가능 여부
 
JEUS 4.2
Windows NT
O
Windows 2000
O
Windows XP
O
Windows 2003
O
 
             WebtoB의 버젼별 서비스 등록을 위한 파일
JEUS 4.2
Description
svcinstall.exe
서비스 등록(설치)
jeusloader.exe
서비스에서 WebtoB 구동
svcremove.exe
서비스 제거
 
2.      Windows Platform에서 JEUS의 서비스 등록
 
1. JEUS 설치
 - 인스톨 과정을 거쳐 설치
 
2. System 환경변수에 JDK_HOME 추가
 - 시스템 속성 > 고급 > 환경변수 > 시스템 변수 에 J2SDK Home Directory 추가
 
3. > cd %JEUS_HOME%\bin
 - JEUS 의 실행파일들이 있는 디렉토리로 이동
 
4. >svcinstall.exe  administrator    jeusadmin      -h
                              <username>    <password>
 - Windows 에서 JEUS의 서비스 등록
 
3.      Windows Platform에서 JEUS의 서비스 등록 확인
 
1. Process 확인
 - 작업관리자에서 java 프로제스가 2개 보여야 한다.
 
2. Port 확인
 - netstat –na 에서 BASE Port에서 LISTENING하는지 확인 (default : 9736)
Proto  Local Address          Foreign Address        State
TCP    0.0.0.0:9736            0.0.0.0:0              LISTENING
 
3. jeusadmin tool 확인
 - jeusadmin으로 console tool에 들어가서 allenglist 명령어로 서비스가 정상적으로 등록되어
 있는지 확인
 
4.      Windows Platform에서 JEUS의 서비스 제거
 
1. > cd %JEUS_HOME%\bin
 - JEUS 실행 파일들이 있는 디렉토리로 이동
 
2. > svcremove.exe
 - Windows 에서 JEUS 서비스 제거
Posted by 1010
98..Etc/70.JEUS2009. 7. 9. 21:00
반응형



윈도우에서 로그를 자동으로 백업하기 위해 ANT를 사용하여

백업로직을 만들었습니다.

 

비교적 간단하게 작업이 되더군요.

 

작업순서는

 

1> 백업내역을 저장할 디렉토리 생성

 

2> 백업할 로그중 당일 분을 제외한 나머지를 JAR로 압축

    (매월 1일에 돌리면, 전월 분을 모두 백업할 수 있겠네요.)

    ----> 윈도우에서는 제어판->예약된 작업을 클릭하신후 작업을 추가하시면 됩니다.

             (매월 1일로 해야 겠지요)

 

3> 백업한 로그의 원본을 삭제

 

의 흐름으로 진행됩니다.

 

실행은 ant -buildfile logbackup.xml 로 하시면 됩니다.

 

!!!! 주의할 점은 그냥 돌리시면 로그가 삭제되므로 조심하셔야 합니다. !!!!!

 

※ 네이버 블로그의 파일첨부 로직으로 인해 dolbyman이 붙어 있으니

    dolbyman은 삭제하신 후 돌리시기 바랍니다.

Posted by 1010
98..Etc/70.JEUS2009. 7. 9. 20:29
반응형

Eclipse Jeus서버간의 디버깅

Posted by 1010
98..Etc/70.JEUS2009. 7. 9. 15:17
반응형

JEUS (Java Enterprise User Solution) 인터넷으로 각광 받고 있는 Java 기반으로 솔루션으로, 환경에서 어플리케이션을 운용하는 필요한 각종 서비스들을 제공해 주는 어플리케이션 서버이다.

JEUS 어플리케이션을 개발하고 실행할 있는 플랫폼 역할을 하면서, 트랜잭션 관리, 세션 유지, 부하 분산 다양한 기능을 제공할 뿐만 아니라, 계층화된 구조로 성과 기능 확장성이 우수해 비즈니스 로직을 손쉽고 효과적으로 구현할 있게 한다.

 

 

2.   JEUS 디렉토리 구조

2.1 전체 디렉토리 구조

JEUS 최초 설치하면 설치 지정된 디렉토리(JEUS_HOME) 다음과 같은 디렉토리가 생긴다.

 

 

각각의 디렉토리에 대한 설명은 다음에 계속한다.

 

2.2 bin 디렉토리

JEUS 실행, 모니터링 JEUS 운영에 관련된 스크립트 파일이 존재한다. Windows 경우에는 batch파일로 있으며, UNIX 경우에는 shell script파일로 되어 있다. 여기 있는 파일들 jeus.properties.bat(UNIX 경우: jeus.properties) 있는데 파일에는 JEUS실행에 필요한 각종 환경변수들이 설정되어 있다. 이를 제외한 나머지 실행파일들은 실행전에 항상 파일을 호출하여 환경변수를 적용하게 되어 있으므로 환경 변수의 수정이 필요한 경우에는 파일의 내용을 수정하면 된다.

 

2.3 client 디렉토리

EJB 등을 사용할 경우 client에서 사용하게 client모듈 등이 들어가게 되는 디렉토리이다. 일반적인 경우 사용하지 않는다.

 

2.4 config 디렉토리

운영시 사용하게 되는 모든 설정 파일들이 들어있는 디렉토리이다. 하위 디렉토리로 dtds디렉토리는 JEUS설정 파일의 모든 xml 대한 구조(dtd) 가지고 있는 디렉토리이고, hostname으로 되어 있는 디렉토리에 현재 운영과 관련된 모든 설정을 가지고 있다.

 

2.5 lib 디렉토리

디렉토리는 운영과 관련된 library들이 들어 있다. 아래에는 다음과 같이 3개의 디렉토리가 있다.

-          application: 개발시 필요한 library들을 넣어두는 디렉토리이다. Jar/zip형태의 파일을 넣어도 되고, package형태로 풀어놓아도 된다.

-          datasource: 디렉토리는 JDBC 혹은 각종 connector 위한 library 넣어두는 디렉토리이다. Jar/zip형태의 파일만 인식한다.

-          system: 디렉토리는 JEUS 엔진과 관련된 library들이 들어 있다.

위의 디렉토리들 개발 혹은 운영 필요한 라이브러리들은 application/datasource 넣어두면 된다. System 경우는 JEUS에서 사용하는 곳이므로 되도록이면 다른 파일들을 넣지 않는 것이 좋다.

 

2.6 license 디렉토리

라이센스가 들어가는 디렉토리이다. 최초 설치시(JEUS 4.2부터) 3개월간 사용할 있는 데모라이센스가 들어가 있다. 라이센스 파일은 license이다.

 

2.7 logs 디렉토리

JEUS 운영 남게 되는 각종 로그 파일이 쌓이게 되는 디렉토리이다. JEUS운영환경의 설정에 따라 내부에는 디렉토리나 파일들이 naming rule 따라 만들어지게 된다.

 

2.8 samples 디렉토리

각종 예제 프로그램들이 목록에 따라 들어가 있는 디렉토리이다.

 

2.9 webhome 디렉토리

최초 설치시 각종 샘플과 같은 각종 application들이 들어가 있는 디렉토리이다. 하위 디렉토리는 다음과 같은 것이 이다.

-          admin_home: browser 이용해 JEUS 제어하고자 필요한 프로그램들이 들어 있다. 이는 JEUS에서 사용하는 디렉토리이므로 건드리지 않는 것이 좋다.

-          ejb_home: EJB 필요한 jar파일이나 class 들어가는 디렉토리이다.

-          servlet_home: WEB application 들어가는 디렉토리이다.

-          ear_home: EAR application들이 들어가는 디렉토리이다.

이러한 디렉토리들은 유저의 필요에 따라(admin_home제외) 변경을 있다. 변경을 하고자 한다면 $JEUS_HOME/bin/jeus.properties.bat파일을 열어 관련된 환경변수를 수정하면 된다.

 

2.10 webserver 디렉토리

JEUS 기본적으로 포함되어 있는 Web Server(WebtoB light) 들어 있는 디렉토리이다.

 

2.11 workspace 디렉토리

JEUS 운영 내부적으로 사용하는 임시 디렉토리이다.

 

 

3.   JEUS 실행 구조

JEUS 크게 가지 형태의 process 운영된다고 있다.

하나는 manager process이고 나머지 하나는 container process이다.

첫째로 manager process container process 관리하는 역할과 clustering환경 구성 JEUS 상호간에 필요한 정보들을 주고 받는 process 개발 만들어진 각종 application과는 직접적인 관이 없다.

번째로 container프로세스는 개발자에 의해 개발된 application 실행시켜 주는 process이다.

이러한 구조를 그림으로 나타내면 다음과 같다.

 

 

그림에서처럼 manager process 자신에게 포함된 container들을 관리하는 역할과 물리적으로 떨어져 있는 서버의 다른 manager process 통신을 하면서 clustering환경을 유지하는 역할을 하게 된다.

Container process 하나의 서버에 여러 개가 존재할 있다. 또한 container process 여러 개의 engine 포함하게 된다. 이러한 engine 개발된 application 자신에게 해당하는 application 실행시켜주게 된다. 예를 든다면 EJB engine EJB프로그램을 Servlet engine WEB application 실행하게 되는 것이다. 이러한 container process 하나의 독립적인 process 동작하게 된다.

 

3.2 설정 파일

앞에서 JEUS 모든 설정 파일은 $JEUS_HOME/config 디렉토리에 존재한다고 했었다. Config 디렉토리의 구조를 살펴보면 다음과 같다. 아래 그림은 최초 설치 만들어져 있는 디렉토리이다.

 


앞에서도 간단히 설명을 했듯이 dtds 디렉토리는 xml 관련된 dtd파일이 들어 있는 곳이고, security 디렉토리는 JEUS운영 사용하게 되는 policy파일이 들어 있는 디렉토리이다.

나머지 hostname(그림에서는 ybsong_note)으로 되어 있는 디렉토리인데, 현재 JEUS 설치된 서버의 운영과 관련된 모든 설정들은 디렉토리에 들어 있다.

가장 먼저 살펴볼 파일은 hostname 디렉토리에 들어 있는 JEUSMain.xml파일이다.

참고로 운영을 위해 각종 설정 파일을 생성할 먼저 JEUSMain.xml파일을 만들게 되고, 파일의 구성에 따라 부수적으로 필요한 설정 파일을 만들어 설정을 하게 된다.

 

JEUS에서 가장 중요한 설정 파일로 가장 기본이 되는 설정으로 manager프로세스에 대한 설정이라고 보면 된다. 여기에는 어떠한 container프로세스가 있는지 container에는 어떠한 engine 들어 있는지에 대한 설정이 포함되어 있다. JEUS구동 시에도 가장 먼저 파일을 읽어 들인 설정에 따라 필요한 container process 실행시킨다고 생각하면 쉽게 이해될 것이다.

아래는 최초 설정 들어 있는 JEUSMain.xml 파일이다.

<?xml version="1.0"?>

<!DOCTYPE jeus-system PUBLIC "-//Tmax Soft, Inc.//DTD JEUS Main Config 4.0//EN"

                             "http://www.tmaxsoft.com/jeus/dtd/4.0/jeus-main-config.dtd">

<jeus-system>

    <node>

        <name>ybsong_note</name>

        <class-ftp>true</class-ftp>

        <sequential-start>true</sequential-start>

        <enable-webadmin>true</enable-webadmin>

        <system-log>

            <level>debug</level>

        </system-log>

        <engine-container>

            <name>container1</name>

            <engine-command>

                <type>servlet</type>

                <name>engine1</name>

                <startup-mode>xml</startup-mode>

            </engine-command>

            <engine-command>

                <type>ejb</type>

                <name>engine1</name>

                <startup-mode>xml</startup-mode>

                <deploy-mode>xml</deploy-mode>

            </engine-command>

            <tm-config>

                <pooling>

                    <min>10</min>

                    <max>20</max>

                    <step>2</step>

                    <period>600000</period>

                </pooling>

                <active-timeout>300000</active-timeout>

                <commit-timeout>120000</commit-timeout>

                <capacity>20000</capacity>

            </tm-config>

        </engine-container>

    </node>

</jeus-system>

아래에 중요한 개의 tag 대해 설명하였다.

-          node: 하나의 서버를 의미한다. 물리적인 하나의 서버를 의미한다고 봐도 무방하다. 내부에 engine-container tag 포함하고 있다.

-          engine-container: 앞에서 설명한 container process 의미한다. 여러 개를 가질 있으며 이는 여러 개의 container프로세스가 운영될 있음을 의미한다.

-          engine-command: 이는 앞에서 언급된 engine 의미한다. Type 따른 하는 운영되는 application 형태가 달라지게 된다.

위의 tag engine-container engine-command 적절히 조합하여 필요한 만큼의 container process engine 생성하면 된다. JEUSMain.xml 설정이 끝났다면 이젠 여기서 설정된 engine들에 대한 설정이 필요하게 된다.

참고로 Container process 대한 설정은 필요하지 않다. 이유는 Container process application 운영하는 기본 단위가 아니고 engine 기본 단위이므로 이들에 대한 설정만을 필요로 한다. 다시 말하면, container process 그대로 하나의 process 단위이며 engine 묶어주는 그룹의 개념만을 지니고 있으므로 JEUSMain.xml 내용만으로 이상의 설정은 필요 없는 것이다.

JEUSMain.xml 대한 자세한 설정은 JEUS Server 매뉴얼을 참조하면 된다.

 

3.4 engine 설정 파일

Engine 설정 파일은 engine 이름으로 디렉토리 아래에 존재하게 된다. Engine 이름을 붙이는 방법은 JEUS 내부의 naming rule 다음과 같이 JEUSMain.xml파일의 내용을 가지고 만들어지게 된다.

[hostname]_[engine tag type]_[engine tag name]

앞에서 보여진 JEUSMain.xml파일을 참고하면 다음과 같이 개의 engine이름이 존재하게 되는 것이다.

-          ybsong_note_ejb_engine1

-          ybsong_note_servlet_engine1

이렇게 engine 이름을 만들었다면 이러한 엔진을 위한 설정파일이 들어가게 되는 디렉토리를 만들어야 한다. 디렉토리는 바로 JEUSMain.xml 있는 디렉토리에 engine이름으로 디렉토리를 만들면 된다(앞에서 보인 config디렉토리의 구조에 관한 그림 참조).

engine 대한 설정 파일들은 모두 자신의 이름으로 디렉토리 안에 존재하게 되는 것이다. 또한 engine마다 필요한 설정 파일은 engine type 따라 달라지게 된다. Type 가지가 있다. 아래에 type 따른 설정 파일의 이름을 기술해 놓았다.

-          servlet type: WEBMain.xml

-          ejb type: EJBMain.xml

-          jms type: JMSMain.xml

이후에는 이들 가장 많이 사용하는 servlet ejb type 설정 파일에 대해 살펴본다.

 

3.5 servlet engine 설정 파일

앞에서 봤듯이 servlet type engine 설정 파일은 WEBMain.xml이다.

최초 설치 아래와 같은 설정 파일이 [hostname]_servlet_engine1 디렉토리에 들어 있다.

<?xml version="1.0"?>

<!DOCTYPE web-container PUBLIC "-//Tmax Soft., Inc.//DTD WEB Main Config 4.0//EN"

                               "http://www.tmaxsoft.com/jeus/dtd/4.0/web-main-config.dtd">

<web-container>

    <context-group>

        <group-name>MyGroup</group-name>

        <group-docbase>webapps</group-docbase>

        <session-config>

            <shared>true</shared>

            <timeout>20</timeout>

        </session-config>

        <logging>

            <error-log>

                <target>stdout</target>

                <level>information</level>

                <buffer-size>0</buffer-size>

            </error-log>

            <user-log>

                <target>file</target>

                <buffer-size>0</buffer-size>

            </user-log>

            <access-log>

                <target>file</target>

                <buffer-size>0</buffer-size>

                <valid-day>1</valid-day>

                <log-format>

                    <time-format>default</time-format>

                </log-format>

            </access-log>

        </logging>

        <context>

            <context-name>examples</context-name>

            <context-path>/examples</context-path>

        </context>

        <webserver-connection>

            <http-listener>

                <port>8088</port>

                <listener-id>http1</listener-id>

                <output-buffer-size>8192</output-buffer-size>

                <thread-pool>

                    <min>25</min>

                    <max>30</max>

                    <step>2</step>

                    <max-idle-time>1000</max-idle-time>

                </thread-pool>

            </http-listener>

        </webserver-connection>

    </context-group>

</web-container>

위의 파일 내용 개의 tag 아래에서 설명한다.

-          context-group: tag context 묶음을 의미한다. J2EE spec에서는 context 대해서만 기술되어 있다. JEUS에서 context group 개념을 사용하는 것은 세션 정보의 공유 등을 위해서 사용한다. 그대로 group 개념이므로 내부에 context tag 포함하고 있음을 있다. 참고로 context WEB application 단위로 생각하면 쉽게 이해할 있다. group-docbase group 물리적으로 존재하는 디스크 위치(디렉토리) 의미한다.

-          context: WEB application 단위이다. Context 설정에 따라 이에 따른 deployment descriptor(DD)파일이 하나씩 존재하게 된다. 파일의 위치는 WEBMain.xml 같은 위치이며 이름은 jeus-web-dd_[context_name].xml파일이다.

-          webserver-connection: servlet type engine WEB application 처리하는 engine이므로 web server와의 결을 담당하는 부분이 필요하게 된다. 이에 대한 설정을 하는 tag이다. 위에서는 http-listener 되어 있지만, 외에도 webtob-listener/apache-listener 등이 있다.
http-listener
다른 web server없이 JEUS자체적으로 HTTP 받아들이고자 경우 사용하고, webtob-listener 자체 web server WebtoB, apache-listener Apache와의 동을 위해 사용하면 된다.

아래에는 context마다 하나씩 존재하게 되는 DD파일을 표시하였다.

<?xml version="1.0"?>

<!DOCTYPE jeus-web-dd PUBLIC "-//Tmax Soft., Inc.//DTD JEUS WEB Deployment Info 4.0//EN"

                             "http://www.tmaxsoft.com/jeus/dtd/4.0/jeus-web-dd.dtd">

<jeus-web-dd>

    <context>

        <context-name>examples</context-name>

        <docbase>examples</docbase>

        <auto-reload>

            <enable-reload>true</enable-reload>

            <check-on-demand>true</check-on-demand>

        </auto-reload>

    </context>

</jeus-web-dd>

DD파일은 각각의 context 대한 설정을 나타낸다. Context-name WEBMain.xml 설정된 context-name 의미하고, docbase 디스크 상에서의 물리적인 위치다. Auto-reload 운영 프로그램이 수정될 경우 이를 바로 반영할지에 대한 여부를 나타낸다.

자세한 내용들은 JEUS Web Container매뉴얼을 참조하면 된다.

 

3.6 EJB engine 설정 파일

EJB type engine 설정 파일은 EJBMain.xml 파일이다.

최초 설치 포함된 EJBMain.xml파일은 다음과 같다.

<?xml version="1.0"?>

<!DOCTYPE ejb-engine PUBLIC "-//Tmax Soft, Inc.//DTD EJB Main Config 4.0//EN"

                            "http://www.tmaxsoft.com/jeus/dtd/4.0/ejb-main-config.dtd">

<ejb-engine>

    <enable-user-notify>false</enable-user-notify>

    <enable-interop>false</enable-interop>

    <system-log>

        <target>stdout</target>

        <level>debug</level>

    </system-log>

    <module-list>samples</module-list>

</ejb-engine>

위의 tag module-list engine 시작될 가지고 올라가야 EJB 모듈을 나열하는 tag이다.

EJB engine 경우 위와 같이 간단하다. 이는 EJB 경우 engine 설정보다는 EJB 구성하는데 필요한 ejb-jar.xml파일과 DD.xml 많은 내용들이 기술되어 있기 때문이다. 이들에 대한 내용은 개발과 관련된 부분이므로 JEUS EJB 매뉴얼 혹은 개발자 교재를 참조하면 된다.

 

 

4.   JEUS 구동 종료

4.1 JEUS console tool 이용한 구동 종료

JEUS 구동은 크게 가지 작업으로 나누어진다.

먼저 JEUS manager process(jeus명령어) 구동한 jeusadmin tool 이용해 manager 접속한 boot명령을 이용해 부팅을 하게 된다.

Manager 구동하면 다음과 같이 보여진다.

[c:\dmscm]#jeus

[ErrorMsgManager] Message Manager is initialized

[2004.04.29 14:28:08][0] [JeusServer] JEUSMain.xml is loaded

[2004.04.29 14:28:08][3] [LocalSecurityRealm] Loading File Realm from C:\Jeus42\config\ybsong_note\file-realm.xml

[2004.04.29 14:28:09][0] [JeusServer] JEUSMain.xml is loaded

[2004.04.29 14:28:09][0] [JeusServer] JMX Manager started

[2004.04.29 14:28:10][0] [JRSMAcceptThread] Exported Remote Security Provider at

 port 9743

[2004.04.29 14:28:10][0] [JeusServer] JeusServer is Ready

위와 같이 Ready 메시지가 나오면 manager 구동된 것이다. 다른 command창을 열러 jeusadmin [hostname] 명령을 주어 manager 아래와 같이 로그인 boot명령을 보내면 된다. ID/password 물어보게 되는데, 최초 설치 ID administrator이며 password 설치 입력한 값을 넣으면 된다.

[c:\dmscm]#jeusadmin ybsong_note

[ErrorMsgManager] Message Manager is initialized

[JeusCommander] Login

>administrator

[JeusCommander] Password

> 

[JeusCommander] JEUS 4.2 Jeus Manager Controller

ybsong_note>boot

[JeusCommander] ybsong_note boot done

ybsong_note_container1

ybsong_note>down

Do you really want to down whole JEUS? (y : n):y

[JeusCommander] ybsong_note down successful

ybsong_note>jeusexit

[JeusCommander] ybsong_note jeusexit successful

ybsong_note>exit

 

[c:\dmscm]#

위의 과정은 manager 로그인 boot명령을 통해 JEUSMain.xml 설정에 따라 container 올리는 작업과 down명령을 통해 내리는 작업을 순차적으로 나열한 것이다.

jeusexit명령어는 앞에서 띄워놓은 manager 종료시키는 작업을 수행한다. exit명령어는 jeusadmin tool 빠져나가는 명령어이다.

이와 같은 과정을 거쳐 JEUS 기동하고 내리는 작업을 완료하였다. 하지만 때에 따라서는 이러한 작업이 복잡하게 느껴질 있다. 편의를 위해 JEUS에서는 one-step으로 JEUS 구동하고 종료할 있는 방법을 제공한다. 아래와 같은 방법을 통하면 그러한 작업을 쉽게 있다.

구동 : jeus –xml –U[ID] –P[password]

종료 : jeusadmin [hostname] jeusexit –U[ID] –P[password]

 

4.2 JEUS GUI tool JManager 이용한 구동 종료

JManager GUI 이용해 JEUS 제어할 있도록 하는 tool이다. 실행하는 방법은 command창에서 jmanager라고 입력을 하면 된다. tool 이용해 부팅을 하기 위해서는 console 이용할 때와 마찬가지로 jeus명령어를 이용해 manager process 구동되어 있어야 한다.

JManager 구동하면 가장 먼저 다음과 같이 ID/password 물어보는 창이 보여진다.

 


로그인을 하면 다음과 같이 화면이 보여지게 된다.

 

 

위와 같이 화면이 나타나면 왼쪽 tree에서 hostname부분을 마우스 오른쪽 버튼을 눌러 나타나는 팝업 메뉴에서 boot 선택하면 된다. 종료를 때에는 down 선택하면 된다.

JManager 대한 자세한 내용은 JEUS GUI 매뉴얼을 참조하면 된다.

 

4.3 JEUS WEB tool 이용한 구동 종료

WEB tool browser 이용한 방법을 의미한다.

WEB tool 사용하기 위해서는 먼저 JEUSMain.xml 다음과 같이 설정이 되어 있어야 사용할 있다. JEUS 4.2 경우 설치 기본적으로 설정되어 있으므로 따로 설정할 필요는 없다.

<jeus-system>

    <node>

        <name>ybsong_note</name>

        <class-ftp>true</class-ftp>

        <sequential-start>true</sequential-start>

        <enable-webadmin>true</enable-webadmin>

        <system-log>

            <level>debug</level>

        </system-log>

        <engine-container>

Console tool 혹은 JManager 이용할 경우에는 jeus명령어를 통해 manager process 기동되어 있으면 사용할 있었으나, WEB tool 경우 boot명령까지 완료되어 있는 상태에서 사용할 있다. 이는 WEB tool 내부적으로 servlet engine 사용하기 때문이다. One-step 부팅을 이용하면 쉽게 사용할 있다.

먼저 부팅이 되어 있는 상태에서 다음과 같이 접속을 하면 ID/password 물어보는데, 이후부터는 JManager 비슷한 방법으로 사용을 하면 된다.

접속 URL: http://ip:9744/webadmin

IP JEUS 설치된 서버의 ip 말하며 9744 default port이다. 값은 환경변수에 따라 달라지는데, 기본적으로 JEUS_BASEPORT + 8번의 값을 사용한다. JEUS_BASEPORT $JEUS_HOME/bin/jeus.properties.bat파일에 설정되어 있다.

최초 브라우저를 이용해 접속을 하면 다음과 같은 화면이 보여지게 된다.

 

 

ID/password 입력한 로그인을 하면 다음과 같은 화면이 보여지게 된다.

 

 

 

이후부터는 직접 부팅과 다운 작업 설정의 변경, 모니터링과 같은 작업을 수행할 있다.

 

 

5.   container 추가

5.1 설정 파일을 직접 편집하는 방법

이는 3장에서 설명한 방법으로 직접 설정 파일을 편집하면 된다.

가장 먼저 편집해야 파일은 JEUSMain.xml 파일이다. 파일을 열어 engine-container tag 하나 만들면 된다. 쉽게 작업을 하려면 기존에 있는 engine-container tag copy & paste 필요한 부분들만 수정하면 된다. 수정이 필요한 부분은 engine-container/name tag name engine-command/name부분이다. 이를 수정하는 이유는 container 이름과 engine 이름이 중복되어 사용할 없기 때문이다.

JEUSMain.xml파일의 수정이 완료되었다면 그에 따라 engine 설정 파일을 만들어 주어야 한다. 역시 3장에서 설명한 것처럼 engine 이름에 따라 디렉토리를 만든 engine type 따른 설정 파일(WEBMain.xml, EJBMain.xml 혹은 JMSMain.xml) 만들어 준다. 역시 작업을 쉽게 하려면 기존에 있는 디렉토리 전체를 복사한 쉽게 설정 파일 필요한 부분만 수정을 하면 된다(ex: http-listener부분의 port 같은 부분).

 

5.2 WEB tool 이용하는 방법

여기서는 WEB tool 이용하는 방법에 대해서 설명한다. JManager 이용하는 방법에 대해서는 JEUS GUI tool 매뉴얼을 참조하면 된다.

 

 

위의 그림에서처럼 tree에서 hostname으로 아이콘을 마우스 오른쪽 버튼으로 클릭하면 팝업 메뉴가 나타나는데 여기서 Add container 선택하여 container 추가할 있다.

하지만 이렇게 Add container 경우 앞에서 설정 파일을 직접 편집할 때처럼 직접 많은 설정들을 해주어야 하므로 조금은 불편할 있다. 직접 편집을 복사해서 사용한 것처럼 WEB tool에서는 container 복제해주는 작업을 손쉽게 있는 기능이 있다. 이는 Clone container메뉴를 선택해서 사용하면 된다. 위의 그림에서 clone container 선택하면 아래와 같은 화면이 보여지게 된다.

 

 

위의 그림처럼 오른쪽 프레임에 가지 설정을 있는 화면이 보여진다. Source Engine Container 복제할 container 의미하며, Target Engine Container 만들어질 container 이름을 의미한다. 그리고 Target Engine engine 이름으로 사용할 이름을 말한다(여기서는 dmscm이라고 했으므로, ybsong_note_servlet_dmscm ybsong_note_ejb_dmscm 이라는 engine 만들어질 것이다).

또한 Instant Start 만들어진 container 바로 부팅할 것인지의 여부를 설정하는 것이다. 바로 부팅을 경우 포트의 충돌 등으로 인해 정상 동작하지 않을 있으므로 여기서는 선택을 하지 않도록 한다.

Clone버튼을 누르면 container 복사하는 작업이 수행된다.

 

 

위와 같이 성공했음을 보여주는 메시지가 나오고 왼쪽 tree hostname부분을 다시 클릭해보면, 아래 그림과 같이 개의 container 있음을 있다. 컬러로 보여지는 것은 현재 부팅되어 운영되고 있음을 나타내고, 흑백으로 보여지는 것은 설정은 되어 있으나 운영은 되고 있지 않음을 나타낸다.

이제 가지 수정 작업을 해야 하므로 수정이 필요한 container tree에서 선택한 보여지는 오른쪽 프레임의 상단 메뉴 Configuration 선택해 필요한 작업을 하도록 한다.

마우스로 필요한 곳들을 클릭하면서 필요한 설정을 변경하는 작업을 하면 된다.

 

 

6.   기타 console tool

6.1 jeusadmin 사용하기

jeusadmin tool manager 접속한 manager 제어하기 위한 tool이다. Container 부팅/다운, engine 부팅/다운 작업 등을 수행할 있다.

- jeusadmin <HostName>

/was>jeusadmin ybsong_note

[ErrorMsgManager] Message Manager is initialized

[JeusCommander] Login

>administrator

[JeusCommander] Password

> 

[JeusCommander] JEUS 4.0.4.9 Jeus Manager Controller

ybsong_note>

1) 현재 떠있는 엔진 목록보기

서버별로 설정에 따라 Engine Container 1 혹은 이상 구동 중이며, JVM 개의 Engine Container에는 servlet engine 혹은 EJB Engnine 구동 되고있다.

ybsong_note >allenglist

ybsong_note _servlet_engine1

ybsong_note _servlet_engine1

위와 같이 수행을 하게 되면 현재 구동중인 엔진의 목록을 있다. 또한 위의 엔진들을 booting / down 수도 있다. (help 명령어 참조)

방법 : starteng / downeng <engineName>

) starteng ybsong_note_servlet_engine1

   downeng ybsong_note_servlet_engine1

 

2) 현재 있는 Engine Container PID 목록보기

Engine Container 각각의 엔진을 담는 그릇과 같은 것으로 JVM 1개를 의미한다.

 

ybsong_note>allenglist

ybsong_note_servlet_engine1

ybsong_note_servlet_engine1

ybsong_note>pidlist

ybsong_note_container2 : 120782

ybsong_note_container1 : 58660

 

현재 운영중인 JVM 대한 PID할당 정보를 얻을 있으며, 또한 위의 Engine Container booting / down 수도 있다. (help 명령어 참조)

방법 : startcon / downcon <containerName>

) startcon ybsong_note_container1

   downcon ybsong_note_container1

 

6.2 webadmin 사용하기

webadmin tool servlet type 엔진을 관리하기 위한 console tool이다. 현재 servlet engine 모니터링 동적인 설정의 변경과 같은 작업을 수행할 있다.

- webadmin <engineName>

/was>webadmin ybsong_note_servlet_engine1

$ username : administrator

$ password : [ErrorMsgManager] Message Manager is initialized

-- Welcome to JEUS Web Container(v4.0.6.1) Admin --

 

$$1 [ybsong_note:engine1]

 

1) servlet engine 상태정보 보기(st명령)

 

$$1 [ybsong_note:engine1] st

[2003.11.14 14:52:55][0] [TMLinkManager] accept thread is started

[2003.11.14 14:52:55][0] [TMClient] TMClient initailized

[2003.11.14 14:52:55][1] [JNSLocal_] Try to connect to 192.168.21.5:9738

[2003.11.14 14:52:55][1] [JNSLocal_] Connected to JNSServer 192.168.21.5:9738

[2003.11.14 14:52:55][1] [JNSLocal_] Successfully started. (ID 192.168.21.5:37035)

        >>>>>>>> ybsong_note_servlet_engine1 <<<<<<<<

-- WebContainer [ybsong_note_servlet_engine1] --

< memory information >

VM Total Memory    = 134478336 Bytes

VM Free Memory     = 73117120 Bytes

 

< session information >

session clustering version : 2

number of local sessions : 11

number of remote sessions : 16 (active = 16, passivated = 0)

- primary session server name      : session1

- backup session server name       : null

- current session server name      : session1

- current session server is alive  : true

- current session server connections (total, used)  : 10, 0

 

< DBConnectionPool information >

[jdbc/dass] COM.ibm.db2.jdbc.app.DB2Driver

Total DB connections = 0, Free DB connections = 0

Init DB conns = 2, Max DB conns = 4, Increment rate = 1, Max idle time = -1

 

< WebtConnectionPool information >

-- ContextGroup [MyGroup] --

< thread information >

WebtobListener[webtob1] Current thread = 20, Wait Queue Count = 4, Max thread = 25

    webtob1-hth0(localhost:9900) [port: 9900] live connections = 20

HttpListener[WebListener1] Current thread = 10, Wait Queue Count = 0, Max thread = 20

 

< request information >

dass : request = 375, avgTime = 359 ms

 

Command is successfully achieved...

 

st 명령을 수행하게 되면 다음의 목록을 보여준다.

1)     해당 jvm 메모리 사용현황 : st –m

2)     DBConnectionPool 실시간 사용현황 : st –d

3)     Web Server와의 정보 : st –t

4)     설정한 Context 들어온 요청 count 평균처리시간 : st –r

5)     유지하고 있는 Session 객체의 개수 : st –s

위에서 주의 깊게 보아야 것은 다음과 같다.

1)     jvm 메모리 사용현황을 통하여 애플리케이션상의 Memory leak 현상이 없는지 파악하여야 한다. jvm 메모리 사용이 계속 증가하면 이를 의심해 보아야 한다.

2)     Session Information 통해서는 현재 login 통하여 들어와 있는 유저수를 있다.

* 보기 : st –i 1 –k 100  (1 간격으로 100 반복하여 수행하기)

 

2) 호출된 애플리케이션 정보보기

 

$$1 [ybsong_note:engine1] info

[2003.11.14 14:55:26][0] [TMLinkManager] accept thread is started

[2003.11.14 14:55:27][0] [TMClient] TMClient initailized

[2003.11.14 14:55:27][1] [JNSLocal_] Try to connect to 192.168.21.5:9738

[2003.11.14 14:55:27][1] [JNSLocal_] Connected to JNSServer 192.168.21.5:9738

[2003.11.14 14:55:27][1] [JNSLocal_] Successfully started. (ID 192.168.21.5:37115)

        >>>>>>>> ybsong_note_servlet_engine1 <<<<<<<<

<<< WebContainer Name: ybsong_note_servlet_engine1 >>>

#### ContextGroup : MyGroup

  #### Context : dass

    0:[/dass/jsp/KR/stock/9065input.jsp] <Ready> class: jeus_jspwork._dass._jsp._KR._stock._403_9065input, total_reqs: 2

    1:[/dass/jsp/KR/stock/0311input.jsp] <Ready> class: jeus_jspwork._dass._jsp._KR._stock._403_0311input, total_reqs: 5

    2:[/dass/jsp/KR/banking/0758output.jsp] <Ready> class: jeus_jspwork._dass._jsp._KR._banking._403_0758output, total_reqs: 4

    3:[/dass/jsp/KR/signon_output.jsp] <Ready> class: jeus_jspwork._dass._jsp._KR._403_signon_5foutput, total_reqs: 15

 

…(중략)

 

    52:[/dass/jsp/dassadmin/session/UserCount.jsp] <Ready> class: jeus_jspwork._dass._jsp._dassadmin._session._403_UserCount, total_reqs: 91

 

 

Command is successfully achieved...

 

ContextGroup안에 있는 Context 호출된 Application 호출 빈도수를 알아 있다. 이를 통해서 많이 호출되고 있는 Application 추출할 수가 있다.

* 보기 : info –i 1 –k 100  (1 간격으로 100 반복하여 수행하기)

 

3) application 수행 thread 상태보기

 

$$1 [ybsong_note:engine1] ti

[2003.11.14 14:57:56][0] [TMLinkManager] accept thread is started

[2003.11.14 14:57:56][0] [TMClient] TMClient initailized

[2003.11.14 14:57:56][1] [JNSLocal_] Try to connect to 192.168.21.5:9738

[2003.11.14 14:57:56][1] [JNSLocal_] Connected to JNSServer 192.168.21.5:9738

[2003.11.14 14:57:56][1] [JNSLocal_] Successfully started. (ID 192.168.21.5:37195)

        >>>>>>>> ybsong_note_servlet_engine1 <<<<<<<<

-- Thread State [webtob1-hth0(localhost:9900)] --

[webtob1-hth0(localhost:9900)-w0][waiting, wt=497100 ms]

[webtob1-hth0(localhost:9900)-w1][waiting, wt=554373 ms]

[webtob1-hth0(localhost:9900)-w2][waiting, wt=1446008 ms]

[webtob1-hth0(localhost:9900)-w3][waiting, wt=498939 ms]

[webtob1-hth0(localhost:9900)-w4][waiting, wt=1481884 ms]

…(중략)

[webtob1-hth0(localhost:9900)-w19][waiting, wt=499114 ms]

[total : 20    active : 0    idle : 20    blocked : 0    reconnecting : 0]

 

-- Thread State [WebListener1] --

[WebListener1-w0][waiting, wt=130521 ms]

[WebListener1-w1][waiting, wt=132761 ms]

[WebListener1-w2][waiting, wt=127836 ms]

…(중략)

[WebListener1-w9][waiting, wt=125673 ms]

[total : 10    active : 0    idle : 10    blocked : 0    reconnecting : 0]

 

Command is successfully achieved...

 

위의 정보를 통하여 현재 실시간으로 들어오고 있는 uri 정보를 수가 있다. 특히  rt(=run time)라는 수행시간정보를 통하여 해당 호출된 서비스가 waiting 빠졌는지, 처리가 얼마나 걸리고 있는지를 실시간으로 모니터링 있다. 만일 rt 시간이 비정상적으로 길어지거나, 모든 Thread 차서 여유 공간이 없다면, waiting 또는 hanging 현상을 의심해보고 Thread Dump 등을 통하여 원인을 찾도록 한다.

 

* 보기 : ti –i 1 –k 100  (1 간격으로 100 반복하여 수행하기)

 

$$1 [DS-CBS4:engine1] ti -a

[2003.11.14 15:03:46][0] [TMLinkManager] accept thread is started

[2003.11.14 15:03:46][0] [TMClient] TMClient initailized

[2003.11.14 15:03:46][1] [JNSLocal_] Try to connect to 192.168.21.5:9738

[2003.11.14 15:03:46][1] [JNSLocal_] Connected to JNSServer 192.168.21.5:9738

[2003.11.14 15:03:46][1] [JNSLocal_] Successfully started. (ID 192.168.21.5:37401)

        >>>>>>>> ybsong_note_servlet_engine1 <<<<<<<<

-- Thread State [webtob1-hth0(localhost:9900)] --

[webtob1-hth0(localhost:9900)-w0][waiting, 2003.11.14 14:49:39, wt=846868 ms][req=11, avgTime=488 ms, total=11][alive=true]

…(중략)

[webtob1-hth0(localhost:9900)-w19][waiting, 2003.11.14 14:49:37, wt=848882 ms][req=10, avgTime=715 ms, total=10][alive=true]

[total : 20    active : 0    idle : 20    blocked : 0    reconnecting : 0]

 

-- Thread State [WebListener1] --

[WebListener1-w0][waiting, 2003.11.14 15:02:41, wt=64660 ms][req=21, avgTime=318 ms, total=21][alive=true]

…(중략)

[WebListener1-w9][waiting, 2003.11.14 15:02:41, wt=64682 ms][req=21, avgTime=18 ms, total=21][alive=true]

[total : 10    active : 0    idle : 10    blocked : 0    reconnecting : 0]

 

Command is successfully achieved...

 

* ti –a 이용하여 요청을 처리한 건수 처리시간 평균을 보여준다.

출처 : Tong - jackie92님의 ◐ Web & WAS통

Posted by 1010
98..Etc/70.JEUS2009. 7. 9. 14:51
반응형

JEUS 운영 및 관리 지침

<설치시입력한JEUS 관리자비밀번호>는 jeusadmin이라고 가정한다.

JEUS 구동

  • jboot: jeus –Uadministrator –Pjeusadmin
  • jdown: jeusadmin –Uadministrator –Pjeusadmin jeusexit

jeusadmin console

jeusadmin 콘솔툴을 이용하여 JEUS 컨테이너기동/종료, 엔진리스트확인 등 JEUS 엔진의 상태를 제어 및 점검한다.

  • 콘솔 실행: jeusadmin 'hostname' -Uadministrator -Pjeusadmin

명령 목록

  • allenglist: jeusadmin의 allenglist 명령은 현재 각 컨테이너의 엔진기동 상태를 보여준다.
  • downcon <container-name>: 지정된 컨테이너를 종료시킨다.
  • startcon <container-name>: 지정된 컨테이너를 기동시킨다.
  • pidlist: JEUS의 엔진 프로세스를 확인한다.

webadmin console

webadmin 콘솔은 JEUS의 컨테이너 내부에 기동된 서블릿 엔진의 상태를 모니터링하기 위한 명령프롬프트이다.

  • 콘솔 실행: webadmin <container-name> -Uadministrator -Pjeusadmin

명령 목록

  • ti: ti는 Thread Information의 약자로 JEUS 서블릿 엔진의 컨텍스트그룹 내부의 Worker Thread의 상태를 체크하기 위한 명령어이다.
  • st -m: 현재 Container의 JVM Memory 사용 현황
  • st -r: 설정한 Context로 들어온 요청 count와 평균처리시간
  • st -s: 현재 유지하고 있는 세션 객체의 수

webadmin 반복 모니터링

webadmin 내의 모니터링 명령어를 주기적으로 자동실행하게 하려면 다음과 같은 형식으로 명령어를 실행한다.

  • <command> -i 주기(초) -k 횟수
  • 예) ti -i 2 -k 10 : ti 명령어를 2초 간격으로 10번 수행

dbpooladmin console

dbpooladmin 콘솔은 컨테이너별로 할당된 Database Pool의 상태를 모니터링하기 위한 명령프롬프트이다.

  • dbpooladmin<container-name> -Uadministrator–Pjeusadmin

명령 목록

  • Info: 해당 컨테이너에서 관리되고 있는 Database Pool의 정보가 표시된다.
    • min, max 값은 JEUSMain.xml에 설정한 Pool의 최소/최대값이며 current는 현재 풀에 보관되고 있는 실제 커넥션의 수, idle의 풀에 보관되고 있는 커넥션중, 사용가능한 개수를 의미한다.

JEUS 장애처리

JEUS 프로세스ID (PID) 확인

JEUS의 엔진 프로세스는 다음과 같이 2가지 방법으로 확인할 수 있다.

  • ps –ef | grep java
    • -Xmx512m 이후 부분을 확인하여 JEUS Manager 프로세스임을 확인한다.
    • [-D컨테이너이름]을 이용하여 컨테이너 프로세스임을 확인한다.
  • jeusadmin 콘솔툴을 이용한 PID 확인
    • pidlist: pidlist 명령을 사용하여 PID를 확인한다.

JAVA Dump

덤프 생성

  • kill -3 [JEUS-PID]

덤프 확인

JEUS JAVA프로세스에서 생성한 덤프는 JeusServerLog에서 확인한다.

예) vi $JEUS_HOME/logs/`hostname`/JeusServer_20070201.log

WebtoB 운영 및 관리 지침

WebtoB 구동

  • wsboot
  • wsdown–I : ps –ef을 이용하여 wsm, hth, htl, html 등의 프로세스가 나타나지 않으면 정상 종료

wsadmin console

WebtoB 시스템을 관리하기 위해서 wsadmin이라는 프로그램이 제공된다. wsadmin 프로그램은 UNIX 환경의 shell과 비슷한 Command Interpreter 이다. 즉, 항상 프롬프트상태로 대기중이다가 입력되는 명령어를 해석하여 이를 실행하게 된다. 여러 Node를 한 Domain으로 사용하는 경우 wsadmin으로 전체를 중앙관리가 가능하며 각 Node 별로 로컬에서만도 관리가 가능하다.

  • wsadmin

명령 목록

  • ci: 요청에 대한 현재 클라이언트 정보를 표시한다. HTH당 접속한 클라이언트의 KeepAlive 되어있는 개수를 보여준다. WebtoB단에 요청을 보내고 HTTP Session의 KeepAliveTimeout 전까지 유지되고 있는 클라이언트의 총 개수 정보이다.
  • ci –s: 현재 클라이언트의 전체 수를 표시한다.
  • si: *SERVER 절에 선언한 서버들의 수행정보를 보여준다.
  • st -s: 웹서버 환경설정파일에서 *SERVER, *URI, *EXT 절에 설정한 서비스의 상태가 보인다.
  • st -p: WebtoB 프로세스의 상태를 표시한다. 주로 JEUS-WebtoB간 연동 상태를 확인할 때 사용한다.

wsadmin 명령 연속 보기

ci, st–s, st–p, si 등의 명령어를 다음과 같이 수행하면 주기적으로 WebtoB의 상태를 모니터링할 수 있다.

  • r –i <시간(초)> -k <횟수> <명령>
  • 예) r –i 1 –k 1000 st-s

JEUS alias 설정

.profile 참고

...
export JEUS_HOME=/jeus
...
#### JEUS alias ####
alias ja='jeusadmin `hostname` -Uadministrator -Pjeusadmin'
alias ea='ejbadmin `hostname`_ejb_engine1 -Uadministrator -Pjeusadmin'
alias wa='webadmin `hostname`_container1 -Uadministrator -Pjeusadmin'
alias da='dbpooladmin `hostname`_container1 -Uadministrator -Pjeusadmin'
alias ti='webadmin `hostname`_servlet_engine1 -Uadministrator -Pjeusadmin ti -i 3 -k 100000'
alias ss='webadmin `hostname`_servlet_engine1 -Uadministrator -Pjeusadmin st -s -i 3 -k 100000'
alias sd='webadmin `hostname`_servlet_engine1 -Uadministrator -Pjeusadmin st -d -i 3 -k 100000'
alias di='dbpooladmin `hostname`_container1 -Uadministrator -Pjeusadmin info -i 3 -k 100000'

alias jcfg='cd ${JEUS_HOME}/config/`hostname`'
alias jbin='cd ${JEUS_HOME}/bin'
alias scfg='cd ${JEUS_HOME}/config/`hostname`/`hostname`_servlet_engine1'
alias ecfg='cd ${JEUS_HOME}/config/`hostname`/`hostname`_ejb_engine1'

alias jhome='cd ${JEUS_HOME}'
alias lhome='cd ${JEUS_HOME}/logs'

alias jlog='tail -f ${JEUS_HOME}/logs/`hostname`/JeusServer_`date +%Y%m%d`.log'
alias alog='tail -f ${JEUS_HOME}/logs/`hostname`_servlet_engine1/MyGroup/accesslog/access_`date +%Y%m%d`.log'
alias elog='tail -f ${JEUS_HOME}/logs/`hostname`_servlet_engine1/MyGroup/errorlog/error_`date +%Y%m%d`.log'
alias ulog='tail -f ${JEUS_HOME}/logs/`hostname`_servlet_engine1/MyGroup/userlog/user_`date +%Y%m%d`.log'
Posted by 1010
98..Etc/70.JEUS2009. 7. 9. 14:49
반응형
jeusadmin 사용법
 
jeusadmin 은 JEUS Manager 를 통해서 JEUS 를 제어하는 콘솔 툴이다.
JEUS 의 관리자의 사용자명과 패스워드를 입력한다. 일반적으로 관리자의 사용자명은 administrator 이고 패스워드는 JEUS를 설치할 때 입력한다.
 
사용법 :
jeusadmin [host명] –Uadministrator –P[password]
 
ex>
$jeusadmin esther –Uadministrator -Pjeusadmin
esther>
- help : 명령어에 대한 도움말을 출력
- boot : JEUSMain.xml 파일을 읽어서 사전에 설정된 컴포넌트들(Engine및 기타)을 구동 및 초기화
- allenglist : 현재 group(노드)의 활성화된 모든 Engine 목록을 출력한다.
esther>allenglist
esther_servlet_engine1
esther_ejb_engine1
 
- pidlist : Engine Container 의 프로세스 ID 목록을 출력한다.
  unix상에서는 pid를 나타내며, 강제 종료할 때 나타난 pid를 kill -9하면 된다.
esther>pidlist
esther_container2 : 3044
esther_container1 : 2700
- startcon / downcon [host명_container명] :
                                                         engine container 제어 (container의 down/ start)
esther>downcon esther_container1
[JeusCommander] esther_container1 container down successful
esther>startcon esther_container1
[JeusCommander] esther_container1 container started successful
- starteng / stopeng [host명_engineType_engine명] : engine을 start/ down
esther>downeng esther_servlet_engine1
[JeusCommander] esther_servlet_engine1 engine down successful
esther>starteng esther_servlet_engine1
[JeusCommander] esther_servlet_engine1 engine started successful
- down : jeus manager가 실행된 환경에서 모든 container를 down 한다.
- jeusexit : 모든 container의 down상태에서 jeus manager를 down시킨다.
- exit : jeus manager를 빠져나간다.

출처 : ▒▒ TmaxSoft Technical Network ▒▒

Posted by 1010
98..Etc/70.JEUS2009. 7. 8. 15:05
반응형
JEUS 6.0에서 JSP/Servlet에 작성된 한글이 웹 브라우저에 출력되지 않는 문제

제우스의 경우 JSP나 Servlet에 정의해 놓은 TypeContent 설정이 제대로 인식되지 않는것으로 보였다.
이 때문에 JSP 나 Servlet에 포함된 모든 한글은 웹브라우저에서 출력되지 않는 문제가 발생하였다.

해결방법:
JEUS WebAdmin에서는 서블릿 엔진의 MyGroup의 인코딩 설정을 따로 할 수있게 되어있다.
모든 인코딩 설정(Default, Forced)을 euc-kr로 설정하고, 전체 컨테이너를 재가동하면 한글이 인식되었다.

1. 제우스 웹 관리자에서 [MyGroup]-> [인코딩]을 선택하여 default 및 forced, 모든 속성에 euc-kr을 채운다.
   * JEUS WebAdmin : http://localhost:9744/webadmin

사용자 삽입 이미지


2. 제우스 컨테이너 재가동
[엔진컨테이너]를 선택하여 [모두다운] 수행 후 -> [모두시작]


사용자 삽입 이미지

3. 웹 브라우저를 통해 서블릿 또는 JSP페이지를 열어 결과를 확인해본다.
Posted by 1010
98..Etc/70.JEUS2009. 7. 8. 12:52
반응형
JEUS 운영 및 관리

JEUS 5.0을 버전을 기준으로 하고 설치시 입력한 JEUS 관리자의 비밀번호는 jeusadmin이라고 전제한다.

JEUS 구동

주로 jboot, jdown이란 이름으로 스크립트를 작성하여 실행한다. 이 파일들의 실제 명령행은 다음과 같다.

  • jboot: jeus -Uadministrator -Pjeusadmin
  • jdown: jeusadmin -Uadministrator -Pjeusadmin jeusexit

jeusadmin console

jeusadmin 콘솔툴을 이용하여 JEUS 컨테이너기동/종료, 엔진리스트확인 등 JEUS 엔진의 상태를 제어 및 점검한다.

  • 콘솔 실행: jeusadmin 'hostname' -Uadministrator -Pjeusadmin
  • 명령 목록
    • allenglist: jeusadmin의 allenglist 명령은 현재 각 컨테이너의 엔진기동 상태를 보여준다.
    • downcon <container-name>: 지정된 컨테이너를 종료시킨다.
    • startcon <container-name>: 지정된 컨테이너를 기동시킨다.
    • pidlist: JEUS의 엔진 프로세스를 확인한다.

webadmin console

webadmin 콘솔은 JEUS의 컨테이너 내부에 기동된 서블릿 엔진의 상태를 모니터링하기 위한 명령프롬프트이다.

  • 콘솔 실행: webadmin <container-name> -Uadministrator -Pjeusadmin
  • 명령 목록
    • ti: ti는 Thread Information의 약자로 JEUS 서블릿 엔진의 컨텍스트그룹 내부의 Worker Thread의 상태를 체크하기 위한 명령어이다.
    • st -m: 현재 Container의 JVM Memory 사용 현황
    • st -r: 설정한 Context로 들어온 요청 count와 평균처리시간
    • st -s: 현재 유지하고 있는 세션 객체의 수

webadmin 반복 모니터링

webadmin 내의 모니터링 명령어를 주기적으로 자동실행하게 하려면 다음과 같은 형식으로 명령어를 실행한다.

  • <command> -i 주기(초) -k 횟수
  • 예) ti -i 2 -k 10 : ti 명령어를 2초 간격으로 10번 수행

dbpooladmin console

dbpooladmin 콘솔은 컨테이너별로 할당된 Database Pool의 상태를 모니터링하기 위한 명령프롬프트이다.

  • 콘솔 실행: dbpooladmin<container-name> -Uadministrator -Pjeusadmin
  • 명령 목록
    • Info: 해당 컨테이너에서 관리되고 있는 Database Pool의 정보가 표시된다.
    • min, max 값은 JEUSMain.xml에 설정한 Pool의 최소/최대값이며 current는 현재 풀에 보관되고 있는 실제 커넥션의 수, idle의 풀에 보관되고 있는 커넥션중, 사용가능한 개수를 의미한다.

JEUS 웹 관리자

http://hostname:9744/webadmin 로 접속하여 administrator/jeusadmin 계정으로 로그인한다.

사용자 삽입 이미지

JEUS 웹 관리자

JEUS 장애 처리

JEUS 프로세스ID (PID) 확인

JEUS의 엔진 프로세스는 다음과 같이 2가지 방법으로 확인할 수 있다.

  • ps -ef | grep java
    • -Xmx512m 이후 부분을 확인하여 JEUS Manager 프로세스임을 확인한다.
    • [-D컨테이너이름]을 이용하여 컨테이너 프로세스임을 확인한다.
  • jeusadmin 콘솔툴을 이용한 PID 확인
    • pidlist: pidlist 명령을 사용하여 PID를 확인한다.

JAVA Dump

  • 덤프 생성: kill -3 [JEUS-PID]
  • 덤프 확인: JEUS JAVA프로세스에서 생성한 덤프는 JeusServerLog에서 확인한다.
    • 예) vi $JEUS_HOME/logs/`hostname`/JeusServer_20070201.log
WebtoB 운영 및 관리

WebtoB 구동

  • wsboot
  • wsdown-I : ps -ef을 이용하여 wsm, hth, htl, html 등의 프로세스가 나타나지 않으면 정상 종료

wsadmin console

WebtoB 시스템을 관리하기 위해서 wsadmin이라는 프로그램이 제공된다. wsadmin 프로그램은 UNIX 환경의 shell과 비슷한 Command Interpreter 이다. 즉, 항상 프롬프트상태로 대기중이다가 입력되는 명령어를 해석하여 이를 실행하게 된다. 여러 Node를 한 Domain으로 사용하는 경우 wsadmin으로 전체를 중앙관리가 가능하며 각 Node 별로 로컬에서만도 관리가 가능하다.

  • wsadmin
  • 명령 목록
    • ci: 요청에 대한 현재 클라이언트 정보를 표시한다. HTH당 접속한 클라이언트의 KeepAlive 되어있는 개수를 보여준다. WebtoB단에 요청을 보내고 HTTP Session의 KeepAliveTimeout 전까지 유지되고 있는 클라이언트의 총 개수 정보이다.
    • ci -s: 현재 클라이언트의 전체 수를 표시한다.
    • si: 웹서버 환경설정 파일에서 *SERVER 절에 선언한 서버들의 수행정보를 보여준다.
    • st -s: 웹서버 환경설정 파일에서 *SERVER, *URI, *EXT 절에 설정한 서비스의 상태가 보인다.
    • st -p: WebtoB 프로세스의 상태를 표시한다. 주로 JEUS-WebtoB간 연동 상태를 확인할 때 사용한다.

wsadmin 명령 연속 보기

ci, st -s, st -p, si 등의 명령어를 다음과 같이 수행하면 주기적으로 WebtoB의 상태를 모니터링할 수 있다.

  • r -i <시간(초)> -k <횟수> <명령>
  • 예) r -i 1 -k 1000 st -s
JEUS alias 설정

.profile 참고

...
export JEUS_HOME=/jeus
...
#### JEUS alias ####
alias ja='jeusadmin `hostname` -Uadministrator -Pjeusadmin'
alias ea='ejbadmin `hostname`_ejb_engine1 -Uadministrator -Pjeusadmin'
alias wa='webadmin `hostname`_container1 -Uadministrator -Pjeusadmin'
alias da='dbpooladmin `hostname`_container1 -Uadministrator -Pjeusadmin'
alias ti='webadmin `hostname`_servlet_engine1 -Uadministrator -Pjeusadmin ti -i 3 -k 100000'
alias ss='webadmin `hostname`_servlet_engine1 -Uadministrator -Pjeusadmin st -s -i 3 -k 100000'
alias sd='webadmin `hostname`_servlet_engine1 -Uadministrator -Pjeusadmin st -d -i 3 -k 100000'
alias di='dbpooladmin `hostname`_container1 -Uadministrator -Pjeusadmin info -i 3 -k 100000'

alias jcfg='cd ${JEUS_HOME}/config/`hostname`'
alias jbin='cd ${JEUS_HOME}/bin'
alias scfg='cd ${JEUS_HOME}/config/`hostname`/`hostname`_servlet_engine1'
alias ecfg='cd ${JEUS_HOME}/config/`hostname`/`hostname`_ejb_engine1'

alias jhome='cd ${JEUS_HOME}'
alias lhome='cd ${JEUS_HOME}/logs'

alias jlog='tail -f ${JEUS_HOME}/logs/`hostname`/JeusServer_`date +%Y%m%d`.log'
alias alog='tail -f ${JEUS_HOME}/logs/`hostname`_servlet_engine1/MyGroup/accesslog/access_`date +%Y%m%d`.log'
alias elog='tail -f ${JEUS_HOME}/logs/`hostname`_servlet_engine1/MyGroup/errorlog/error_`date +%Y%m%d`.log'
alias ulog='tail -f ${JEUS_HOME}/logs/`hostname`_servlet_engine1/MyGroup/userlog/user_`date +%Y%m%d`.log'

...
Posted by 1010
98..Etc/70.JEUS2009. 6. 22. 14:04
반응형

------------------------------------------

tail_log_ajax.jsp

------------------------------------------


<%@ page contentType="text/html;charset=euc-kr" %>
<%@ page import="java.io.*" %>
<%!
public String toKorean(String param) {
 try{
  //param=new String(param.getBytes("ISO-8859-1"),"EUC-KR");
 }catch(Exception e){
 }
 return param;
}
%>

<%
response.setHeader("Pragma","No-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0);
response.setHeader ("Cache-Control", "no-cache");
%>

<%
//로그파일명
String log_filename = request.getParameter("log_filename") == null ? "": request.getParameter("log_filename");
long end_point = (request.getParameter("end_point")==null)? 0:Long.parseLong(request.getParameter("end_point")+"");
//로그파일이 있는 디렉토리
String log_dir = request.getParameter("log_dir");
if(log_dir==null||log_dir.length()==0){
 log_dir = "/home/jeus5/logs/vmstest/";
}

StringBuffer sb = new StringBuffer();
RandomAccessFile read_file = new RandomAccessFile(log_dir+"/"+log_filename, "r");
long str_length = read_file.length();
long start_point = (end_point>0)?end_point:str_length;
read_file.seek(start_point);  
String str;
long file_point = start_point;
while((str = read_file.readLine()) != null){
 sb.append(toKorean(str)+"\n");
 file_point = read_file.getFilePointer();
 read_file.seek(file_point);  
}
read_file.close();
String log_data = sb.toString();
out.print(file_point+","+log_data);
%>



-------------------------------------------


--------------------------------------------

tail_log.jsp

--------------------------------------------


<%@ page contentType="text/html;charset=euc-kr" %>
<%@ page import="java.io.*" %>
<%!
public String toKorean(String param) {
 try{
  //param=new String(param.getBytes("ISO-8859-1"),"EUC-KR");
 }catch(Exception e){
 }
 return param;
}
%>

<%
//로그파일이 있는 디렉토리
String log_dir = request.getParameter("log_dir");
if(log_dir==null||log_dir.length()==0){
 log_dir = "/home/jeus5/logs/vmstest/";
}

//화면에 나타낼 로그파일 길이
long log_length = 100000;
//로그파일명
String log_filename = request.getParameter("log_filename") == null ? "": request.getParameter("log_filename");

// 디렉토리인 객체를 생성
File myDir = new File(log_dir);
// 디렉토리의 내용 구하기
File[] list_files = myDir.listFiles();

//파일시작위치
long start_point = 0;
//파일끝위치
long end_point = 0;
//파일내용
String log_data = "";
if(!log_filename.equals("")){
 StringBuffer sb = new StringBuffer();
 RandomAccessFile read_file = new RandomAccessFile(log_dir+"/"+log_filename, "r");
 //파일 길이를 구한다.
 long str_length = read_file.length();
 //파일을 읽을 위치를 정한다.
 start_point = (str_length<log_length)?0:(str_length-log_length);
 read_file.seek(start_point);  
 String str;
 end_point = str_length;
 while((str = read_file.readLine()) != null){
  sb.append(toKorean(str)+"\n");
  //파일을 읽고 마지막 위치를 알아낸다.
  end_point = read_file.getFilePointer();
  read_file.seek(end_point);  
 }
 read_file.close();
 //파일내용
 log_data = sb.toString();
}
%>

<HTML>
<HEAD>
<title>로그파일보기</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<style type="text/css">
<!--
a {text-decoration:none; color: black;}
a:link {text-decoration:none; color: black;}
a:visited {text-decoration:none; color: black;}
a:active {text-decoration:none; color: black;}
a:hover {text-decoration:none; color:black;}
body,table,tr,td {  font-family: "굴림"; font-size: 9pt; font-style: normal; color: black;}
-->
</style>
<script>
 //ajax를 위한 함수입니다.
 function getXmlHttpRequest(){
  var xmlhttp = false;
  // Mozilla/Safari
  if (window.xmlhttpuest) {
    xmlhttp = new xmlhttpuest();
  }
  // IE
  else if (window.ActiveXObject) {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  return xmlhttp;
 }
</script>
</head>

<body>
<table border="0" cellspacing="0" cellpadding="0" width="100%" height="100%">
 <tr height="10%">
  <td align="left" valign="bottom">
   <table border="0" cellspacing="0" cellpadding="0">
   <form name="fileform" method="post" action="tail_log.jsp">
    <tr>
     <td align="left" valign="bottom" height="20">
      로그파일을 tail -f 명령어 처럼 보여줍니다.
     </td>
    </tr>
    <tr>
     <td>
      <select id="log_dir" name="log_dir" onChange="window.Location='tail_log.jsp?log_dir='+this.options[this.selectedIndex].value">
      <option value="/home/jeus5/logs/vmstest/">개발서버      
      </select><script>document.fileform.log_dir.value="<%=log_dir%>";</script>
      <select name="log_filename">
       <option value="">파일선택</option>
       <%
       if (list_files != null) {
        for (int i = 0; i < list_files.length; i++) {
         if(!list_files[i].isDirectory()){
          String filename = list_files[i].getName();
          filename = filename.substring(filename.lastIndexOf("/")+1,filename.length());
       %>
       <option value="<%=filename%>" <%=log_filename.equals(filename)?"selected":""%>><%=filename%></option>
       <%
         }
        }
       }
       %>
      </select>
     </td>
     <td>
      <input type="submit" value="로그파일보기">
     </td>
    </tr>
   </form>
   </table>
  </td>
 </tr>
 <tr height="90%">
  <td>
   <table border="0" cellspacing="0" cellpadding="0" width="100%" height="100%">
   <form name="logform">
    <tr>
     <td><!--textarea id="log_data_area" name="log_data" style="width:100%;height:100%;"></textarea--><xmp id="log_data" name="log_data" style="text-overflow:ellipsis;overflow:auto;border:1 solid #000000;width:1300;height:100%"><%=log_data%>
     </xmp></td>
    </tr>
   </form>
   </table>
  </td>
 </tr>
</table>
<%
if(!log_filename.equals("")){
%>
<script>
 var end_point = <%=end_point%>;
function include_ajax_repeat(){
  var url = 'tail_log_ajax.jsp?log_filename=<%=log_filename%>&end_point='+end_point;
  //alert(url);
  var xmlhttp = getXmlHttpRequest();
  if(url){
   xmlhttp.open("GET", url, true);
   xmlhttp.onreadystatechange = function() {
    if(xmlhttp.readyState == 4) {
     if(xmlhttp.status == 200) {
      var resText = xmlhttp.responseText;
      //마지막 위치
      end_point = resText.substring(0,resText.indexOf(','));
      //새로운 로그 데이타
      var data = resText.substring(resText.indexOf(',')+1,resText.length);
      log_data.innerText = log_data.innerText + data;
      //일정한 양의 로그데이타만 남긴다.
      if(log_data.innerText.length><%=log_length%>) log_data.innerText = log_data.innerText.substring(log_data.innerText.length-<%=log_length%>);
      //스크롤 이동
      document.getElementById('log_data').scrollTop=document.getElementById('log_data').scrollHeight+<%=log_length%>;
      xmlhttp = null;
     } else {
      //alert("Error loading "+url+", "+xmlhttp.status+"("+xmlhttp.statusText+")");
      top.window.title="Error loading "+url+", "+xmlhttp.status+"("+xmlhttp.statusText+")";
      xmlhttp = null;
     }
    }
   }
   xmlhttp.send(null);
  } 
  setTimeout("include_ajax_repeat()", 2000);//msec 마다 서버와 통신함
  return false;
 }
 function include_ajax_repeat_old(){
  var url = 'tail_log_ajax.jsp?log_filename=<%=log_filename%>&end_point='+end_point;
  //alert(url);
  var xmlhttp = getXmlHttpRequest();
  if(url){
   xmlhttp.open("GET", url, true);
   xmlhttp.onreadystatechange = function() {
    if(xmlhttp.readyState == 4) {
     if(xmlhttp.status == 200) {
      var resText = xmlhttp.responseText;
      //마지막 위치
      end_point = resText.substring(0,resText.indexOf(','));
      //새로운 로그 데이타
      var log_data = resText.substring(resText.indexOf(',')+1,resText.length);
      document.logform.log_data.value = document.logform.log_data.value + log_data;
      //일정한 양의 로그데이타만 남긴다.
      if(document.logform.log_data.value.length><%=log_length%>) document.logform.log_data.value = document.logform.log_data.value.substring(document.logform.log_data.value.length-<%=log_length%>);
      //스크롤 이동
      document.getElementById('log_data_area').scrollTop=document.getElementById('log_data_area').scrollHeight+<%=log_length%>;
     } else {
      //alert("Error loading "+url+", "+xmlhttp.status+"("+xmlhttp.statusText+")");
      top.window.document.title="Error loading "+url+", "+xmlhttp.status+"("+xmlhttp.statusText+")";
     }
    }
   }
   xmlhttp.send(null);
  }
  setTimeout("include_ajax_repeat()", 2000);//msec 마다 서버와 통신함
  return false;
 }
 include_ajax_repeat();
</script>
<%
}
%>
</body>
</html>


---------------------------------------------------------


출처 : http://realcool.egloos.com/4778358

*** 주의사항

Clustering 환경에서는 경로를 반드시 파일로 부터 읽어 와야 한다.

안그럼 무자게 많은 error 가 발생함.

Posted by 1010
98..Etc/70.JEUS2009. 6. 22. 14:00
반응형

JEUS 5.0을 버전을 기준으로 하고 설치시 입력한 JEUS 관리자의 비밀번호는 jeusadmin이라고 전제한다.

JEUS 구동

주로 jboot, jdown이란 이름으로 스크립트를 작성하여 실행한다. 이 파일들의 실제 명령행은 다음과 같다.

  • jboot: jeus -Uadministrator -Pjeusadmin
  • jdown: jeusadmin -Uadministrator -Pjeusadmin jeusexit

jeusadmin console

jeusadmin 콘솔툴을 이용하여 JEUS 컨테이너기동/종료, 엔진리스트확인 등 JEUS 엔진의 상태를 제어 및 점검한다.

  • 콘솔 실행: jeusadmin 'hostname' -Uadministrator -Pjeusadmin
  • 명령 목록
    • allenglist: jeusadmin의 allenglist 명령은 현재 각 컨테이너의 엔진기동 상태를 보여준다.
    • downcon <container-name>: 지정된 컨테이너를 종료시킨다.
    • startcon <container-name>: 지정된 컨테이너를 기동시킨다.
    • pidlist: JEUS의 엔진 프로세스를 확인한다.

webadmin console

webadmin 콘솔은 JEUS의 컨테이너 내부에 기동된 서블릿 엔진의 상태를 모니터링하기 위한 명령프롬프트이다.

  • 콘솔 실행: webadmin <container-name> -Uadministrator -Pjeusadmin
  • 명령 목록
    • ti: ti는 Thread Information의 약자로 JEUS 서블릿 엔진의 컨텍스트그룹 내부의 Worker Thread의 상태를 체크하기 위한 명령어이다.
    • st -m: 현재 Container의 JVM Memory 사용 현황
    • st -r: 설정한 Context로 들어온 요청 count와 평균처리시간
    • st -s: 현재 유지하고 있는 세션 객체의 수

webadmin 반복 모니터링

webadmin 내의 모니터링 명령어를 주기적으로 자동실행하게 하려면 다음과 같은 형식으로 명령어를 실행한다.

  • <command> -i 주기(초) -k 횟수
  • 예) ti -i 2 -k 10 : ti 명령어를 2초 간격으로 10번 수행

dbpooladmin console

dbpooladmin 콘솔은 컨테이너별로 할당된 Database Pool의 상태를 모니터링하기 위한 명령프롬프트이다.

  • 콘솔 실행: dbpooladmin<container-name> -Uadministrator -Pjeusadmin
  • 명령 목록
    • Info: 해당 컨테이너에서 관리되고 있는 Database Pool의 정보가 표시된다.
    • min, max 값은 JEUSMain.xml에 설정한 Pool의 최소/최대값이며 current는 현재 풀에 보관되고 있는 실제 커넥션의 수, idle의 풀에 보관되고 있는 커넥션중, 사용가능한 개수를 의미한다.

JEUS 웹 관리자

http://hostname:9744/webadmin 로 접속하여 administrator/jeusadmin 계정으로 로그인한다.

사용자 삽입 이미지

JEUS 웹 관리자

JEUS 장애 처리

JEUS 프로세스ID (PID) 확인

JEUS의 엔진 프로세스는 다음과 같이 2가지 방법으로 확인할 수 있다.

  • ps -ef | grep java
    • -Xmx512m 이후 부분을 확인하여 JEUS Manager 프로세스임을 확인한다.
    • [-D컨테이너이름]을 이용하여 컨테이너 프로세스임을 확인한다.
  • jeusadmin 콘솔툴을 이용한 PID 확인
    • pidlist: pidlist 명령을 사용하여 PID를 확인한다.

JAVA Dump

  • 덤프 생성: kill -3 [JEUS-PID]
  • 덤프 확인: JEUS JAVA프로세스에서 생성한 덤프는 JeusServerLog에서 확인한다.
    • 예) vi $JEUS_HOME/logs/`hostname`/JeusServer_20070201.log
WebtoB 운영 및 관리

WebtoB 구동

  • wsboot
  • wsdown-I : ps -ef을 이용하여 wsm, hth, htl, html 등의 프로세스가 나타나지 않으면 정상 종료

wsadmin console

WebtoB 시스템을 관리하기 위해서 wsadmin이라는 프로그램이 제공된다. wsadmin 프로그램은 UNIX 환경의 shell과 비슷한 Command Interpreter 이다. 즉, 항상 프롬프트상태로 대기중이다가 입력되는 명령어를 해석하여 이를 실행하게 된다. 여러 Node를 한 Domain으로 사용하는 경우 wsadmin으로 전체를 중앙관리가 가능하며 각 Node 별로 로컬에서만도 관리가 가능하다.

  • wsadmin
  • 명령 목록
    • ci: 요청에 대한 현재 클라이언트 정보를 표시한다. HTH당 접속한 클라이언트의 KeepAlive 되어있는 개수를 보여준다. WebtoB단에 요청을 보내고 HTTP Session의 KeepAliveTimeout 전까지 유지되고 있는 클라이언트의 총 개수 정보이다.
    • ci -s: 현재 클라이언트의 전체 수를 표시한다.
    • si: 웹서버 환경설정 파일에서 *SERVER 절에 선언한 서버들의 수행정보를 보여준다.
    • st -s: 웹서버 환경설정 파일에서 *SERVER, *URI, *EXT 절에 설정한 서비스의 상태가 보인다.
    • st -p: WebtoB 프로세스의 상태를 표시한다. 주로 JEUS-WebtoB간 연동 상태를 확인할 때 사용한다.

wsadmin 명령 연속 보기

ci, st -s, st -p, si 등의 명령어를 다음과 같이 수행하면 주기적으로 WebtoB의 상태를 모니터링할 수 있다.

  • r -i <시간(초)> -k <횟수> <명령>
  • 예) r -i 1 -k 1000 st -s
JEUS alias 설정

.profile 참고

...
export JEUS_HOME=/jeus
...
#### JEUS alias ####
alias ja='jeusadmin `hostname` -Uadministrator -Pjeusadmin'
alias ea='ejbadmin `hostname`_ejb_engine1 -Uadministrator -Pjeusadmin'
alias wa='webadmin `hostname`_container1 -Uadministrator -Pjeusadmin'
alias da='dbpooladmin `hostname`_container1 -Uadministrator -Pjeusadmin'
alias ti='webadmin `hostname`_servlet_engine1 -Uadministrator -Pjeusadmin ti -i 3 -k 100000'
alias ss='webadmin `hostname`_servlet_engine1 -Uadministrator -Pjeusadmin st -s -i 3 -k 100000'
alias sd='webadmin `hostname`_servlet_engine1 -Uadministrator -Pjeusadmin st -d -i 3 -k 100000'
alias di='dbpooladmin `hostname`_container1 -Uadministrator -Pjeusadmin info -i 3 -k 100000'

alias jcfg='cd ${JEUS_HOME}/config/`hostname`'
alias jbin='cd ${JEUS_HOME}/bin'
alias scfg='cd ${JEUS_HOME}/config/`hostname`/`hostname`_servlet_engine1'
alias ecfg='cd ${JEUS_HOME}/config/`hostname`/`hostname`_ejb_engine1'

alias jhome='cd ${JEUS_HOME}'
alias lhome='cd ${JEUS_HOME}/logs'

alias jlog='tail -f ${JEUS_HOME}/logs/`hostname`/JeusServer_`date +%Y%m%d`.log'
alias alog='tail -f ${JEUS_HOME}/logs/`hostname`_servlet_engine1/MyGroup/accesslog/access_`date +%Y%m%d`.log'
alias elog='tail -f ${JEUS_HOME}/logs/`hostname`_servlet_engine1/MyGroup/errorlog/error_`date +%Y%m%d`.log'
alias ulog='tail -f ${JEUS_HOME}/logs/`hostname`_servlet_engine1/MyGroup/userlog/user_`date +%Y%m%d`.log'

...
http://kyungseo.pe.kr/blog/102 
Posted by 1010
98..Etc/70.JEUS2009. 6. 2. 12:54
반응형

안녕하세요~ 은양입니다.


이번시간에 할 내용은 JEUS설치하기입니다.


http://www.tmax.co.kr 여기에서 받으시면 되구요.. JEUS6.0까지 나온듯 한데...


여기에서 사용할 버젼은 JEUS5.0입니다.



자, 그럼 설치를 시작해 볼까요..?


이미지를 클릭하시면 원본크기로 보실수 있습니다.

처음 실행파일을 실행하면 나오는 화면인데요..


그냥 아무생각없이 NEXT..



이미지를 클릭하시면 원본크기로 보실수 있습니다.



동의하시고.. NEXT!!


이미지를 클릭하시면 원본크기로 보실수 있습니다.

제우스 설치폴더 지정하는건데요..


그냥 기본폴더를 사용하겠습니다. NEXT!!


이미지를 클릭하시면 원본크기로 보실수 있습니다.

Full Install 선택하시고.. NEXT!!


이미지를 클릭하시면 원본크기로 보실수 있습니다.


그러면 위와같이 윈도우 시작시 서비스 시작할꺼냐고 묻는데요...  "NO" 선택하죠..


이미지를 클릭하시면 원본크기로 보실수 있습니다.

JDK 설치폴더를 지정합니다..

당연히 JDK먼저 설치후에 JEUS를 설치해야겠죠..? ^^

NEXT!!


이미지를 클릭하시면 원본크기로 보실수 있습니다.

패스워드를 물어보네요

AJAXMASTER 라고 해볼께요.. 뭐, 패스워드는 아무렇게나 넣어도 상관없습니다.

단, 7자 이상...

NEXT


이미지를 클릭하시면 원본크기로 보실수 있습니다.

여태까지 입력했던 사항 확인하시구요

Install ~~


이미지를 클릭하시면 원본크기로 보실수 있습니다.

자.. 설치가 진행중입니다..


이미지를 클릭하시면 원본크기로 보실수 있습니다.

완료되면 QuickStart할거냐고 물어보는데.. 그냥 나중에 보죠..

NO!!


이미지를 클릭하시면 원본크기로 보실수 있습니다.


자, 여기까지 됐다면.. JEUS는 성공적으로 설치가 되었습니다.



실제 폴더로 한번 가볼까요..


이미지를 클릭하시면 원본크기로 보실수 있습니다.

TmaxSoft 밑에 JEUS5.0 폴더 밑에 webhome 밑에 app_home밑에 한번 가보시죠...

여기가 앞으로 실제 작업을 하게될 폴더입니다.


자, 이제 설치를 하였으니 실행을 시켜야겠죠...


시작-실행-cmd 로 명령프롬프트 콘솔창을 실행시키겠습니다.


이미지를 클릭하시면 원본크기로 보실수 있습니다.


실행시킨후에 JEUS라고 쳐보겠습니다.


이미지를 클릭하시면 원본크기로 보실수 있습니다.

그러면, 위와같이 뭐라고뭐라고 막 실행한후에 마지막부분에


JeusServer is Ready라는 문구를 볼수 있을겁니다.  여기까지 되었다면 정상적으로 Jeus Server까지 실행이 된것이죠...^^




자, 이제 인터넷 익스플로워를 하나 띄운후에요....


다음과 같이 입력해 봅니다.


http://localhost:9744/webadmin


이미지를 클릭하시면 원본크기로 보실수 있습니다.

그러면 위와같은 화면이 보일텐데요..


USER NAME에는 administrator을 넣구요

PASSWORD에는 위에서 설치할때 주었던 패스워드 기억나시죠....

저는 AJAXMASTER라고 했었는데요.. 그것을 넣어주면 됩니다.. 그리고 OK!!


이미지를 클릭하시면 원본크기로 보실수 있습니다.


성공적으로 로그인이 되었다면 위와같은 화면을 볼수 있을겁니다.


여기에서 제우스 노드트리에 보면 자기 컴퓨터 이름이 보이는데요..  오른쪽 버튼을 눌러보면


JEUS 노드제어라는것이 있습니다.  이것을 클릭..!!


이미지를 클릭하시면 원본크기로 보실수 있습니다.

그러면 위와같이 가능한 노드가 나오는데요.. 자기 컴퓨터 이름 체크하후에 "확인" 버튼을 눌러줍니다.


이미지를 클릭하시면 원본크기로 보실수 있습니다.

위와같이 성공적으로 부트되었다는 메세지가 뜨죠..?


이제 실제 접속을 해보겠습니다.


http://localhost:8088/


이미지를 클릭하시면 원본크기로 보실수 있습니다.

어떻습니까... 위와같은 화면이 보이시나요? ㅋ


자, 이제 저위에 제우스웹관리자에서 다운 및 종료를 해보시구요...


실제 이과정은 Command 창에서 실행할 수 있습니다.



도스창을 하나더 실행시키구요.. 다음과 같이 입력합니다.

jeusadmin 자기컴퓨터이름  <== 요렇게 입력하면되죠..

이미지를 클릭하시면 원본크기로 보실수 있습니다.


이 화면에서.. 다음과 같이 아이디,암호를 입력합니다.

이미지를 클릭하시면 원본크기로 보실수 있습니다.

아이디는 administrator이구요

패스워드는 AJAXMASTER이겠죠..


이상태에서 boot라고 입력하면 이전에 띄워놓았던 도스창화면이 막 바뀌면서 실제 부트가 될것입니다.


그리고, 부트가 완료되면


이미지를 클릭하시면 원본크기로 보실수 있습니다.


위와같이 boot done이라는 메세지가 보이게 되는거죠....


종료하고 싶을때는 "down"이라고 치시면 되구요..  완료후에 나갈때는 "exit" 하면 됩니다.



자, 여기까지 한후에 다시 http://localhost:8088/로 테스트 해보시구요..


오늘은 여기까지만 하구요.. 다음시간에는 DB를 하나 만든후에 Connection Pool 연결하는 방법에 대해서

소개해드리겠습니다. 그럼 이만..ㅃㅃ

출처 : http://club.paran.com/club/home.do?clubid=eypgworld-bbsView.do?menuno=2922748-clubno=1078741-bbs_no=0QWZk

Posted by 1010
98..Etc/70.JEUS2009. 6. 2. 12:50
반응형

jeus 설치


.jeus 나 sh 를 사용해 해당 파일을 실행.

5 : 테스트나 일반적 용도시

6 : 웹서비스 할 때, HP-UX는 꼭 Jesu 6버전...버그 있어서


JDK는 무조건 1.5 (1.4도 상관없으나, 1.6은 지원 안함)

1.5가 성능이 좋음.

유닉스 시스템이 많다.


설치시 2가지 중요..

dependency와 dB 로그 최소 10 G 이상의 DB공간

UTF-8 : 가장많이 사용하나 ,,, 일본어와 중국어 는 깨지는 수가 있음. 일본어는 그나마 괜찮음.

ex) LANG=ko_KR.euckr ; export LANG
LC_ALL=ko_KR.euckr ; export LC_ALL


ProFrame 설치하면 JEUS 설정 파일이 수정된다.

백업하라.

cp -rp dest source

cp -rp config config.20080804

rp 레커시브하게 권한으로? 백업?

항상 백업하라. 날짜를 붙이면 편하다.


설치시 설치 폴더에서 simpleInstall.sh를 실행하라.


Oracle 버전에 따라 수정해야한다.

MS-SQL은 지원하지 않는다.(드라이버에 버그)


1.Install Directory
proframe_dir=/home/proframe/proframe -> ProFrame 설치경로. 압축해제시 나온 proframe 디렉토리의 Full Path를 입력
jeus_dir=/home/proframe/jeus5 -> 설치해 놓은 JEUS 의 설치경로( ${JEUS_HOME} 과 동일)
2. DB 관련 설정
# DB Info
DB_VENDOR=oracle -> DB 의 Vendor 를 설정한다. DB 에 따라서 사용되는 Query 및 DB 접속정보가 결정된다.
db_oracle_9i=false -> 사용하려는 DB 가 Oracle 9i 인 경우에는 true 로 설정하고, 그 외에는 false 로 둔다.
dbserverip=192.168.0.0 -> DB Server 의 IP
dbserverport=1521 -> DB 의 Service Port
dbserverid=proframe -> ProFrame 4 Java용으로 DB 에 생성한 User
dbserverpwd=proframe -> ProFrame 4 Java용으로 DB 에 생성한 User 의 Password
dbserversid=ora10 -> DB Server 의 ID. Oracle 의 경우 SID, 다른 DB 의 경우 Service Name 또는 Server Name
3. ProFrame WAS 의 포트정보 설정
# ProFrame Port Info
pfm_admin_port=9876 -> ProFrame 4 Java의 admin이 사용할 Port. http://서버IP:9876/proframeAdmin으로 접속한다.
devsvr_port=33323 -> ProFrame 4 Java의 통합개발서버가 사용할 Port.
ProBuilder에서 Project 생성시 사용하는 Port
ippr_port=5020 -> ProFrame 4 Java의 통합개발서버가 변경사항 발생시 Notify 를 주는 port
4. 그 외의 설정들은 특별한 문제가 없다면 기본값을 그대로 사용한다.




1.개발 아키텍쳐 개요


2.통합 개발 환경 관리 - 통합 개발 서버



메모리 1G 이상..

하드디스크 1G이상 ..여유공간.


145번 패치 설치

현재 160번 까지 나옴.


33323

test10 / test10

PROJECT_TEST10



5.오브젝트 생성


PO : pattern Object



1.로컬 디버거

로컬에서 디버깅을 할수 있다..

하지만 로컬 디버깅 할 소스와 파일들을 모두 다운 받아 재구성 해야한다. (패치나와도 다시해야함)


제우스 설정과 , 환경설정 파일 다운 받는다.

Windows\System32\dirvers\etc\hosts 파일을 열어 프로프레임 설치 서버 IP 와 HostName입력




DBIO

  • DataBase Input/Output
    - 데이터베이스를 쉽고 일관된 API로 접근할 수 있도록 해주며 업무컴포넌트 개
    발시에 데이터베이스 벤더에 관계없이 코딩할 수 있도록 해준다.

DTO


- Data Transfer Object
- Java Object, DBIO 를 호출하기 위한 IN, OUT 객체로 사용된다.


BO

- Business Object
- 비즈니스 기능을 수행하는 재사용성의 단위로서 Service Object에서 레퍼런스
호출 되며 정보 처리 및 계산 그리고 DBIO 호출 후 데이터 가공 등을 수행한다.



DTO

Data Transfer Object
- Java Object, DBIO 를 호출하기 위한 IN, OUT 객체로 사용된다.


SO

- Service Object - 외부에 오퍼레이션을 노출할 수 있는 리소스 단위로서 단위
트랜잭션 수행의 단위이며 IPPR을 통해 분기되어 호출된다.주로 Business
Object를 Orchestration(통합)하는 Flow 중심 어플리케이션이다.


PROMAPPER

입출력 전문을 정의하고 전문클래스를 생성하고 전문데이타를 받아서 객체로 변
환하거나 객체를 전문데이타로 변환하는 등의 일을 수행한다.




EMB

Enterprise Module Bus의 약자로 서비스 모듈이 만들어지면, 그 모듈들을 조합하
여 다양한 새로운 서비스를 만들 수 있는 서비스 기반의 아키텍처이다.


메가 플로우 마이크로 플로우, 인터 soa intra soa



Deployment Descriptor

  • Service Object 작성이 끝나면 Deployment Descripter를 실행해야 한다.
    - 개발 어플리케이션에 대한 명세


어플리케이션

  • 업무적으로 연관있는 서비스를 그룹핑하여 패키징, Deploy하는 단위.
    (EJB Class 의 DD 명세를 작성하는 것과 의미적으로 유사하다.)
    어플리케이션을 생성하고





2.서비스 작성 절차

1 Service 설계 - 서비스 처리에 대한 설계서 작성
- DTO Class에서 사용하는 멤버 변수의 이름을 메타 시스템에 등록
- DTO Class 구조정의


2.DTO 객체정의

3 DBIO 정의


4 BO 정의


5 SO 정의


DTO(Data Transfer Object)


1. 개요
- DTO는 클래스 호출을 위하여 의미 있는 값을 전달할 수 있는 구조를 정의
2. 메타등록
- 사용할 변수는 사전에 메타에 등록되어야 한다. 보통 DB CRUD를 위해 사용되므
로 DB에 정의된 칼럼을 사전에 메타 시스템에 등록하여 사용하는 것을 권장한다.
- 메타를 등록하려면 ProframeAdmin 에 접속한 후
Integrated Development Server > Meta Management 화면을
이용하면 된다.



4. DBIO(DataBase Input/Output)

  1. 개요
    - ProFrame에서 제공하는 데이터베이스 접근에 관한 표준적인 방법으로 데이터베
    이스의 데이터를 Control 하는 Class이다.
    2. 특징
    ⓐ DB 접근 방식을 표준화한다. ⓑ DB 접근 시 일괄된 에러 처리를 지원한다.
    ⓒ DBMS 벤더에 대한 의존성을 배제할 수 있다.
    ⓓ 중복된 데이터 베이스 프로그램을 최소화한다.
    ⓔ 업무로직과 DB 접근 로직에 신경 쓰지 않고 업무로직에 전념할 수 있다.
    ⓕ Tool을 이용하여 생산성 향상시키고 오류 가능성을 줄여준다.


Persist SELET/UPDATE/INSERT/DELETE 단일테이블

View SELECT(조인, 서브쿼리) 여러 테이블

Execute INSERT/UPDATE/DELETE Persist 에서 지원할 수 없는 범위에서 수행


5.BO(Business Object)

1. 개요
- 비즈니스 기능을 수행하는 재사용성의 단위로서 Service Object 에서 레퍼런스 호
출되며, 정보 처리 및 계산 그리고 DBIO 호출 후 데이터 가공 등을 수행한다.
2. BO 작성하기
- 패키지탐색기 > 오른쪽 마우스클릭 > 새로작성 > Business Object
- Add on Operation : public 메소드 생성
- BO의 입출력 DTO를 선택
- 생성된 public method를 더블 클릭하여 EMB 디자이너 창으로 이동
- EMB 디자이너 창에서 Palette을 열어서 inner 모듈 등록
- Object Pool을 검색하여 등록된 DBIO를 Drag&Drop
- DBIO 선택 후 속성창에서 DBIO Call을 설정


6.SO(Service Object)

  1. 개요
    - 외부에 오퍼레이션을 노출할 수 있는 리소스 단위로서 단위 트랜잭션 수행의 단위
    이며 IPPR을 통해 분기되어 호출, BO를 Orchestration 하는 Flow 중심 어플리케
    이션이다.
    2. SO 작성하기
    - 패키지탐색기 > 오른쪽 마우스클릭 > 새로작성 > Service Object
    - Add on Operation : public 메소드 생성
    - SO의 입출력 DTO를 선택
    - 생성된 public method를 더블 클릭하여 EMB 디자이너 창으로 이동
    - EMB 디자이너 창에서 Palette을 열어서 inner 모듈 등록
    - Object Pool을 검색하여 등록된 BO를 Drag&Drop

SO가 비즈니스 로직을 오케스트레이션 함 SOA 에서 사용 웹 서비스

BO를


7.Application Deploy

  1. Deployment 절차
    - 작성된 리소스를 모두 커밋
    - Service Object 작성이 끝나면 Deployment Descripter를 실행
    - Deployment Descripter를 한 후에 작업한 프로젝트 Meta-INF에
    proframe-application.xml을 커밋

절차 시험엔 안나옴.

 커밋 : 로컬의 수정 사항을 서버로 전송.

체크인  :  DB 가꼬감.

체크 아웃 :

동기화 : 최신 버전으로 맞춘다.


8.Service Test(1/2)

ppt 4번 ..

Posted by 1010
98..Etc/70.JEUS2008. 10. 30. 10:23
반응형

제우스 설치

  1. JEUS_HOME, JAVA_HOME 설정
  2. CLASS_PATH 설정된거 삭제

제우스 실행

  1. 제우스 실행(2step 부팅)

    1. cmd에서 jeus 입력
    2. jeus webadmin에서 노드명에서 오른쪽 클릭후  노드제어에서 boot 함.


  2. 제우스 shutdown

    1. jeus webadmin에서 down 후 종료시켜줌.


  3. 제우스 1step 부팅

    1. %JEUS_HOME%/bin/jeus.properties.cmd  에서 다음을 설정함.(띄어쓰기 하지 말것) - 74라인 근처
  1. rem Set up administrator name
  2. SET USERNAME=
  3. rem Set up administrator password
  4. SET PASSWORD=

 2. cmd 에서 jeus 실행. cmd 화면에서 one-step 성공했다는 메시지를 볼 수 있음.


Jeus admin 페이지 접속

 http://localhost:9744/webadmin/ : jeus webadmin




수동으로 Context 설정

  1. %JEUS_HOME%\webhome\app_home\ 밑에 context로 사용할 폴더 작성 (여기서 webtest로 작성함)
  2. 사용할 context 폴더 밑에 WEB-INF 폴더 생성 WEB-INF밑에 web.xml 파일을 생성

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee">
    3. <display-name> Welcome </display-name>

    4. <welcome-file-list>

    5. <welcome-file>index.html</welcome-file>

    6. </welcome-file-list>

    7. <session-config>

    8. <session-timeout>30</session-timeout>

    9. </session-config>

    10. </web-app>
  3.  jeus-web-dd_컨테스트명.xml 설정 (여기선 jeus-web-dd_webtest.xml) : 패스 설정을 위한 부분

    1. <?xml version="1.0" encoding="UTF-8"?>
      <jeus-web-dd xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
              <context-path>/webtest</context-path>
              <auto-reload>
                  <enable-reload>true</enable-reload>
                  <check-on-demand>true</check-on-demand>
              </auto-reload>
      </jeus-web-dd>
  4.  3번에 설정한 파일을 WEBMain.xml위치와 같은 위치에 넣어줌. (WEBMain.xml위치 : %JEUS_HOME%/config/PC명/PC명_servlet_engine1)
  5. JEUSMain.xml 수정(JEUSMain.xml 파일 위치 : %JEUS_HOME%/config/컴퓨터이름 에 위치) : application 등록의 의미

    1. <application>
              <name>webtest</name>
              <path>/webtest</path>
              <deployment-target>
               <target>
                      <engine-container-name>passion05_container1</engine-container-name>
                      <web-context-group>
                          <name>MyGroup</name>
                      </web-context-group>
                  </target>
              </deployment-target>
              <deployment-type>EAR</deployment-type>
          </application>

  6. 서버 다운후 재 부트
  7. 부트 콘솔에서 해당 context 이름이 올라가는지 확인.




    Tomcat에서의 설정과 동일.

    1. //web.xml
    2. <servlet>
         <servlet-name>hello</servlet-name>
         <servlet-class>examples.HelloWorldServlet</servlet-class>
      </servlet>
      <servlet-mapping>
         <servlet-name>hello</servlet-name>
         <url-pattern>/hello</url-pattern>
      </servlet-mapping>
Posted by 1010