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.

Reply via email to