AlwaysNewSessionStrategy.java
package fr.sii.ogham.sms.sender.impl.cloudhopper.session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.cloudhopper.smpp.SmppSession;
import fr.sii.ogham.core.exception.MessageException;
import fr.sii.ogham.core.exception.clean.CleanException;
import fr.sii.ogham.core.retry.RetryExecutor;
import fr.sii.ogham.sms.builder.cloudhopper.SmppClientSupplier;
import fr.sii.ogham.sms.builder.cloudhopper.SmppSessionHandlerSupplier;
import fr.sii.ogham.sms.message.Sms;
import fr.sii.ogham.sms.sender.impl.cloudhopper.ExtendedSmppSessionConfiguration;
import fr.sii.ogham.sms.sender.impl.cloudhopper.exception.SmppException;
/**
* Simple management of SMPP session.
*
* For each message:
* <ol>
* <li>Open a SMPP session</li>
* <li>Send the message</li>
* <li>Close the SMPP session</li>
* </ol>
*
* <p>
* Only one message can be sent in the same time.
*
* <p>
* If an error is raised, the exception is thrown and the SMS is not sent.
*
* @author Aurélien Baudet
*
*/
public class AlwaysNewSessionStrategy extends BaseSessionHandlingStrategy {
private static final Logger LOG = LoggerFactory.getLogger(AlwaysNewSessionStrategy.class);
public AlwaysNewSessionStrategy(ExtendedSmppSessionConfiguration configuration, SmppClientSupplier clientSupplier, SmppSessionHandlerSupplier smppSessionHandlerSupplier, RetryExecutor retry) {
super(LOG, configuration, clientSupplier, smppSessionHandlerSupplier, retry);
}
@Override
public SmppSession getSession() throws SmppException {
destroySession();
destroyClient();
initClient();
initSession();
return currentSession;
}
@Override
public void messageSent(Sms sms) throws MessageException {
// nothing to do
}
@Override
public void messageNotSent(Sms sms, SmppException e) throws MessageException {
throw new MessageException("Failed to send SMS", sms, e);
}
@Override
public void messageProcessed(Sms sms) {
destroySession();
destroyClient();
}
@Override
public void clean() throws CleanException {
destroySession();
destroyClient();
}
}