私は現在、JSF 2 と AOP と AspectJ アノテーションを組み合わせて使用している問題に直面しています。ここでSpring AOPが役割を果たしているかどうかはわかりません...(SPRING AOP、ASPECTJ、GOOGLE GUICEの違いがよくわかりませんでした...それは別の質問です)
jsfビューでフォームをクリックしてデータベースに値を追加した後、電子メールを送信しようとしています。フォームを介して参加者を追加するために、JSF (ビューにリンク) によって処理される managedBean AddPartipant があります。データベースに変更を加えるメソッドをインターセプトし、このアクションの直後にメールを送信したいと考えています。メールを送信するメソッドを備えたSpring Bean SendMailBoImplがあります(送信は正常に機能します)
AOP を使用するのが良い方法であることがわかりました。完全なWebアプリではなく、メインで機能させようとした場合にのみ機能します。問題コンテキストのSpring / Jsfに関するいくつかの資料を読みましたが、解決策が見つかりません...まだ...
ビューを介してデータベースにデータを追加する方法は問題ありませんが、データベースが変更されている間はメールが送信されません。
誰かがアイデアを持っていますか?
どうもありがとう :)
AddParticipant ManagedBean :
public class AddParticipant implements Serializable{
//DI via Spring
ParticipantBo participantBo;
private String id_study ;
private Participant aParticipant = new Participant();
//getters and setters
public void addParticipant(){
aParticipant.setId_study (id_study);
...
participantBo.save(aParticipant);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Ajout du participant "+id_study+" dans l'étude "+ study_name));
}
マイボーサービス:
@After("execution(* com.clb.genomic.lyon.beans.AddParticipant.addParticipant(..))")
public void sendMail() {
....
mailSender.send(message);
....
}
私のビーン設定:
<aop:aspectj-autoproxy proxy-target-class="true" />
<bean id="addParticipant" class="com.clb.genomic.lyon.beans.AddParticipant"/>
<bean id="sendMailBo" class="com.clb.genomic.lyon.bo.SendMailBoImpl">
<property name="mailSender" ref="mailSender" />
<property name="simpleMailMessage" ref="customeMailMessage" />
</bean>
私がこれを行うと、それは機能しています:
ApplicationContext appContext = new ClassPathXmlApplicationContext
( "classpath:webConfiguration/applicationContext.xml");
AddParticipant aspect = (AddParticipant) appContext.getBean("addParticipant");
aspect.addParticipant();