Hi Bartosz,
There aren't other exceptions in console. But I've noticed that there
is a WARN message in console regarding arjuna:
09:40:05,040 WARN [loggerI18N]
[com.arjuna.ats.internal.jta.transaction.arjunacore.lastResource.startupWarning]
[com.arjuna.ats.internal.jta.transaction.arjunacore.lastResource.startupWarning]
You have chosen to enable multiple last resources in the transaction
manager. This is transactionally unsafe and should not be relied upon.
BTW, sorry, I forget to print my custom SBB code:
#########################################################
SmppProcessorSBB
#########################################################
package br.com.sixbell;
import br.com.sixbell.gateway.smpp.SmsMessageEvent;
import java.io.IOException;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Session;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.slee.ActivityContextInterface;
import javax.slee.RolledBackContext;
import javax.slee.Sbb;
import javax.slee.SbbContext;
import javax.slee.CreateException;
import javax.slee.serviceactivity.ServiceActivity;
import javax.slee.serviceactivity.ServiceActivityFactory;
import javax.slee.serviceactivity.ServiceStartedEvent;
import net.java.slee.resource.smpp.ShortMessage;
import net.java.slee.resource.smpp.SmppProvider;
import net.java.slee.resource.smpp.ActivityContextInterfaceFactory;
import net.java.slee.resource.smpp.ClientTransaction;
import net.java.slee.resource.smpp.Dialog;
import net.java.slee.resource.smpp.ResponseEvent;
import org.apache.log4j.Logger;
/**
* This class is responsible for processing SMS events.
* @author averri
*/
public abstract class SmppProcessorSBB implements Sbb {
private static Logger log = Logger.getLogger
(SmppProcessorSBB.class);
private static final String SMS_DELIVERED_QUEUE_NAME = "queue/sms-
delivered";
private SbbContext sbbContext;
private SmppProvider smppProvider;
private ActivityContextInterfaceFactory smppAcif;
private ConnectionFactory connectionFactory;
public SmppProcessorSBB() {
}// end constructor
/**
* Sends a JMS message to the queue.
*/
public void sendJmsMessage(long messageId, boolean success) {
MessageProducer msgProducer = null;
Session session = null;
Connection conn = null;
try {
conn = connectionFactory.createConnection();
session = conn.createSession(false,
Session.AUTO_ACKNOWLEDGE);
Destination destination = (Destination) new InitialContext
()
.lookup(SMS_DELIVERED_QUEUE_NAME);
msgProducer = session.createProducer(destination);
ObjectMessage msg = session.createObjectMessage();
msg.setLongProperty("smsId", getSmsId());
msg.setBooleanProperty("success", success);
msgProducer.send(msg);
log.info("### Message sent to the queue. smsId=" +
messageId);
} catch (Exception ex) {
log.error("### Could not send JMS. smsId=" + messageId,
ex);
} finally {
try {
if(msgProducer!=null) {
msgProducer.close();
}
} catch (JMSException ex) {
log.warn("### Could not close message producer.", ex);
}
try {
if(session!=null) {
session.close();
}
} catch (JMSException ex) {
log.warn("### Could not close session.", ex);
}
try {
if(conn!=null) {
conn.close();
}
} catch (JMSException ex) {
log.warn("### Could not close connection.", ex);
}
}// end finally
}// end method
/**
*
* @param sbbContext
*/
public void setSbbContext(SbbContext sbbContext) {
this.sbbContext = sbbContext;
try {
Context env = (Context) new InitialContext();
smppProvider = (SmppProvider) env.lookup(
"java:comp/env/slee/resources/smpp/3.4/
smppinterface");
smppAcif = (ActivityContextInterfaceFactory) env.lookup(
"java:comp/env/slee/resources/smpp/3.4/
factoryprovider");
connectionFactory = (ConnectionFactory) env.lookup
("ConnectionFactory");
//timerFacility = (TimerFacility) myEnv.lookup("slee/
facilities/timer");
} catch (NamingException ne) {
log.fatal("### Could not set SBB context:", ne);
}
log.trace("### setSbbContext");
}// end method
/**
* Called when this service has started.
* @param event
* @param aci
*/
public void onServiceStartedEvent(ServiceStartedEvent event,
ActivityContextInterface aci) {
try {
Context env = (Context) new InitialContext().lookup
("java:comp/env");
ServiceActivity sa = ((ServiceActivityFactory) env.lookup(
"slee/serviceactivity/factory")).getActivity();
if (sa.equals(aci.getActivity())) {
log.info("### SBB Started.");
}
} catch (Exception ex) {
log.error("### onServiceStartedEvent failed.", ex);
}
}// end method
/**
* Event handler for externally triggered event.
* @param event
* @param aci
*/
public void onSendSms(SmsMessageEvent msgEvent,
ActivityContextInterface aci) {
log.trace("### onSendSms captured.");
setSmsId(msgEvent.getMessageId());
sendSms(msgEvent);
}// end method
/**
* Event handler for SUBMIT_SM message reply (from SMSC).
* @param response
* @param aci
*/
public void onSubmit_sm_resp(ResponseEvent response,
ActivityContextInterface aci) {
log.info("### SUMBIT_SM_RESP smsId=" + getSmsId());
boolean success = (response.getMessage().getStatus()==0) ?
true : false;
sendJmsMessage(getSmsId(), success);
//aci.detach(sbbContext.getSbbLocalObject());
}// end method
/**
* Send a SMS to the SMSC binded to the smppProvider.
*/
public void sendSms(SmsMessageEvent msgEvt) {
Dialog dialog = smppProvider.getDialog("
4477665544", "0020");
ShortMessage sms = dialog.createMessage();
sms.setText(msgEvt.getContent());
//sms.setOriginator("
2188114364");
//sms.setRecipient("2181370588");
ClientTransaction tx = dialog.createSubmitSmTransaction();
try {
ActivityContextInterface ac =
smppAcif.getActivityContextInterface(tx);
ac.attach(sbbContext.getSbbLocalObject());
} catch (Exception ex) {
log.error("### SUMBIT_SM fails for smsId=" +
msgEvt.getMessageId(), ex);
return;
}
try {
tx.send(sms);
log.info("### SUMBIT_SM smsId=" + msgEvt.getMessageId());
} catch (IOException ex) {
log.error("### Could not send smsId=" + msgEvt.getMessageId
(), ex);
}
}// end method
public abstract void setSmsId(long value);
public abstract long getSmsId();
}// end class