📄 server.java
字号:
package service;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import javax.transaction.UserTransaction;
public class Server implements ServerMBean {
private Context context;
private UserTransaction ut = null;
private String message;
private DataSource dataSource;
private Connection conn;
private QueueConnectionFactory queueConnectionFactory;
private QueueConnection queueConnection;
private QueueSession queueSession;
private QueueSender queueSender;
public Server(){
try {
context = new InitialContext();
ut = (UserTransaction)context.lookup("UserTransaction");
message = "";
} catch (Exception e) {
e.printStackTrace();
}
}
public void doTransaction(String userNameA, String userNameB, float account)throws Exception{
try{
ut.begin();
withdraw(userNameA, account);
deposit(userNameB, account);
send();
ut.commit();
}catch(Exception e){
System.out.println("EXXXXXXXXX");
try{
ut.rollback();
message +=" Transaction Rollback.";
send();
}catch(Exception e1){
System.out.println("YYYYYYYYY");
e1.printStackTrace();
}
throw e;
}
}
public void deposit(String userNameB, float account) throws Exception {
dataSource = (DataSource) context.lookup("jdbc/account2");
conn = dataSource.getConnection();
PreparedStatement ps = conn.prepareStatement("update account set balance = balance + ? where name=?");
ps.setFloat(1, account);
ps.setString(2, userNameB);
try{
int status = ps.executeUpdate();
if (status == 0) {
message += "Update Error";
throw new Exception();
}
}catch (SQLException e){
throw e;
}finally{
conn.close();
}
message += account + " are deposited to " + userNameB + ".";
}
public void withdraw(String userNameA, float account) throws Exception {
dataSource = (DataSource) context.lookup("jdbc/account1");
conn = dataSource.getConnection();
PreparedStatement ps = conn.prepareStatement("update account set balance = balance - ? where name=?");
ps.setFloat(1, account);
ps.setString(2, userNameA);
try{
int status = ps.executeUpdate();
if (status == 0) {
message += "Update Error";
throw new Exception();
}
}catch (SQLException e){
throw e;
}finally{
conn.close();
}
message += account + " are deposited to " + userNameA + ".\n";
}
public void send() throws Exception {
try {
queueConnectionFactory = (QueueConnectionFactory) context
.lookup("QueueConnectionFactory");
queueConnection = queueConnectionFactory.createQueueConnection();
queueSession = queueConnection.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
Queue queue = (Queue) context.lookup("queue/A");
queueSender = queueSession.createSender(queue);
queueConnection.start();
TextMessage msg = queueSession.createTextMessage();
msg.setText(message);
System.out.println(msg);
queueSender.send(queue,msg);
System.out.println("ZZZZZZZZZ");
message = "";
} finally {
queueSender.close();
queueSession.close();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -