(หรือ 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 เลย
No comments:
Post a Comment