server.xml 의 GlobalResources 에서 JNDI 설정 한 경우,
각각의 Context 내에서 ResourceLink 를 만들어 줘야 한다!!

그리고, web.xml 에서 resource-ref 를 주어야 한다.

http://kwon37xi.egloos.com/2852803 참고하자
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

Tomcat 에 Application 별로 다른 포트를 할당하여 띄우려고 하는 경우, 간단히 Server 내에 Service 를 추가하는 방법이 있다. 인터넷에 도메인 네임 별로 호스트를 주는 방법은 많은데 요건 없어서 적어본다.

Tomcat 6 기준이지만, 이하 버전에서도 동일하게 작동할것이라 굳게 믿는다.

Tomcat 은 server.xml 구조가 기본적으로,
<Server>
<Listener [n]/>
<GlobalNamingResource>
</GlobalNamingResource>
<Service [n]>
<Connector [n]/>
<Engine>
<Realm [?]/>
<Host [n]>
<Context [n]>
<Resource [n]/>
</Context>
</Host>
</Engine>
</Service>
</Server>


위와 같은 구조로 server.xml 을 구성할 수 있다. [n] 은 복수개가 올 수 있다는 것이다.
그래서, Service 를 여러개 만들면, 다른 포트를 가질 수 있는 커넥터와 묶인 Host 를 만들 수 있다.

대충 이런구조가 될 수 있다.

<Server port="8005" shutdown="SHUTDOWN">

  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JasperListener" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <Service name="Catalina">

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    <Engine name="Catalina" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="false"
            xmlValidation="false" xmlNamespaceAware="false">

      </Host>
    </Engine>
  </Service>

  <Service name="Hudson">
    <Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8"/>
    <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />

    <Engine name="Hudson" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>

      <Host name="localhost"  appBase="hudson_webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
      <Context displayName="hudson" docBase="/home/apps/hudson/war"
            path="" workDir="" />

      </Host>
    </Engine>
  </Service
>
</Server>



저러면 8080 으로 서비스 하는 host 와 8081 로 서비스하는 Host 가 각각 하나씩 뜨게 된다.
그런데 Tomcat Instance 는 하나라서 성능이 어떻게 될지는 장담하지 못한다는거~
실제 운영환경에서는 Tomcat 을 별도로 띄우는게 더 좋을듯 하다.

반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

오늘 이노무것 땜에 스트레스 좀 받았다. 조금만 로그를 자세히 봤었으면 좋았을것을..^^;;

디렉토리 기반으로 배포하도록 Context 를 server.xml 에 추가했는데 자꾸 아래와 같이 에러가 떨어지더라..

2010. 2. 10 오전 12:43:22 org.apache.catalina.core.AprLifecycleListener init
정보: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/local/jdk1.6.0_18/jre/lib/amd64/server:/usr/local/jdk1.6.0_18/jre/lib/amd64:/usr/local/jdk1.6.0_18/jre/../lib/amd64:/lib:/usr/lib:/usr/local/lib:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2010. 2. 10 오전 12:43:22 org.apache.tomcat.util.digester.SetPropertiesRule begin
경고: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'docbase' to '/home/was/sample/simple' did not find a matching property.
2010. 2. 10 오전 12:43:23 org.apache.coyote.http11.Http11Protocol init
정보: Initializing Coyote HTTP/1.1 on http-8080
2010. 2. 10 오전 12:43:23 org.apache.catalina.startup.Catalina load
정보: Initialization processed in 864 ms
2010. 2. 10 오전 12:43:23 org.apache.catalina.core.StandardService start
정보: Starting service Catalina
2010. 2. 10 오전 12:43:23 org.apache.catalina.core.StandardEngine start
정보: Starting Servlet Engine: Apache Tomcat/6.0.24
2010. 2. 10 오전 12:43:23 org.apache.catalina.core.StandardContext resourcesStart
심각: Error starting static Resources
java.lang.IllegalArgumentException: Document base /home/was/apache-tomcat-6.0.24/webapps/simple does not exist or is not a readable directory
        at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:142)
        at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4086)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4255)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
        at org.apache.catalina.core.StandardService.start(StandardService.java:516)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:593)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)


처음에는, "왜자꾸 TOMCAT_HOME/webapps 에서 Context 를 로드하려고 하니 얘가.. docbase 도 세팅해줬는데.." 했건만, 결론은, server.xml 에 대소문자 하나때문에 일어난 일이었다..

<Context displayName="simple" docbase="/home/was/sample/simple"
      path="/simple" workDir="" reloadable="true"/>

저 docbase 가 잘못되었었다.. docbase 가 아니고 docBase 인데.. 이런 실수를..ㅜㅜ



반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

* BootStrap -> Extensions -> System ClassLoader -> Application 별 ClassLoader 순으로 Chain 생성 됨

* Application 을 Deploy 할 때 마다, 별도의 Class Loader 를 생성하며, Parent 를 System ClassLoader 로 지정한다.

* WebLogic 의 Application ClassLoader 는 3가지 종류 임 (EJB-JAR, WAR, EAR)

- EJB-JAR : 각 EJB Jar 파일 당 1개의 ClassLoader 생성함. 그래서 다른 JAR 파일의 클래스 Instance 는 참조 불가 함.

- WAR : 일반적으로, 보통의 ClassLoader 와 같이 우선순위를 갖으나, WEB-INF/classes 와 WEB-INF/lib 디렉토리의 클래스에 한하여, Parent ClassLoader 보다 WAR ClassLoader 가 우선순위를 갖도록 지정할 수 있다. PreferWebInfClasses 옵션을 true 로 설정하면 가능하다.

- EAR : EAR 로 배포 구조를 갖게되면, WAR ClassLoader 와 EJB-JAR ClassLoader 가 Delegation 관계를 갖으며 생성된다. 즉, EJB-JAR ClassLoader 를 통해 WAR ClassLoader 가 생성되어, WAR ClassLoader 가 EJB ClassLoader 의 Child 가 되므로, WAR 가 EJB 를 사용할 수 있게 되는것이다.
* ClassLoading 순서 : cache 점검 -> 없으면 부모에게 로드 위임 -> 부모 로드 못하면 자신이 로드
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

웹로직 9.0 이상에서 가능

EAR 로 배포 되어야 한다.

/EAR_TEST/EarContent/META-INF/weblogic-application.xml 내에

<wls:session-descriptor>
    <wls:sharing-enabled>true</wls:sharing-enabled>
</wls:session-descriptor>

과 같이, 설정 되어야 한다.

WAR 가 EAR 바깥에 있는 경우는, Eclipse 의 플러그인으로 말고는 현재로서는 EAR 안쪽으로
.war 로 묶어 배포하는 것 밖에는 없다(윈도우 기준).

UNIX 에서는 심볼릭링크로 abc.war 라는 이름으로 디렉토리 링크 걸어서 가능하단다.(아직 테스트 못해봄)
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,
이노무 Tomcat 은 JNDI 등록때문에 받는 스트레스가 심하다. 버전에 따라 JNDI 등록하는 방법이 다르기 때문인데
이번에는 Tomcat 5.5 를 기준으로 한다.

인터넷 검색 해보면 각양 각색으로 설명이 틀린데, 뭐 META-INF 에 context.xml 을 작성해라, server.xml 만 작성하면 된다는 등등.. 그런데 왜 난 잘 안되는걸까..

결론부터 말하자면, Tomcat 5.5 에선, server.xmlweb.xml 에 모두 설정을 해줘야 한다.

server.xml 설정

<GlobalNamingResources> ... </GlobalNamingResources> 내 이건, <Host> 내의 <Context>... </Context> 이건 관계 없이 아래와 같이 설정한다

[Derby]

<Resource description="Test database connection" name="jdbc/testDs"
 auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30"
 maxWait="10000" username="userid" password="password" driverClassName="org.apache.derby.jdbc.ClientDriver"
 url="jdbc:derby://localhost:1527/C:/MyDevTool/bin/db-derby-10.4.2.0/officedb" />

[MySQL]
<Resource description="Test database connection" name="testDs2"
 auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30"
 maxWait="10000" username="userid" password="password" driverClassName="com.mysql.jdbc.Driver"
 url="jdbc:mysql://localhost:3306/my_db?autoReconnect=true" />

web.xml 설정

server.xml 만 설정해서 되는건 아니고, web.xml 도 설정 해줘야 하는데, 이놈때문에 좀 해멨다.
web.xml 의 가장 마지막 정도에 아래와 같이 정의해줘야 한다.

[Derby]

 <resource-ref>
        <description>DB Connection</description>
        <res-ref-name>jdbc/testDs</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

[MySQL]
 <resource-ref>
        <description>DB Connection</description>
        <res-ref-name>jdbc/testDs</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

이렇게 server.xml / web.xml 두가지를 해줘야 정상 작동 한다.

그리고, Tomcat 에서도, name 을, jdbc/testDs 로 하지 않고
testDs 로만 설정 해줘도 잘 동작 한다.


반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

Jeus 에는 BASEPORT 를 기반으로 하여 자동 계산되어 지정되는 포트가 많은 편이다.
기본 포트를 포함하여, 자동 지정되는 포트들은 아래와 같다.

Jeus 6 기준임

 이름  기본 포트  설명
 BASEPORT  9736  JEUS Manager가 JNDI 서비스 및 운영을 위해 필요한 기본 서비스 포트
 COS Naming Server Port  BASEPORT + 4 (e.g. 9740)  COS Naming 서비스를 위해 사용하는 포트
 WebAdmin Port  BASEPORT + 8 (e.g. 9744)  /webadmin 으로 접속
 엔진 컨테이너 BASEPORT  BASEPORT + 15 + (엔진 컨테이너 ID * 10)  엔진 컨테이너별 기본 서비스 포트
 ORB Port  엔진 컨테이너 BASEPORT + 1  IIOP 포트
 ORB SSL Port  엔진 컨테이너 BASEPORT + 2  IIOP SSL 포트
 ORB SSL Mutual Authorization Port  엔진 컨테이너 BASEPORT + 3  IIOP 상호인증 포트
 HTTP Port  8088  
 EJB RMI Port  엔진 컨테이너 BASEPORT + 7 or 엔진 컨테이너 BASEPORT  EJB를 접근하기 위한 RMI 포트. use-baseport 설정이 있는 경우 Container BASEPORT를 사용
 JMS 엔진 Port  9741 or 엔진 컨테이너 BASEPORT  JMS 서비스 포트. oneport 설정시 Container BASEPORT를 사용



 
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,
apache 는 2.2 를 사용한다라는 가정 하에, php 5.2.11 을 설치해본다.

apache 는, /usr/sbin 에 bin 이 설치되었다라고 가정한다.

1. 다운로드 및 tar.gz 압축 풀기
 이 과정은 뭐 별도 설명 없어도 가능하다라는 가정 하에 진행한다.
 wget 으로 받아놓고, 압축 풀면 되겠다.

2. configure 설정

./configure --prefix=/usr --with-apxs2=/usr/sbin/apxs --with-config-file-path=/etc --with-mysql=/usr --with-exec-dir=/usr/sbin --with-zlib --with-gd --with-ttf --with-png --with-jpeg-dir --with-iconv


--with-apxs2 : apache 에 DSO 모듈로 등록하겠다는 이야기이고, apache 설치할 때 깔린 apxs 파일의 경로 써주면 됨.
--with-config-file-path : php.ini 파일의 경로
--with-mysql : mysql 설치된 home
--with-exec-dir : apache 의 bin 디렉토리
나머지는 알아서..

3. make

4. make install

하고 나면, 대충 install 은 된다.

[설정]

1. httpd.conf 에 설정하기

LoadModule php5_module modules/libphp5.so

#
# Cause the PHP interpreter to handle files with a .php extension.
#
AddHandler php5-script .php
AddType text/html .php

