'Connector'에 해당되는 글 2건
Apache 2.2 + Tomcat 6.0 Integration :: 2009/09/07 22:38
윈도우 XP 환경에서 Apache 2.2와 Tomcat 6.0 연동 방법이다.
1. Apache 2.2 윈도우 인스톨 버전과 Tomcat 6.0 ZIP 파일을 받아서 설치한다.
* 본 문서 설치 버전: Apache 2.2.11, Tomcat 6.0.18
2. 다음 mod_jk 모듈을 다운 받아 ${APACHE_HOME}/modules/mod_jk.so 위치에 복사한다.
3. Tomcat Worker 설정 파일(workers.properties)을 작성하여 ${APACHE_HOME}/conf 밑에 둔다. (위치는 상관없음).
4. 아파치 기본 설정 파일(${APACHE_HOME}/conf/httpd.conf)에 다음과 같이 추가한다. 가상 호스트를 사용할 경우 Jk 모듈과 Jk Worker 파일 설정 이외의 설정은 개별 가상 호스트에 둘 수 있다.
5. 아파치 가상호스트 설정 파일(${APACHE_HOME}/conf/extra/httpd-hosts.conf)을 편집하여 다음처럼 JkMount 설정을 추가한다. (주의: httpd.conf에서 httpd-vhosts.conf를 포함할 것).
6. Tomcat 서버의 server.xml에서 다음과 같은 설정을 확인한다.
7. Apache 서버와 Tomcat 서버를 구동 후 http://localhost/examples 주소를 접속하여 확인한다.
1. Apache 2.2 윈도우 인스톨 버전과 Tomcat 6.0 ZIP 파일을 받아서 설치한다.
* 본 문서 설치 버전: Apache 2.2.11, Tomcat 6.0.18
2. 다음 mod_jk 모듈을 다운 받아 ${APACHE_HOME}/modules/mod_jk.so 위치에 복사한다.
3. Tomcat Worker 설정 파일(workers.properties)을 작성하여 ${APACHE_HOME}/conf 밑에 둔다. (위치는 상관없음).
# Define 1 real worker using ajp13 worker.list=worker1 # Set properties for worker1 (ajp13) worker.worker1.type=ajp13 worker.worker1.host=localhost worker.worker1.port=8009
4. 아파치 기본 설정 파일(${APACHE_HOME}/conf/httpd.conf)에 다음과 같이 추가한다. 가상 호스트를 사용할 경우 Jk 모듈과 Jk Worker 파일 설정 이외의 설정은 개별 가상 호스트에 둘 수 있다.
# Load mod_jk module # Update this path to match your modules location LoadModule jk_module modules/mod_jk.so # Where to find workers.properties # Update this path to match your conf directory location JkWorkersFile C:/Apache2.2/conf/workers.properties #----- 아래 설정은 가상호스트 설정에 둘 수 있음 ----- # Where to put jk logs # Update this path to match your logs directory location #JkLogFile C:/Apache2.2/logs/mod_jk.log # Set the jk log level [debug/error/info] #JkLogLevel info # Select the log format #JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" # JkOptions indicate to send SSL KEY SIZE, #JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories # JkRequestLogFormat set the request format #JkRequestLogFormat "%w %V %T" # Send everything for context /*.jsp to worker named worker1 (ajp13) #JkMount /*.jsp worker1 # Send everything for context /examples to worker named worker1 (ajp13) #JkMount /examples worker1 #JkMount /examples/* worker1
5. 아파치 가상호스트 설정 파일(${APACHE_HOME}/conf/extra/httpd-hosts.conf)을 편집하여 다음처럼 JkMount 설정을 추가한다. (주의: httpd.conf에서 httpd-vhosts.conf를 포함할 것).
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@mydomain.com
DocumentRoot "C:/Home/mydomain/htdocs"
ServerAlias www.mydomain.com
ServerAlias mydomain.com
ServerAlias *.mydomain.com
ErrorLog "C:/Home/mydomain/logs/mydomain.com-error.log"
CustomLog "C:/Home/mydomain/logs/mydomain.com-access.log" common
#----- 아래 JK 설정 -----
# Where to put jk logs
# Update this path to match your logs directory location
JkLogFile C:/Home/mydomain/logs/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
# Send everything for context /*.jsp to worker named worker1 (ajp13)
JkMount /*.jsp worker1
# Send everything for context /examples to worker named worker1 (ajp13)
JkMount /examples worker1
JkMount /examples/* worker1
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@java2go.net
DocumentRoot "C:/Home/dummy-host/htdocs"
ServerName dummy-host.com
ServerAlias www.dummy-host.com
ErrorLog "C:/Home/dummy-host/logs/dummy-host.com-error.log"
CustomLog "C:/Home/dummy-host/logs/dummy-host.com-access.log" common
</VirtualHost>
6. Tomcat 서버의 server.xml에서 다음과 같은 설정을 확인한다.
<!-- Define an AJP 1.3 Connector on port 8009 --> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
7. Apache 서버와 Tomcat 서버를 구동 후 http://localhost/examples 주소를 접속하여 확인한다.

Spring + Apache Mina + JMX :: 2009/01/22 11:31
네트워크 어플리케이션 프레임워크인 Apache Mina를 이용하여 소켓 서버를 구현할 수 있다. Mina는 Spring DI를 이용하여 쉽게 인테그레이션 될 수 있고, 또한 Spring에서 지원하는 JMX 기능을 사용하여 서버에 등록된 Bean들을 모니터링 및 관리를 할 수 있다.
1. Apache Mina의 IoHandler를 구현한 클래스와 소켓서버의 설정을 아래와 같이 설정한다.
2. Apache Mina의 IoServiceManager 및 기타 JMX를 통해 노출하고자하는 Bean을 등록한다. 그리고 Spring JMX MBeanExporter 설정을 통해 해당 Bean을 노출한다. 여기서는 RMI를 이용하였고, 이 경우 RMI Registry에 대한 설정도 추가해 준다.
3. JMX를 통해 MBean에 접속하려는 서버에 방화벽이 설치되어 있는 경우, JMX/RMI Connector를 위한 Port를 명시적으로 지정할 필요가 있다. 그렇지 않으면 시스템에서 랜덤하게 지정된 Port를 사용하게 되는데 방화벽이 설치된 경우 임의 Port를 사용할 수 없으므로 접속이 불가능하게 된다. 다음과 같이 JMX/RMI Connector를 위한 포트를 지정해 준다. (참고: RMI Connector와 Repository 포트는 동일해도 됨).
4. JMX 모니터링 도구를 사용하여 JMX 서버에 접속하여 모니터링을 수행한다. JMX 접속 주소는 Spring 설정에서 노출한 serviceUrl이 되며, 다음은 JDK에 포함되어 있는 JColsole을 이용하여 모니터링을 수행한 화면이다.






1. Apache Mina의 IoHandler를 구현한 클래스와 소켓서버의 설정을 아래와 같이 설정한다.
<!-- java.net.InetSocketAddress objects by Spring -->
<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="java.net.SocketAddress">
<bean class="org.apache.mina.integration.spring.InetSocketAddressEditor" />
</entry>
</map>
</property>
</bean>
<!-- The IoHandler implementation -->
<bean id="ioHandler" class="net.java2go.server.MyIoHandler" />
<!-- thread pool -->
<bean id="threadModel"
class="org.apache.mina.integration.spring.ExecutorThreadModelFactoryBean">
<property name="serviceName" value="MyService" />
<property name="executor">
<bean class="org.apache.mina.integration.spring.ThreadPoolExecutorFactoryBean">
<property name="corePoolSize" value="10" />
<property name="maxPoolSize" value="30" />
<property name="keepAliveSeconds" value="30" />
</bean>
</property>
</bean>
<!-- The IoAcceptor which binds to port 8099 -->
<bean id="ioAcceptor" |
2. Apache Mina의 IoServiceManager 및 기타 JMX를 통해 노출하고자하는 Bean을 등록한다. 그리고 Spring JMX MBeanExporter 설정을 통해 해당 Bean을 노출한다. 여기서는 RMI를 이용하였고, 이 경우 RMI Registry에 대한 설정도 추가해 준다.
<bean id="ioServiceManager"
class="org.apache.mina.integration.jmx.IoServiceManager">
<constructor-arg index="0" ref="ioAcceptor" />
</bean>
<bean id="mbeanServer"
class="org.springframework.jmx.support.MBeanServerFactoryBean">
<property name="locateExistingServerIfPossible" value="true" />
<!--<property name="defaultDomain" value="server" />-->
</bean>
<bean id="serverConnector"
class="org.springframework.jmx.support.ConnectorServerFactoryBean"
depends-on="rmiRegistry">
<property name="objectName" value="connector:name=rmi" />
<property name="serviceUrl"
value="service:jmx:rmi://localhost/jndi/rmi://localhost:1099/server" />
</bean>
<bean id="rmiRegistry"
class="org.springframework.remoting.rmi.RmiRegistryFactoryBean">
<property name="port" value="1099" />
</bean>
<bean id="mbeanExporter" class="org.springframework.jmx.export.MBeanExporter">
<property name="beans">
<map>
<entry key="server:name=ioService" value-ref="ioServiceManager" />
<!--<entry key="server:name=myServiceBean" value-ref="myServiceBean" />-->
</map>
</property>
<property name="registrationBehaviorName" value="REGISTRATION_REPLACE_EXISTING" />
<property name="server">
<ref local="mbeanServer" />
</property>
</bean> |
3. JMX를 통해 MBean에 접속하려는 서버에 방화벽이 설치되어 있는 경우, JMX/RMI Connector를 위한 Port를 명시적으로 지정할 필요가 있다. 그렇지 않으면 시스템에서 랜덤하게 지정된 Port를 사용하게 되는데 방화벽이 설치된 경우 임의 Port를 사용할 수 없으므로 접속이 불가능하게 된다. 다음과 같이 JMX/RMI Connector를 위한 포트를 지정해 준다. (참고: RMI Connector와 Repository 포트는 동일해도 됨).
<property name="serviceUrl" value="service:jmx:rmi://localhost:1098/jndi/rmi://localhost:1099/server" /> |
4. JMX 모니터링 도구를 사용하여 JMX 서버에 접속하여 모니터링을 수행한다. JMX 접속 주소는 Spring 설정에서 노출한 serviceUrl이 되며, 다음은 JDK에 포함되어 있는 JColsole을 이용하여 모니터링을 수행한 화면이다.









mod_jk-apache-2.2.4.so