2017-05-23 5 views
0

を使用して成功したユーザ登録後にSMSを送信することができ、私は、関連する顧客にSMSを送信する必要があります。私は以下のようなアドバイスとしてSMSサービスを公開している。この目的のためにはどうすれば成功し、アカウント作成後に春ブーツ

package com.naresh.advice; 

import javax.annotation.PostConstruct; 

import org.aspectj.lang.JoinPoint; 
import org.aspectj.lang.annotation.AfterReturning; 
import org.aspectj.lang.annotation.Aspect; 
import org.springframework.beans.factory.annotation.Value; 
import org.springframework.stereotype.Component; 

import com.naresh.dto.AccountDTO; 
import com.naresh.dto.CustomerDTO; 
import com.twilio.Twilio; 
import com.twilio.rest.api.v2010.account.Message; 
import com.twilio.type.PhoneNumber; 

@Component 
@Aspect 
public class SMSService { 

    @Value("${twilio.sms.authentication_Id:80b7c5a8b73a26a9b588a906d54269c3}") 
    private String authenticationId; 
    @Value("${twilio.sms.account_sid:AC038d9532222b3d39fce4b43a5dce9ce1}") 
    private String accountId; 
    @Value("${twilio.sms.from_number:+12566662741}") 
    private String fromNumber; 

    @PostConstruct 
    public void init() { 
     Twilio.init(accountId, authenticationId); 
    } 

    @AfterReturning(pointcut = "execution(* com.naresh.service.impl.CustomerServiceImpl.save(..)) && args(customerDTO,..)", returning = "custId") 
    public void sendSMS(JoinPoint joinPt, CustomerDTO customerDTO, Long custId) { 

     Message.creator(new PhoneNumber(customerDTO.getMobile()), new PhoneNumber(fromNumber), 
       "Customer " + custId + " registered successfully...").create(); 
    } 

    @AfterReturning(pointcut = "execution(* com.naresh.service.impl.AccountServiceImpl.createAccount(..))", returning = "accDTO") 
    public void sendSMSAcc(JoinPoint joinPt, AccountDTO accDTO) { 

     CustomerDTO customerDTO = accDTO.getCustomer(); 

     Message.creator(new PhoneNumber(customerDTO.getMobile()), new PhoneNumber(fromNumber), 
       "Hi " + customerDTO.getName() + ", Your " + accDTO.getAccountType() + " account " + accDTO.getAccNo() 
         + " has been registered with us successfully.Your balance is " + accDTO.getBalance()) 
       .create(); 
    } 

} 

上記の作業は、アカウント作成タスクが成功した場合にうまくいきます。しかし、私たちが何らかのエラーを起こしている場合、その時にも成功したSMSが顧客によって受け取られます。

私を助けてください。 docsに応じて予め

答えて

0

@AfterReturningアドバイスで

おかげで、:

は、唯一の通常のメソッドの戻り値で呼び出された例外がスローされない場合。

つまり、メソッドcom.naresh.service.impl.CustomerServiceImpl.savecom.naresh.service.impl.AccountServiceImpl.createAccountは値を返しますが、例外は発生しません。あなたが得ているエラーは何ですか?このエラーは戻り値に影響しますか?唯一の方法は、返された値を解析して何かが間違っているかどうかを調べることです。

+0

私たちはユニークキー違反の例を見てみましょう。私たちがユニークキーに違反している場合、save()呼び出し時に例外はありません。データのコミット時に例外が発生します。上記のシナリオでは、SMS自体がコミットされる前にトリガされます。データベースへのデータ保存に失敗した場合は、お客様にSMSを送信しないでください。しかし、私のアプリケーションでは、SMSが起動されます。以前のSaveメソッドでそれをコミットまたはコミットした後、あなたがそれを得るために、ポイントカットを変更する必要があり、その場合には –

+0

がトリガ。これは、アスペクトとは何も共通していませんが、質問に表示されていないアプリケーションのロジックと、それを使用する方法について説明しています。ここ – Stanislav

+0

こんにちはStabislav、セーブは())スプリングデータJPAは(保存することを示し@トランザクション \t公共AccountDTO createAccount(AccountDTO accountDTO){ \t \tアカウントアカウント= acctRepo.save((accountDTO)に変換)。 \t \t log.info(account.getAccNo()+ "作成されました..."); \t \t \t \t戻り変換(アカウント)。 \t} –

関連する問題