#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php

위와 같은 내용을 httpd.conf 에 혹은 별도 외부 .conf 에 정의 후에 include 하여야 한다.

하다보니,
내 Ubuntu 의 Apache 2.2.11 의 경우,. conf/httpd.conf 와 conf/extra 디렉토리 내에, 각 파트별 .conf 파일이 나뉘어 있고,
회사에서 설정하던 Linux 서버에는 conf/httpd.conf 가 있고, conf.d/각종.conf 파일이 있더라는.. 이건 잘 알아서 판단하여 넣어준다.

위의 conf/extra 구조로 되어있는 경우에는, httpd.conf 파일에, 위 내용을 기술해 주는것이 나을테고, conf.d 구조로 되어있는 경우, 위의 내용을 php.conf 등으로 저장하여 추가해놓으면 설정이 되겠지요.

2. php 작동 확인

test.php 페이지를 하나 만들고, 내용은,
<?php
 phpinfo();
?>


처럼 하면 된다.

확인할 때, mysql 연동 잘 되었는지 보고, Zend 설정 되었는지 등도 확인해라. (Zend 설정은, 안된 경우, 별도의 Zend Optimizer 설치하도록 한다)
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

 프로젝트 중에, JEUS 를 사용하는데 (제우스6), JSP 나 Action 은 모두 Response Header 에, Content-Type 이 UTF-8 로 잘 넘어오지만, 유독 JS 파일을 받을 때, euc-kr 로 넘어오더라. 

 JEUS 에서, 기본적으로, Encoding 정보가 별도로 없으면, euc-kr 로 넘기는 듯 싶다. Jeus 6 의 경우, WEBMain.xml 에서, 기본 인코딩 정보를 아래와 같이 설정해주면 된다.
<context-group>
...
<encoding>
        <request-url-encoding>
                <default>UTF-8</default>
        </request-url-encoding>
        <request-encoding>
                <default>UTF-8</default>
        </request-encoding>
        <response-encoding>
                <default>UTF-8</default>
        </response-encoding>
</encoding>
...
</context-group>



또, 아래 정보는 어디서 퍼온 것인데, JavaScript 별로, charset 을 지정해 줄 수 있다.

International Language Support in JavaScript

JavaScript is built to support a wide variety of world languages andtheir characters – from the old US ASCII up to the rapidly spreadingUTF-8. This page clears up some of the difficulties encountered whendealing with multiple languages and their related characters.

JavaScript and Character Sets

When working with non-European character sets ("charsets"), you mayneed to make changes to the way your page references externalJavaScript(.js) files. Ideally, your .js files should saved in theUTF-8 character set in order to maximize its multilingual features —though you can use a different charset that supports your language, atthe potential expense of users who can't support it. Once your filesare saved as UTF-8, they must be "served" in the UTF-8 charset in orderto display correctly. There are a few ways to ensure this:

Serve the Web Page as UTF-8

If your page is already served as UTF-8 (i.e. Content-type=text/html; charset=UTF-8),you don't need to make any changes — all embedded files in an HTMLdocument are served in the same charset as the document, unlessexplicitly specified not to by you. You can do this by:

  • Use the Content-type meta tag — place at the TOP of your page's <head> section.

    <meta name="http-equiv" content="Content-type: text/html; charset=UTF-8"/>)
  • Edit your webserver configuration to serve all documents as UTF-8
  • Send the Content-type header via your server-side scripts (i.e. PHP, ASP, JSP)

Use the charset attribute of the <script> tag

The easiest way to ensure your script is served as UTF-8 is to add acharset attribute (charset="utf-8") to your <script> tags in theparent page:

<script type="text/javascript" src="[path]/myscript.js" charset="utf-8"></script>

Modify your .htaccess files (Apache Only)

You can also configure your webserver to serve all .js files in theUTF-8 charset, or only .js files in a single directory. You can do thelatter (in Apache) by adding this line to the .htaccess file in the directory where your scripts are stored:

AddCharset utf-8 .js
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,