import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.annotation.Resource;
import javax.ejb.MessageDriven;
import javax.ejb.MessageDrivenBean;
import javax.ejb.MessageDrivenContext;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.ejb.EJB;
import javax.ejb.EJBException;
import javax.ejb.CreateException;
import javax.ejb.ActivationConfigProperty;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.MessageConsumer;
import javax.jms.Queue;
import javax.jms.QueueSession;
import javax.jms.Destination;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.ObjectMessage;
import javax.sql.DataSource;
import javax.rmi.PortableRemoteObject;
import javax.transaction.UserTransaction;
import java.sql.*;
import javax.sql.XAConnection;
import javax.sql.XADataSource;
import com.ibm.db2.jcc.DB2Driver;
import com.ibm.db2.jcc.DB2XADataSource;
import com.ibm.db2.jcc.DB2Xid;
import org.h2.jdbcx.JdbcDataSource;
import org.h2.jdbcx.JdbcXAConnection;
import org.h2.jdbcx.JdbcConnectionPool;
@TransactionManagement(TransactionManagementType.BEAN)
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination",
propertyValue =
"userQueue")
})
public class ChatBean implements MessageDrivenBean,MessageListener {
@Resource(name="ConnectionFactory")
private ConnectionFactory connectionFactory;
@Resource(name="answerQueue")
private Queue answerQueue;
MessageDrivenContext messageDC;
UserTransaction ut;
DataSource h2,db2;
public void setMessageDrivenContext(MessageDrivenContext mtc)
throws
EJBException
{
messageDC=mtc;
System.out.println("MessageDrivenContext setted!");
try{
Properties prop = new Properties();
prop.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.client.RemoteInitialContextFactory");
prop.setProperty(Context.PROVIDER_URL, "ejbd://127.0.0.1:4201");
InitialContext ctx = new InitialContext(prop);
db2 =(DataSource) ctx.lookup("DB2");???????????????????
h2 =(DataSource) ctx.lookup("H2");??????????????????????
}catch(Exception e){
e.printStackTrace();
}
}
public void ejbRemove() throws EJBException
{
System.out.println("MDB Delete!");
}
public void onMessage(Message message){
try {
///////////////////////////////////////////////////////
final TextMessage textMessage = (TextMessage) message;
final String question = textMessage.getText();
System.out.println("Received="+question);
//May call another business process start
String retString = businessMethod(question);
//May call another business process end
System.out.println(retString);
javax.jms.Connection connection
=
connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
MessageProducer producer =
session.createProducer(answerQueue);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
// Create a message
TextMessage messageRes =
session.createTextMessage(retString);
// Tell the producer to send the message
producer.send(messageRes);
// Clean up
if (session != null) session.close();
if (connection != null) connection.close();
System.out.println("MDB
called!!!");
} catch (Exception e) {
System.out.println("error!!!");
try{
ut.rollback();
}catch(Exception e1){
System.out.println("rollback
failed!!!");
}
e.printStackTrace();
}
}
public String businessMethod(String message) throws Exception{
System.out.println("businessMethod!!!");
ut=(UserTransaction) messageDC.getUserTransaction();
ut.begin();
//DataSource h2 =(DataSource)
ctx.lookup("H2");
//XAConnection
xa=h2.getXAConnection(); ???????????
java.sql.Connection
connh2=h2.getConnection(); ?????????
StringBuffer sql1 = new
StringBuffer(256);
sql1.append(" update
testh set name ='111' where id =1 ");
PreparedStatement
PreStmt1 =
connh2.prepareStatement(sql1.toString());
System.out.println(sql1);
PreStmt1.executeUpdate();
PreStmt1.close();
connh2.close();
//DataSource db2 =(DataSource)
ctx.lookup("DB2");
//XAConnection
conndb2x=db2.getXAConnection();???????
java.sql.Connection
conndb2=db2.getConnection();?????????
StringBuffer sql = new
StringBuffer(256);
sql.append(" update
TEST27 set name ='131' where id =1 ");
PreparedStatement
PreStmt = conndb2.prepareStatement(sql.toString());
System.out.println(sql);
PreStmt.executeUpdate();
PreStmt.close();
conndb2.close();
ut.commit();
System.out.println("businessMethod
finish!");
return "OK_Earth";
}
}
--
View this message in context:
http://openejb.979440.n4.nabble.com/about-openejb-standalone-transaction-control-tp4660358p4660412.html
Sent from the OpenEJB Dev mailing list archive at Nabble.com.