I've try it and it's working. Thank you very much. Now I can use JdbcTemplate and declarative transaction on my Tapestry Service, so I can take advantage of T 5.2 service reload feature. This is improving productivity a lot.
Thanks... Best regards, Yohan Yudanara On Mon, Dec 13, 2010 at 8:32 AM, Yohan Yudanara <yohan.yudan...@gmail.com>wrote: > Thank you very much for your explanation and code sample, Mr. Christian > Köberl > I will try it. > > On Sun, Dec 12, 2010 at 10:34 PM, Christian Köberl > <tapestry.christian.koeb...@gmail.com> wrote: > > > > > > Yohan Yudanara-2 wrote: > >> > >> So, in my conclusion (CMIIW), if I'm using JDBC instead of Hibernate, > >> I'd better stick with service/dao in spring bean. Because in spring > >> bean, I can use spring declarative transaction and also JdbcTemplate. > >> If I want to use tapestry service instead of spring bean, I need to > >> write code for accessing database (using JDBC) and managing > >> transaction from scratch. > >> > > > > No, that's not really true. You could use the advise out of my first post > on > > this thread and apply that to all your Tapestry services accessing the > > database. You could do this by searching for an annotation - you can even > > use the Spring @Transacational annotation but it's probably better to > have > > your own (since semantics won't be completely the same). > > > > Here's how the advisor could look like (see other post for > > TransactionalAdvise). > > > > public interface TransactionAdvisor > > { > > void addTransactionAdvice(MethodAdviceReceiver receiver); > > } > > > > public class TransactionAdvisorImpl implements TransactionAdvisor > > { > > private final PlatformTransactionManager manager; // this is the > Spring > > transaction manager > > > > private final Map<Propagation, MethodAdvice> transactionalAdvises; > > > > public TransactionAdvisorImpl (PlatformTransactionManager manager) > > { > > this.manager = manager; > > > > transactionalAdvises = new HashMap<Propagation, MethodAdvice>(); > > for (Propagation propagation : Propagation.values()) > > { > > transactionalAdvises.put(propagation, new > > TransactionalAdvise(manager, propagation.value())); > > } > > } > > > > public void addTransactionAdvice(MethodAdviceReceiver receiver) > > { > > for (Method m : receiver.getInterface().getMethods()) > > { > > Transactional txAnnotation = > > m.getAnnotation(Transactional.class); > > > > if (txAnnotation != null) > > { > > receiver.adviseMethod(m, > > transactionalAdvises.get(txAnnotation.propagation())); > > } > > } > > } > > } > > > > In your module you have to bind the services and advise your DAOs: > > @Match("*DAO") > > public static void adviseTransactions(TransactionAdvisor advisor, > > MethodAdviceReceiver receiver) > > { > > advisor.addTransactionAdvice(receiver); > > } > > > > This advice method is configured to match against any service whose id > ends > > with "DAO", such as "PersonDAO". > > -- > > View this message in context: > http://tapestry-users.832.n2.nabble.com/T5-2-Need-Advice-on-JDBC-and-Transaction-Mgmt-tp5825768p5828294.html > > Sent from the Tapestry Users mailing list archive at Nabble.com. > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > > For additional commands, e-mail: users-h...@tapestry.apache.org > > > > >