http://blog.igooo.org/79 글에 이어서 작성합니다.
thrift + spring 으로 개발하려고 찾아보니 thrift에서 TServlet 도 제공해준다.
Json으로 응답하던 API서버와 같이 사용하려고 TServlet을 사용하여 thrift를 구현한다.
예제는 TSevlet을 사용하여 servlet을 만들고 web.xml에 등록해준다.
문제는 아래 코드로 서블릿을 등록하면 스프링 bean을 주입 시켜줄방법이 없다.
처리 로직이 들어가는 ServiceExampleImpl 부분을 스프링을 사용하여 주입시켜주려고 한다.
public class TServletExample extends TServlet {
public TServletExample() {
super(
new ServiceExample.Processor(
new ServiceExampleImpl()),
new TCompactProtocol.Factory()
);
}
}
SimpleServletHandlerAdapter를 사용하여 서블릿 클래스를 스프링 MVC 컨트롤러로 사용할 수 있게 해준다.
<bean class="org.springframework.web.servlet.handlerClass.SimpleServletHandlerAdapter" />
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
<property name="order" value="2" />
</bean>
ServiceExampleImpl.java를 Bean으로 등록해준다.
@Component
public class ServiceExampleImpl implemnts ServiceExample.Iface {
@Autowired
private Service service;
// Override method
}
TServletExample 서블릿에 url을 등록하면서 ServiceExampleImpl객체를 주입해준다.
<bean name="/example" class="thrift.TServletExample">
<constructor-arg>
<ref bean="serviceExampleImpl"/>
</constructor-arg>
</bean>
마지막으로 서블릿 코드를 수정한다.
public class TServletExample extends TServlet {
public TServletExample(ServiceExampleImpl handler) {
super(
new ServiceExample.Processor(
handler),
new TCompactProtocol.Factory()
);
}
}
Thrift Iface 구현체를 스프링의 bean으로 등록하여 주입시켜주는것이 가능해졌다.
Servlet 등록도 xml이 아닌 코드 레벨로 설정할 수 있을꺼 같은데
알고 있는 범위에서는 여기까지가 최선인듯
시간나면 서블릿까지 어떻게 해봐야겠다.
TServlet의 코드에서 doPost 하는 부분만 컨트롤러 가져다가 그냥 controller로 구현하는 것도 가능해보인다.
시도는 해보지 않음..
'dev > thrift' 카테고리의 다른 글
Getting Started Thrift (0) | 2014.01.03 |
---|