atmterminal.java

来自「ejb3 java session bean」· Java 代码 · 共 182 行

JAVA
182
字号
/* * JBoss, Home of Professional Open Source * Copyright 2005, JBoss Inc., and individual contributors as indicated * by the @authors tag. * * This is free software; you can redistribute it and/or modify it * under the terms of the JBPM BPEL PUBLIC LICENSE AGREEMENT as * published by JBoss Inc.; either version 1.0 of the License, or * (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */package org.jbpm.bpel.tutorial.atm.terminal;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;import java.rmi.RemoteException;import java.util.HashMap;import java.util.Map;import javax.naming.InitialContext;import javax.naming.NamingException;import javax.swing.JFrame;import javax.swing.UIManager;import javax.swing.UnsupportedLookAndFeelException;import javax.swing.WindowConstants;import javax.xml.rpc.ServiceException;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.jbpm.bpel.tools.DeploymentException;import org.jbpm.bpel.tools.ModuleDeployHelper;import org.jbpm.bpel.tutorial.atm.AtmFrontEndService;import org.jbpm.bpel.tutorial.atm.FrontEnd;public class AtmTerminal {  public static final String PANEL = "panel";  public static final String FRONT_END = "frontEnd";  public static final String TICKET = "ticket";  public static final String CUSTOMER = "customer";  private static Map context = new HashMap();  private static Log log = LogFactory.getLog(AtmTerminal.class);  public static Map getContext() {    return context;  }  public static void main(String[] args) {    deployClient();    FrontEnd atmFrontEnd = createAtmFrontEnd();    // selectNativeLookAndFeel();    AtmPanel atmPanel = createAtmPanel(atmFrontEnd);    JFrame mainFrame = new JFrame("ATM");    mainFrame.addWindowListener(AtmFrameListener.INSTANCE);    mainFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);    mainFrame.getContentPane().add(atmPanel);    mainFrame.pack();    mainFrame.setVisible(true);  }  private static void deployClient() {    try {      ModuleDeployHelper deployer = new ModuleDeployHelper();      deployer.deploy("atm-client.jar");    }    catch (DeploymentException e) {      log.error("could not deploy client module", e);    }  }  private static FrontEnd createAtmFrontEnd() {    try {      InitialContext jndiContext = new InitialContext();      AtmFrontEndService service = (AtmFrontEndService) jndiContext.lookup("java:comp/env/service/ATM");      jndiContext.close();        return service.getFrontEndPort();    }    catch (NamingException e) {      log.error("could not retrieve service instance", e);      return null;    }    catch (ServiceException e) {      log.error("could not get port proxy", e);      return null;    }  }  private static void selectNativeLookAndFeel() {    try {      // set native system look and feel      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());    }    catch (ClassNotFoundException e) {      log.debug("system look and feel missing", e);    }    catch (InstantiationException e) {      // should not happen      throw new AssertionError(e);    }    catch (IllegalAccessException e) {      // should not happen      throw new AssertionError(e);    }    catch (UnsupportedLookAndFeelException e) {      // should not happen      throw new AssertionError(e);    }  }  private static AtmPanel createAtmPanel(FrontEnd atmFrontEnd) {    AtmPanel atmPanel = new AtmPanel();    context.put(PANEL, atmPanel);    if (atmFrontEnd != null) {      context.put(FRONT_END, atmFrontEnd);      try {        int ticketNo = atmFrontEnd.connect();        context.put(TICKET, new Integer(ticketNo));        atmPanel.setMessage("Welcome!\nPlease log on, so we can begin");        atmPanel.addAction(new LogOnAction());        atmPanel.setStatus(atmFrontEnd.status(ticketNo));      }      catch (RemoteException e) {        atmPanel.setMessage("Communication with the bank failed.\n"            + "Please use another terminal.");        atmPanel.setStatus("unavailable");      }    }    else {      atmPanel.setMessage("Bootstrap procedure failed.\n" + "Please use another terminal");      atmPanel.setStatus("unavailable");    }    return atmPanel;  }  private static class AtmFrameListener extends WindowAdapter {    static final WindowListener INSTANCE = new AtmFrameListener();    private AtmFrameListener() {    }    public void windowClosing(WindowEvent event) {      FrontEnd atmFrontEnd = (FrontEnd) context.get(FRONT_END);      Integer ticketNo = (Integer) context.get(TICKET);      if (atmFrontEnd != null && ticketNo != null) {        try {          atmFrontEnd.disconnect(ticketNo.intValue());        }        catch (RemoteException e) {          log.error("remote disconnect failure", e);        }      }      undeployClient();    }  }  private static void undeployClient() {    try {      ModuleDeployHelper deployer = new ModuleDeployHelper();      deployer.undeploy("atm-client.jar");    }    catch (DeploymentException e) {      log.error("could not undeploy client module", e);    }  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?