⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 txcontrollerbean.java

📁 java书 java书 java书 java书 java书 java书
💻 JAVA
字号:
/* * Copyright (c) 2006 Sun Microsystems, Inc.  All rights reserved.  U.S. * Government Rights - Commercial software.  Government users are subject * to the Sun Microsystems, Inc. standard license agreement and * applicable provisions of the FAR and its supplements.  Use is subject * to license terms. * * This distribution may include materials developed by third parties. * Sun, Sun Microsystems, the Sun logo, Java and J2EE are trademarks * or registered trademarks of Sun Microsystems, Inc. in the U.S. and * other countries. * * Copyright (c) 2006 Sun Microsystems, Inc. Tous droits reserves. * * Droits du gouvernement americain, utilisateurs gouvernementaux - logiciel * commercial. Les utilisateurs gouvernementaux sont soumis au contrat de * licence standard de Sun Microsystems, Inc., ainsi qu'aux dispositions * en vigueur de la FAR (Federal Acquisition Regulations) et des * supplements a celles-ci.  Distribue par des licences qui en * restreignent l'utilisation. * * Cette distribution peut comprendre des composants developpes par des * tierces parties. Sun, Sun Microsystems, le logo Sun, Java et J2EE * sont des marques de fabrique ou des marques deposees de Sun * Microsystems, Inc. aux Etats-Unis et dans d'autres pays. */package com.sun.tutorial.javaee.dukesbank.request;import com.sun.tutorial.javaee.dukesbank.entity.Account;import com.sun.tutorial.javaee.dukesbank.entity.Tx;import com.sun.tutorial.javaee.dukesbank.exception.AccountNotFoundException;import com.sun.tutorial.javaee.dukesbank.exception.IllegalAccountTypeException;import com.sun.tutorial.javaee.dukesbank.exception.InsufficientCreditException;import com.sun.tutorial.javaee.dukesbank.exception.InsufficientFundsException;import com.sun.tutorial.javaee.dukesbank.exception.InvalidParameterException;import com.sun.tutorial.javaee.dukesbank.exception.TxNotFoundException;import com.sun.tutorial.javaee.dukesbank.util.Debug;import com.sun.tutorial.javaee.dukesbank.util.DomainUtil;import com.sun.tutorial.javaee.dukesbank.util.TxDetails;import java.math.BigDecimal;import java.util.ArrayList;import java.util.Date;import java.util.Iterator;import java.util.List;import javax.annotation.security.DeclareRoles;import javax.annotation.security.PermitAll;import javax.annotation.security.RolesAllowed;import javax.ejb.EJBException;import javax.ejb.Stateful;import javax.persistence.EntityManager;import javax.persistence.PersistenceContext;@DeclareRoles("bankCustomer")@Statefulpublic class TxControllerBean implements TxController {    private BigDecimal bigZero = new BigDecimal("0.00");    @PersistenceContext    private EntityManager em;    @RolesAllowed("bankCustomer")    public List<TxDetails> getTxsOfAccount(        Date startDate,        Date endDate,        Long accountId) throws InvalidParameterException {        Debug.print("TxControllerBean  getTxsOfAccount");        List<Tx> txs;        if (startDate == null) {            throw new InvalidParameterException("null startDate");        }        if (endDate == null) {            throw new InvalidParameterException("null endDate");        }        if (accountId == null) {            throw new InvalidParameterException("null accountId");        }        try {            txs = (List<Tx>) em.createNamedQuery("Tx.FindTxsByDates")                               .setParameter("startDate", startDate)                               .setParameter("endDate", endDate)                               .setParameter("accountId", accountId)                               .getResultList();        } catch (Exception ex) {            throw new EJBException(ex);        }        return copyTxsToDetails(txs);    } // getTxsOfAccount    @PermitAll    public TxDetails getDetails(Long txId)        throws TxNotFoundException, InvalidParameterException {        Debug.print("TxControllerBean getDetails");        TxDetails details;        if (txId == null) {            throw new InvalidParameterException("null txId");        }        try {            Tx tx = em.find(Tx.class, txId);            details = new TxDetails(                        tx.getId(),                        tx.getTimeStamp(),                        tx.getAmount(),                        tx.getBalance(),                        tx.getDescription());        } catch (Exception ex) {            throw new TxNotFoundException(txId);        }        return details;    } // getDetails    @RolesAllowed("bankCustomer")    public void withdraw(        BigDecimal amount,        String description,        Long accountId)        throws InvalidParameterException, AccountNotFoundException,            IllegalAccountTypeException, InsufficientFundsException {        Debug.print("TxControllerBean withdraw");        Account account = checkAccountArgs(amount, description, accountId);        String type = account.getType();        if (DomainUtil.isCreditAccount(type)) {            throw new IllegalAccountTypeException(type);        }        BigDecimal newBalance = account.getBalance()                                       .subtract(amount);        if (newBalance.compareTo(bigZero) == -1) {            throw new InsufficientFundsException();        }        executeTx(            amount.negate(),            description,            newBalance,            account);    }    @RolesAllowed("bankCustomer")    public void deposit(        BigDecimal amount,        String description,        Long accountId)        throws InvalidParameterException, AccountNotFoundException,            IllegalAccountTypeException {        Debug.print("TxControllerBean deposit");        Account account = checkAccountArgs(amount, description, accountId);        String type = account.getType();        if (DomainUtil.isCreditAccount(type)) {            throw new IllegalAccountTypeException(type);        }        BigDecimal newBalance = account.getBalance()                                       .add(amount);        executeTx(amount, description, newBalance, account);    }    @RolesAllowed("bankCustomer")    public void makeCharge(        BigDecimal amount,        String description,        Long accountId)        throws InvalidParameterException, AccountNotFoundException,            IllegalAccountTypeException, InsufficientCreditException {        Debug.print("TxControllerBean charge");        Account account = checkAccountArgs(amount, description, accountId);        String type = account.getType();        if (DomainUtil.isCreditAccount(type) == false) {            throw new IllegalAccountTypeException(type);        }        BigDecimal newBalance = account.getBalance()                                       .add(amount);        if (newBalance.compareTo(account.getCreditLine()) == 1) {            throw new InsufficientCreditException();        }        executeTx(amount, description, newBalance, account);    }    @RolesAllowed("bankCustomer")    public void makePayment(        BigDecimal amount,        String description,        Long accountId)        throws InvalidParameterException, AccountNotFoundException,            IllegalAccountTypeException {        Debug.print("TxControllerBean makePayment");        Account account = checkAccountArgs(amount, description, accountId);        String type = account.getType();        if (DomainUtil.isCreditAccount(type) == false) {            throw new IllegalAccountTypeException(type);        }        BigDecimal newBalance = account.getBalance()                                       .subtract(amount);        executeTx(amount, description, newBalance, account);    }    @RolesAllowed("bankCustomer")    public void transferFunds(        BigDecimal amount,        String description,        Long fromAccountId,        Long toAccountId)        throws InvalidParameterException, AccountNotFoundException,            InsufficientFundsException, InsufficientCreditException {        Account fromAccount = checkAccountArgs(                    amount,                    description,                    fromAccountId);        Account toAccount = checkAccountArgs(amount, description, toAccountId);        String fromType = fromAccount.getType();        BigDecimal fromBalance = fromAccount.getBalance();        if (DomainUtil.isCreditAccount(fromType)) {            BigDecimal fromNewBalance = fromBalance.add(amount);            if (fromNewBalance.compareTo(fromAccount.getCreditLine()) == 1) {                throw new InsufficientCreditException();            }            executeTx(amount, description, fromNewBalance, fromAccount);        } else {            BigDecimal fromNewBalance = fromBalance.subtract(amount);            if (fromNewBalance.compareTo(bigZero) == -1) {                throw new InsufficientFundsException();            }            executeTx(                    amount.negate(),                    description,                    fromNewBalance,                    fromAccount);        }        String toType = toAccount.getType();        BigDecimal toBalance = toAccount.getBalance();        if (DomainUtil.isCreditAccount(toType)) {            BigDecimal toNewBalance = toBalance.subtract(amount);            executeTx(                amount.negate(),                description,                toNewBalance,                toAccount);        } else {            BigDecimal toNewBalance = toBalance.add(amount);            executeTx(amount, description, toNewBalance, toAccount);        }    } // transferFunds    // private methods    private void executeTx(        BigDecimal amount,        String description,        BigDecimal newBalance,        Account account) {        Debug.print("TxControllerBean executeTx");        Tx tx = null;        // Set the new balance and create a new transaction               try {            account.setBalance(newBalance);            tx = new Tx(                        account,                        new java.util.Date(),                        amount,                        newBalance,                        description);            em.persist(tx);        } catch (Exception ex) {            throw new EJBException("executeTx: " + ex.getMessage());        }    }    private Account checkAccountArgs(        BigDecimal amount,        String description,        Long accountId)        throws InvalidParameterException, AccountNotFoundException {        Account account = null;        if (description == null) {            throw new InvalidParameterException("null description");        }        if (accountId == null) {            throw new InvalidParameterException("null accountId");        }        if (amount.compareTo(bigZero) != 1) {            throw new InvalidParameterException("amount <= 0");        }        try {            account = em.find(Account.class, accountId);        } catch (Exception ex) {            throw new AccountNotFoundException(accountId);        }        return account;    } // checkAccountArgs    private List<TxDetails> copyTxsToDetails(List<Tx> txs) {        List<TxDetails> detailsList = new ArrayList<TxDetails>();        Iterator<Tx> i = txs.iterator();        try {            while (i.hasNext()) {                Tx tx = (Tx) i.next();                TxDetails txDetails = new TxDetails(                            tx.getId(),                            tx.getTimeStamp(),                            tx.getAmount(),                            tx.getBalance(),                            tx.getDescription());                detailsList.add(txDetails);            }        } catch (Exception ex) {            throw new EJBException(ex.getMessage());        }        return detailsList;    }}

⌨️ 快捷键说明

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