📄 messagereceiverbean.java
字号:
package bankaccount;
import java.rmi.RemoteException;
import javax.ejb.EJBException;
import javax.ejb.CreateException;
import javax.ejb.MessageDrivenBean;
import javax.ejb.MessageDrivenContext;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
public class MessageReceiverBean implements MessageDrivenBean,MessageListener
{
private static final int BAD_MESSAGE_TYPE = 1;
private static final int CUSTOMER_ALREADY_EXISTS = 2;
private MessageDrivenContext ctx;
private sessionAccount sessionAccount;
public void setMessageDrivenContext(MessageDrivenContext c) {
ctx = c;
try {
Context ic = new InitialContext();
Object h = ic.lookup("java:/comp/env/ejb/sessionAccountHome");
sessionAccountHome home = (sessionAccountHome)
PortableRemoteObject.narrow(h, sessionAccountHome.class);
sessionAccount = home.create();
} catch (Exception e) {
e.printStackTrace();
throw new EJBException(e);
}
}
public void ejbCreate() { System.out.println("MessageReceiverBean:ejbCreate()");}
public void ejbRemove() { System.out.println("MessageReceiverBean:ejbRemove()");}
private void publishError(int errorType, Throwable th) {
// This method handles application errors in the incoming
// messages. One common design published to an error topic here.
// For simplicity, we only print an error message and continue
switch(errorType) {
case BAD_MESSAGE_TYPE:
System.err.println("Bad Message Type received: "+th);
break;
case CUSTOMER_ALREADY_EXISTS:
System.err.println("Account already exists: "+th);
break;
default:
throw new EJBException("Unexpected error type: "+errorType);
}
}
public void onMessage(Message m) {
MapMessage msg = (MapMessage) m;
try {
int accountID = msg.getInt("accountID");
String ownerName = msg.getString("ownerName");
float accountValue = msg.getFloat("accountValue");
int accountLevel = msg.getInt("accountLevel");
sessionAccount.enterNewAccount(accountID,ownerName,accountValue,accountLevel);
} catch (JMSException e) {
// message was mal-formed
publishError(BAD_MESSAGE_TYPE, e);
} catch (CreateException ice) {
// account id already existsed
publishError(CUSTOMER_ALREADY_EXISTS, ice);
} catch (RemoteException re) {
re.printStackTrace();
ctx.setRollbackOnly();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -