8.5. Customizing the standard deployers
디플로이어는 시작시에 필요한 서비스들을 룩업한다. 필수 요소인 경우 디플로이어는 해당 서비스를 참조할 수 있을 때까지 기다리고, 만약 시간이 지나도 참조할 수 없을 때는 예외를 발생시킨다. 만약에 기본 타임아웃 설정이나 서비스 룩업 필터가 정의되어 있지 않으면, 스프링 DM의 reference 엘리먼트를 사용하여 설정할 수 있다.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:osgi="http://www.springframework.org/schema/osgi"
xmlns:p="http://www.springframework.org/schema/p" (4)
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/osgi
http://www.springframework.org/schema/osgi/spring-osgi.xsd">
<osgi:reference id="myTomcatServer" (1)
interface="org.apache.catalina.Service"
filter="(environment=testing)"
cardinality="0..1"/>
<bean id="warDeployer" (2)
class="org.springframework.osgi.web.deployer.tomcat.TomcatWarDeployer"
p:service-ref="myTomcatServer"/> (3)
</beans>
1 사용자 정의 OSGi 서비스 룩업
2 디플로이어 정의Deployer definition (이름이 중요하다.)
3 서비스 속성 할당(p namespace 사용)
4 스프링의 p 네임스페이스 선언
위의 설정에 필요한 패키지를 import 해야 한다는 것을 주의 하자. 그리고 위는 웹 Extender에서 사용해야 하기 때문에 Fragment로 설정한다. 우선 import 해야 하는 패키지는 Catalina 패키지고, 그안에 있는 Service 인터페이스는 다른 패키지에 있는 Connector라는 것의 의존하고 있다. 따라서 다음과 같이 설정한다. 그러지 않으면, ClassNotFoundException 이나 NoClassDefFoundException이 발생한다.
Import-Package: org.apache.catalina,org.apache.catalina.connector
# Spring-DM Web Extender
Fragment-Host: org.springframework.bundle.osgi.web.extender