Wednesday, July 13, 2005

config pooling ใน Spring Framework

ส่วนใหญ่เรามัก implement service layer
(หรือ business logic layer)
ในลักษณะ Singleton ซึ่งหมายความว่า
method ของเรา implement เป็น Thread-safe

แต่มีบางครั้งที่ design ของเราออกมาในรูป
ของ non-thread-safe service object
ในกรณีเรามักจะ implement มันในรูปของ object pool
เพื่อลดเวลา create object (initial resources)
(รวมทั้งลด Object ที่ต้องถูก garbage collection ลงด้วย)

วิธีการ config pooling ใน Spring
สามารถทำผ่าน ProxyFactoryBean ได้
โดยการ set targetSource

สมมติเรามี Class NonThreadSafeService

public class NonThreadSafeService {
public void callMe() {
..
}
}


ขั้นแรกให้ define ใน spring configuration ดังนี้
<bean id="ntsService" class="NonThreadSafeService"
singleton="false"/>


จากนั้นก็ใช้ CommonsPoolTargetSource เข้ามาห่อไว้
<bean id="poolTargetSource" 
class="org.springframework.aop.target.CommonsPoolTargetSource">
<property name="targetBeanName"><value>ntsService</value></property>
<property name="maxSize"><value>25</value></property>
</bean>


สุดท้ายก็ห่อด้วย AOP Proxy
<bean id="nts"
class="org.sprfr.aop.framework.ProxyFactoryBean">
<property name="targetSource"
ref="poolTargetSource"/>
</bean>


ชอบตรงที่เป็นการแก้ไขที่ configuration เพียงที่เดียว
ก็ได้ feature pooling แล้ว
โดยไม่ต้องไปแตะ code ในส่วนที่เรียกใช้ service เลย

Related link from Roti

No comments: