EJB结合struts2创建项目、发布jboss服务器和访问、父类(BaseDaoImpl)的封装

一、环境搭建:

  1、准备jboss服务器,将对应数据库的xml配置好放到jboss的发布目录下。

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
  <local-tx-datasource>
    <jndi-name>MySqlDS</jndi-name>
    <connection-url>jdbc:mysql://192.168.1.11:3306/test?useUnicode=true&amp;characterEncoding=utf-8</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>root</user-name>
    <password>root</password>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
    <metadata>
       <type-mapping>mySQL</type-mapping>
    </metadata>
  </local-tx-datasource>
</datasources>

  2、创建普通的java项目

    在该项目的src目录下的META-INF目录下创建persistence.xml文件(名称不能改变),文件内容如下,发布之后通过jndi名称(MySqlDS)就可以找到数据源。

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
    http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
    <persistence-unit name="UnitMySql">
        <jta-data-source>java:/MySqlDS</jta-data-source>
        <mapping-file>META-INF/mapping.xml</mapping-file>
        <exclude-unlisted-classes>true</exclude-unlisted-classes>
        <properties>
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true" />
            <!-- <property name="hibernate.format_sql" value="false" /> -->
        </properties>
    </persistence-unit>
</persistence>

    mapping.xml文件里面只有是实体类映射

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings version="1.0" 
    xmlns="http://java.sun.com/xml/ns/persistence/orm" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd ">
    <entity class="com.net.entity.User"></entity> ....
    
</entity-mappings>

  3、在src目录下创建 jndi.properties

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost:1099
public static Object getEJB(String jndipath) {
        try {
            Properties props = new Properties();
            props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
            props.setProperty("java.naming.provider.url", "localhost:1099");
            props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
            InitialContext ctx = new InitialContext(props);
            return ctx.lookup(jndipath);
        }catch(NamingException ex) {
            ex.printStackTrace();
        }
        return null;
    }

 

二、准备ejb的service层和dao层:

  1、父类封装:

public interface BaseDao<T> {

    public void setOrderBy(String orderBy);

    public void save(T t) throws DAOException;

    public void update(T t) throws DAOException;

    public void delete(T t) throws DAOException;

    public void delete(Collection<T> list) throws DAOException;

    public void delete(Serializable id) throws DAOException;

    public void delete(String[] ids) throws DAOException;

    public T find(Serializable id) throws DAOException;

    /**
     * 获取信息数量
     * 
     * @param id
     *            实体id
     * @return
     * @throws DAOException
     */
    public Long findCount() throws DAOException;

    /**
     * 获取所有实体类列表
     * 
     * @return
     * @throws DAOException
     */
    public List<T> findAll() throws DAOException;

    /**
     * 获取信息分页
     * 
     * @param condition
     *            查询条件
     * @param currentPage
     *            当前页
     * @param pageCount
     *            每页数据行数
     * @return 分页信息
     * @throws DAOException
     */
    public PageInfo<T> findPageInfo(Integer currentPage, Integer pageCount) throws DAOException;

    /**
     * 获取信息列表By条件
     * 
     * @param condition
     *            查询条件
     * @return 信息列表
     * @throws DAOException
     */
    public Long findCountByCondation(String condition) throws DAOException;

    /**
     * 获取信息列表By条件
     * 
     * @param condition
     *            查询条件
     * @return 信息列表
     * @throws DAOException
     */
    public List<T> findListByCondation(String condition) throws DAOException;

    /**
     * 获取信息列表By条件
     * 
     * @param condition
     *            查询条件
     * @param currentPage
     *            当前页
     * @param pageCount
     *            每页数据行数
     * @return 信息列表
     * @throws DAOException
     */
    public List<T> findListByCondation(String condition, Integer currentPage, Integer pageCount) throws DAOException;

    /**
     * 获取信息分页By条件
     * 
     * @param condition
     *            查询条件
     * @param currentPage
     *            当前页
     * @param pageCount
     *            每页数据行数
     * @return 分页信息
     * @throws DAOException
     */
    public PageInfo<T> findPageInfoByCondation(String condition, Integer currentPage, Integer pageCount) throws DAOException;

    /**
     * 获取信息列表By条件
     * 
     * @param condition
     *            查询条件
     * @return 信息列表
     * @throws DAOException
     */
    public Long findCountByNativeCondation(StringBuffer condition) throws DAOException;

    /**
     * 获取信息列表By条件
     * 
     * @param condition
     *            查询条件
     * @return 信息列表
     * @throws DAOException
     */
    public List<?> findListByNativeCondation(StringBuffer condition) throws DAOException;

    /**
     * 获取信息列表By条件
     * 
     * @param condition
     *            查询条件
     * @param currentPage
     *            当前页
     * @param pageCount
     *            每页数据行数
     * @return 信息列表
     * @throws DAOException
     */
    public List<?> findListByNativeCondation(StringBuffer condition, Integer currentPage, Integer pageCount) throws DAOException;

    /**
     * 获取信息分页By条件
     * 
     * @param condition
     *            查询条件
     * @param currentPage
     *            当前页
     * @param pageCount
     *            每页数据行数
     * @return 分页信息
     * @throws DAOException
     */
    public PageInfo<?> findPageInfoByNativeCondation(StringBuffer condition, Integer currentPage, Integer pageCount) throws DAOException;

    public PageInfo<T> findPageInfoBySql(String sql, String countsql, Integer currentPage, Integer pageCount) throws DAOException;

    public Long findCountByProperties(String condition, Map<String, Object> map) throws DAOException;

    public List<T> findListByProperties(String condition, Map<String, Object> map) throws DAOException;

    public List<T> findListByProperties(String condition, Integer currentPage, Integer pageCount, Map<String, Object> map) throws DAOException;

    public PageInfo<T> findPageInfoByProperties(String condition, Integer currentPage, Integer pageCount, Map<String, Object> map) throws DAOException;

    public <E> List<E> findListByNativeQuery(String sql, Class<E> clazz) throws DAOException;

    /**
     * 查询对象是否存在
     * 
     * @param id
     *            对象id
     * @return
     * @throws DAOException
     */
    public boolean isEmpty(String id) throws DAOException;
    /**
     * 
     * sql
     * @param <E>
     * @param tablename 数据库对应表名
     * @param clazz 映射的实体类
     * @param sql 查询语句
     * @param wheresql 查询语句where后面部分
     * @param currentPage 当前页
     * @param pageCount 每页数量
     * @return
     * @throws DAOException
     */
    public <E> PageInfo<E> findPageInfoByNativeQuery(Class<E> clazz,String sql,  String wheresql, Integer currentPage, Integer pageCount) throws DAOException ;
}
View Code
public abstract class BaseDaoBean<T> implements BaseDao<T> {

    protected static final Logger logger = Logger.getLogger(BaseDaoBean.class);
    protected String orderBy;

    /** 实体类 */
    protected Class<T> entityClass;
    /** 实体类类名 */
    protected String entityClassName;

    protected EntityManager entityManager;

    @Override
    public void save(T t) throws DAOException {
        entityManager.persist(t);
    }

    @Override
    public void update(T t) throws DAOException {
        entityManager.merge(t);
    }

    @Override
    public void delete(T t) throws DAOException {
        entityManager.remove(t);
    }

    @Override
    public void delete(Collection<T> list) throws DAOException {
        for (T t : list) {
            entityManager.remove(t);
        }
    }

    @Override
    public void delete(Serializable id) throws DAOException {
        entityManager.remove(entityManager.getReference(entityClass, id));
    }

    @Override
    public void delete(String[] ids) throws DAOException {
        if (ids != null && ids.length != 0) {
            for (String id : ids) {
                entityManager.remove(entityManager.getReference(entityClass, id));
            }
        }
    }

    @Override
    public T find(Serializable id) throws DAOException {
        return entityManager.find(entityClass, id);
    }

    @Override
    public Long findCount() throws DAOException {
        return findCountByCondation(null);
    }

    @Override
    public List<T> findAll() throws DAOException {
        return findListByCondation(null, null, null);
    }

    @Override
    public PageInfo<T> findPageInfo(Integer currentPage, Integer pageCount) throws DAOException {
        return findPageInfoByCondation(null, currentPage, pageCount);
    }

    @Override
    public Long findCountByCondation(String condition) throws DAOException {
        StringBuffer sql = new StringBuffer("SELECT COUNT(t.id) FROM " + entityClassName + " t ");
        if (condition != null && !condition.isEmpty()) {
            sql.append(condition);
        }

        logger.debug("sql:" + sql);
        Long count = (Long) entityManager.createQuery(sql.toString()).getSingleResult();
        return count;
    }

    @Override
    public List<T> findListByCondation(String condition) throws DAOException {
        return findListByCondation(condition, null, null);
    }

    @Override
    @SuppressWarnings("unchecked")
    public List<T> findListByCondation(String condition, Integer currentPage, Integer pageCount) throws DAOException {
        StringBuffer sql = new StringBuffer("SELECT t FROM " + entityClassName + " t ");
        if (condition != null && !condition.isEmpty()) {
            sql.append(condition);
        }

        if (orderBy != null && !orderBy.isEmpty()) {
            sql.append(" ORDER BY " + orderBy);
        }
        logger.debug("sql:" + sql);
        Query query = entityManager.createQuery(sql.toString());
        if (currentPage != null && pageCount != null) {
            query.setFirstResult((currentPage - 1) * pageCount);
            query.setMaxResults(pageCount);
        }
        return query.getResultList();
    }

    @Override
    public PageInfo<T> findPageInfoByCondation(String condition, Integer currentPage, Integer pageCount) throws DAOException {
        Long dataCountMax = this.findCountByCondation(condition);
        List<T> tList = this.findListByCondation(condition, currentPage, pageCount);
        PageInfo<T> pageInfo = new PageInfo<T>(currentPage, pageCount, dataCountMax.intValue(), tList);
        return pageInfo;
    }

    public static void main(String[] args) {
        Object o = new BigInteger("123123");
        System.out.println(o);
        System.out.println(o.getClass());
        BigInteger bi = (BigInteger) o;
        System.out.println(bi);

    }

    @Override
    public Long findCountByNativeCondation(StringBuffer condition) throws DAOException {
        if (condition == null) {
            return 0L;
        }
        StringBuffer sql = new StringBuffer("SELECT COUNT(1) FROM ( ");
        sql.append(condition);
        sql.append(" ) countNum ");

        logger.debug("sql:" + sql);
        Object o = entityManager.createNativeQuery(sql.toString()).getSingleResult();
        Long count = 0L;
        if (o instanceof BigInteger) {
            count = ((BigInteger) o).longValue();
        } else {
            count = (Long) entityManager.createNativeQuery(sql.toString()).getSingleResult();
        }
        return count;
    }

    @Override
    public List<?> findListByNativeCondation(StringBuffer condition) throws DAOException {
        return findListByNativeCondation(condition, null, null);
    }

    @Override
    public List<?> findListByNativeCondation(StringBuffer sql, Integer currentPage, Integer pageCount) throws DAOException {
        if (orderBy != null && !orderBy.isEmpty()) {
            sql.append(" ORDER BY " + orderBy);
        }
        logger.debug("sql:" + sql);
        Query query = entityManager.createNativeQuery(sql.toString());
        if (currentPage != null && pageCount != null) {
            query.setFirstResult((currentPage - 1) * pageCount);
            query.setMaxResults(pageCount);
        }
        return query.getResultList();
    }

    @Override
    @SuppressWarnings({ "unchecked", "rawtypes" })
    public PageInfo<?> findPageInfoByNativeCondation(StringBuffer condition, Integer currentPage, Integer pageCount) throws DAOException {
        Long dataCountMax = this.findCountByNativeCondation(condition);
        List<?> tList = this.findListByNativeCondation(condition, currentPage, pageCount);
        PageInfo<?> pageInfo = new PageInfo(currentPage, pageCount, dataCountMax.intValue(), tList);
        return pageInfo;
    }

    @Override
    public Long findCountByProperties(String condition, Map<String, Object> map) throws DAOException {
        StringBuffer sql = new StringBuffer("SELECT COUNT(t.id) FROM " + entityClassName + " t ");
        if (condition != null && !condition.isEmpty()) {
            sql.append(condition);
        }

        logger.debug("sql:" + sql);
        if (map != null) {
            for (Object value : map.values()) {
                logger.debug("map:" + value);
            }
        }
        Query query = entityManager.createQuery(sql.toString());
        if (map != null) {
            for (String key : map.keySet()) {
                query.setParameter(key, map.get(key));
            }
        }
        Long count = (Long) query.getSingleResult();
        return count;
    }

    @Override
    @SuppressWarnings("unchecked")
    public PageInfo<T> findPageInfoBySql(String sql, String countsql, Integer currentPage, Integer pageCount) throws DAOException {
        Long count = (Long) entityManager.createQuery(countsql).getSingleResult();
        if (orderBy != null && !orderBy.isEmpty()) {
            sql += " ORDER BY " + orderBy;
        }
        Query query = entityManager.createQuery(sql);
        if (currentPage != null && pageCount != null) {
            query.setFirstResult((currentPage - 1) * pageCount);
            query.setMaxResults(pageCount);
        }
        return new PageInfo<T>(currentPage, pageCount, count.intValue(), query.getResultList());
    }

    @Override
    public List<T> findListByProperties(String condition, Map<String, Object> map) throws DAOException {
        return findListByProperties(condition, null, null, map);
    }

    @Override
    @SuppressWarnings("unchecked")
    public List<T> findListByProperties(String condition, Integer currentPage, Integer pageCount, Map<String, Object> map) throws DAOException {
        StringBuffer sql = new StringBuffer("SELECT t FROM " + entityClassName + " t ");
        if (condition != null && !condition.isEmpty()) {
            sql.append(condition);
        }

        if (orderBy != null && !orderBy.isEmpty()) {
            sql.append(" ORDER BY " + orderBy);
        }
        logger.debug("sql:" + sql);
        if (map != null) {
            for (Object value : map.values()) {
                logger.debug("map:" + value);
            }
        }
        Query query = entityManager.createQuery(sql.toString());
        if (currentPage != null && pageCount != null) {
            query.setFirstResult((currentPage - 1) * pageCount);
            query.setMaxResults(pageCount);
        }
        if (map != null) {
            for (String key : map.keySet()) {
                query.setParameter(key, map.get(key));
            }
        }

        return query.getResultList();
    }

    @Override
    public PageInfo<T> findPageInfoByProperties(String condition, Integer currentPage, Integer pageCount, Map<String, Object> map) throws DAOException {
        Long dataCountMax = this.findCountByProperties(condition, map);
        List<T> tList = this.findListByProperties(condition, currentPage, pageCount, map);
        PageInfo<T> pageInfo = new PageInfo<T>(currentPage, pageCount, dataCountMax.intValue(), tList);
        return pageInfo;
    }

    @Override
    @SuppressWarnings("unchecked")
    public <E> List<E> findListByNativeQuery(String sql, Class<E> clazz) throws DAOException {
        return entityManager.createNativeQuery(sql, clazz).getResultList();
    }
    
    @Override
    @SuppressWarnings("unchecked")
    public <E> PageInfo<E> findPageInfoByNativeQuery(Class<E> clazz,String sql,  String wheresql, Integer currentPage, Integer pageCount) throws DAOException {
        Long count = (Long)entityManager.createQuery("SELECT COUNT(*) FROM "+clazz.getSimpleName()+" t  WHERE 1=1 "+wheresql).getSingleResult();
        if (orderBy != null && !orderBy.isEmpty()) {
            wheresql += " ORDER BY " + orderBy;
        }
        Query query = entityManager.createNativeQuery(sql+wheresql,clazz);
        if (currentPage != null && pageCount != null) {
            query.setFirstResult((currentPage - 1) * pageCount);
            query.setMaxResults(pageCount);
        }
        
        return new PageInfo<E>(currentPage, pageCount, count.intValue(), query.getResultList());
        
    }

    @Override
    public boolean isEmpty(String id) throws DAOException {
        if (find(id) == null) {
            return true;
        }
        return false;
    }

    @SuppressWarnings("unchecked")
    public BaseDaoBean() {
        // getClass() 返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。
        this.entityClass = (Class<T>) getSuperClassGenricType(getClass(), 0);
        this.entityClassName = entityClass.getSimpleName();
    }

    @SuppressWarnings("all")
    protected static Class<Object> getSuperClassGenricType(final Class<?> clazz, final int index) {
        // 返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的直接超类的 Type。
        Type genType = clazz.getGenericSuperclass();
        if (!(genType instanceof ParameterizedType)) {
            return Object.class;
        }
        // 返回表示此类型实际类型参数的 Type 对象的数组。
        Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
        if (index >= params.length || index < 0) {
            return Object.class;
        }
        if (!(params[index] instanceof Class)) {
            return Object.class;
        }
        return (Class<Object>) params[index];
    }

    @Override
    public void setOrderBy(String orderBy) {
        this.orderBy = orderBy;
    }

    public abstract void setEntityManager(EntityManager entityManager);

}
View Code
public class PageInfo<T> implements Serializable, Cloneable {
    private static final Logger logger = Logger.getLogger(PageInfo.class);

    private static final long serialVersionUID = -4940465203107135908L;
    /** 当前页码 */
    private Integer currentPage;
    /** 每页数据行数 */
    private Integer pageCount;
    /** 数据总条数 */
    private Integer dataCountMax;
    /** 最大页码 */
    private Integer pageMax;
    /** 实体集合 */
    private List<T> list;
    /** 是否有上一页 */
    private Boolean hasPrev;
    /** 是否有下一页 */
    private Boolean hasNext;
    /** 显示的页数集合 */
    private List<Integer> listPaginDisplay = null;

    public List<Integer> getListPaginDisplay() {
        return listPaginDisplay;
    }

    public void setListPaginDisplay(List<Integer> listPaginDisplay) {
        this.listPaginDisplay = listPaginDisplay;
    }

    public PageInfo() {

    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    /**
     * @param currentPage
     *            当前页码
     * @param pageCount
     *            每页数据行数
     * @param dataCountMax
     *            数据总条数
     */
    public PageInfo(Integer currentPage, Integer pageCount, Integer dataCountMax) {
        this.currentPage = currentPage;
        this.pageCount = pageCount;
        this.dataCountMax = dataCountMax;
        this.setParameters();
    }

    /**
     * @param currentPage
     *            当前页码
     * @param pageCount
     *            每页数据行数
     * @param dataCountMax
     *            数据总条数
     * @param list
     *            分页后list
     */
    public PageInfo(Integer currentPage, Integer pageCount, Integer dataCountMax, List<T> list) {
        this.currentPage = currentPage;
        this.pageCount = pageCount;
        this.dataCountMax = dataCountMax;
        this.setParameters();
        this.list = list;
    }

    /** 重新加载数据信息 */
    public void setParameters() {
        if (currentPage == null) {
            currentPage = 1;
        }
        if (pageCount == null || pageCount < 1) {
            logger.warn("pageCount = 0, setPageCount=100");
            pageCount = 100;
        }
        if (dataCountMax == null) {
            dataCountMax = 10;
        }

        this.pageMax = dataCountMax % pageCount == 0 ? (dataCountMax / pageCount) : (dataCountMax / pageCount + 1);

        if (currentPage > pageMax) {
            currentPage = pageMax;
        }

        this.hasPrev = currentPage > 1 ? true : false;
        this.hasNext = pageMax > currentPage ? true : false;
    }

    /**
     * @return the currentPage
     */
    public Integer getCurrentPage() {
        return currentPage;
    }

    /**
     * @param currentPage
     *            the currentPage to set
     */
    public void setCurrentPage(Integer currentPage) {
        this.currentPage = currentPage;
        // 重新加载数据信息
        this.setParameters();
    }

    /**
     * @return the pageCount
     */
    public Integer getPageCount() {
        return pageCount;
    }

    /**
     * @param pageCount
     *            the pageCount to set
     */
    public void setPageCount(Integer pageCount) {
        this.pageCount = pageCount;
        // 重新加载数据信息
        this.setParameters();
    }

    /**
     * @return the pageMax
     */
    public Integer getPageMax() {
        return pageMax;
    }

    /**
     * @param pageMax
     *            the pageMax to set
     */
    public void setPageMax(Integer pageMax) {
        this.pageMax = pageMax;
    }

    /**
     * @return the list
     */
    public List<T> getList() {
        return list;
    }

    /**
     * @param list
     *            the list to set
     */
    public void setList(List<T> list) {
        this.list = list;
    }

    /**
     * @return the hasPrev
     */
    public Boolean getHasPrev() {
        return hasPrev;
    }

    /**
     * @param hasPrev
     *            the hasPrev to set
     */
    public void setHasPrev(Boolean hasPrev) {
        this.hasPrev = hasPrev;
    }

    /**
     * @return the hasNext
     */
    public Boolean getHasNext() {
        return hasNext;
    }

    /**
     * @param hasNext
     *            the hasNext to set
     */
    public void setHasNext(Boolean hasNext) {
        this.hasNext = hasNext;
    }

    /**
     * @return the dataCountMax
     */
    public Integer getDataCountMax() {
        return dataCountMax;
    }

    /**
     * @param dataCountMax
     *            the dataCountMax to set
     */
    public void setDataCountMax(Integer dataCountMax) {
        this.dataCountMax = dataCountMax;
    }

}
View Code

 可以实现多表查询

    public PageInfo findPageInfoBySql(String sql,String countsql, Integer currentPage, Integer pageCount) throws DAOException{
        Long count = (Long) entityManager.createQuery(countsql).getSingleResult();
        if (orderBy != null && !orderBy.isEmpty()) {
            sql+=" ORDER BY " + orderBy;
        }
        Query query = entityManager.createQuery(sql);    
        if (currentPage != null && pageCount != null) {
            query.setFirstResult((currentPage - 1) * pageCount);
            query.setMaxResults(pageCount);
        }
        return new PageInfo(currentPage, pageCount, count.intValue(),query.getResultList());
    }

 

public class PageInfo implements Serializable {
    private static final Logger logger = Logger.getLogger(PageInfo.class);

    private static final long serialVersionUID = -4940465203107135908L;
    /** 当前页码 */
    private Integer currentPage;
    /** 每页数据行数 */
    private Integer pageCount;
    /** 数据总条数 */
    private Integer dataCountMax;
    /** 最大页码 */
    private Integer pageMax;
    /** 实体集合 */
    private List<?> list;
    /** 是否有上一页 */
    private Boolean hasPrev;
    /** 是否有下一页 */
    private Boolean hasNext;

    private List<?> listPaginDisplay = null;

    public List<?> getListPaginDisplay() {
        return listPaginDisplay;
    }

    public void setListPaginDisplay(List listPaginDisplay) {
        this.listPaginDisplay = listPaginDisplay;
    }

    public PageInfo() {

    }

    /**
     * @param currentPage
     *            当前页码
     * @param pageCount
     *            每页数据行数
     * @param dataCountMax
     *            数据总条数
     */
    public PageInfo(Integer currentPage, Integer pageCount, Integer dataCountMax) {
        this.currentPage = currentPage;
        this.pageCount = pageCount;
        this.dataCountMax = dataCountMax;
        this.setParameters();
    }

    /**
     * @param currentPage
     *            当前页码
     * @param pageCount
     *            每页数据行数
     * @param dataCountMax
     *            数据总条数
     * @param list
     *            分页后list
     */
    public PageInfo(Integer currentPage, Integer pageCount,
            Integer dataCountMax, List<?> list) {
        this.currentPage = currentPage;
        this.pageCount = pageCount;
        this.dataCountMax = dataCountMax;
        this.setParameters();
        this.list = list;
    }

    /** 重新加载数据信息 */
    public void setParameters() {
        if (currentPage == null) {
            currentPage = 1;
        }
        if (pageCount == null || pageCount < 1) {
            logger.warn("pageCount = 0, setPageCount=100");
            pageCount = 100;
        }
        if (dataCountMax == null) {
            dataCountMax = 10;
        }

        this.pageMax = dataCountMax % pageCount == 0 ? (dataCountMax / pageCount)
                : (dataCountMax / pageCount + 1);

        if (currentPage > pageMax) {
            currentPage = pageMax;
        }

        this.hasPrev = currentPage > 1 ? true : false;
        this.hasNext = pageMax > currentPage ? true : false;
    }

    /**
     * @return the currentPage
     */
    public Integer getCurrentPage() {
        return currentPage;
    }

    /**
     * @param currentPage
     *            the currentPage to set
     */
    public void setCurrentPage(Integer currentPage) {
        this.currentPage = currentPage;
        // 重新加载数据信息
        this.setParameters();
    }

    /**
     * @return the pageCount
     */
    public Integer getPageCount() {
        return pageCount;
    }

    /**
     * @param pageCount
     *            the pageCount to set
     */
    public void setPageCount(Integer pageCount) {
        this.pageCount = pageCount;
        // 重新加载数据信息
        this.setParameters();
    }

    /**
     * @return the pageMax
     */
    public Integer getPageMax() {
        return pageMax;
    }

    /**
     * @param pageMax
     *            the pageMax to set
     */
    public void setPageMax(Integer pageMax) {
        this.pageMax = pageMax;
    }

    /**
     * @return the list
     */
    public List<?> getList() {
        return list;
    }

    /**
     * @param list
     *            the list to set
     */
    public void setList(List<?> list) {
        this.list = list;
    }

    /**
     * @return the hasPrev
     */
    public Boolean getHasPrev() {
        return hasPrev;
    }

    /**
     * @param hasPrev
     *            the hasPrev to set
     */
    public void setHasPrev(Boolean hasPrev) {
        this.hasPrev = hasPrev;
    }

    /**
     * @return the hasNext
     */
    public Boolean getHasNext() {
        return hasNext;
    }

    /**
     * @param hasNext
     *            the hasNext to set
     */
    public void setHasNext(Boolean hasNext) {
        this.hasNext = hasNext;
    }

    /**
     * @return the dataCountMax
     */
    public Integer getDataCountMax() {
        return dataCountMax;
    }

    /**
     * @param dataCountMax
     *            the dataCountMax to set
     */
    public void setDataCountMax(Integer dataCountMax) {
        this.dataCountMax = dataCountMax;
    }

}
View Code

 

  2、dao接口及实现:

public interface PersonDao extends BaseDao<Person> {
    
}
public interface PersonDaoLocal extends PersonDao  {
    
}
public interface PersonDaoRemote extends PersonDao  {
    
}
@Stateless
@Local(PersonDaoLocal.class)//dao层实现用本地接口
public class PersonDaoImpl extends BaseDaoBean<Person> implements PersonDaoLocal,PersonDaoRemote{
    @Override
    @PersistenceContext(unitName = "UnitMySql")
    public void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

}

  3、service接口及实现:

public interface PersonService extends BaseService<Person> {
    public void update() throws ServiceException;
}
//无状态bean,本地接口和远程接口 jndi名称
@Stateless
@Local(PersonServiceLocal.class)
@LocalBinding(jndiBinding = "PersonServiceBean/local")
@Remote(PersonServiceRemote.class)
@RemoteBinding(jndiBinding = "PersonServiceBean/remote")
public class PersonServiceImpl implements PersonServiceLocal,PersonServiceRemote {        
    @EJB
    private PersonDaoLocal perosnDaoLocal;
//通过ejb注入方式将dao层注入到service中
}

   4、调用Service

public class ActionSupportBase extends ActionSupport implements SessionAware, RequestAware, ServletResponseAware,
        ServletRequestAware, ApplicationAware {

    private static final long serialVersionUID = -4065551378754830182L;
    private static final Logger logger = Logger.getLogger(ActionSupportBase.class);
    protected static final String STATUS = "status";
    protected static final String MESSAGE = "message";
    protected static final String INFO = "info";
    protected static final String Y = "y";
    protected static final String N = "n";
    protected static final String MODIFY = "modify";
    protected static final String DETAIL = "detail";
    protected static final String SAVE_SUCCESS = "保存成功";
    protected static final String MODIFY_SUCCESS = "修改成功!";
    protected static final String DELETE_SUCCESS = "删除成功";

    protected String systemName = ServletActionContext.getServletContext().getInitParameter(ConstUtil.SYSTEMNAME);
    protected Map<String, Object> jsonMap = new HashMap<String, Object>();
    protected Map<String, Object> application;
    protected Map<String, Object> session;
    protected Map<String, Object> request;

    protected HttpServletResponse servletResponse;
    protected HttpServletRequest servletRequest;

    protected static Context context = null;

    public ActionSupportBase() {
        initContext();
    }

    protected void initContext() {
        try {
            if (context == null) {
                context = new InitialContext();
            }
        } catch (NamingException e) {
            logger.warn(e);
        }
    }

    /**
     * 将一个字符串输出到浏览器
     * 
     * @author 李斌
     * @param json
     *            字符串
     */
    protected void writeJson(String json) {
        PrintWriter pw = null;
        try {
            servletResponse.setContentType("text/plain;charset=UTF-8");
            pw = servletResponse.getWriter();
            pw.write(json);
            pw.flush();
            pw.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (pw != null) {
                pw.close();
            }
        }
    }

    public Map<String, Object> getApplication() {
        return application;
    }

    public void setApplication(Map<String, Object> application) {
        this.application = application;
    }

    public Map<String, Object> getSession() {
        return session;
    }

    public void setSession(Map<String, Object> session) {
        this.session = session;
    }

    public Map<String, Object> getRequest() {
        return request;
    }

    public void setRequest(Map<String, Object> request) {
        this.request = request;
    }

    public Map<String, Object> getJsonMap() {
        return jsonMap;
    }

    public void setJsonMap(Map<String, Object> jsonMap) {
        this.jsonMap = jsonMap;
    }

    public HttpServletResponse getServletResponse() {
        return servletResponse;
    }

    public void setServletResponse(HttpServletResponse servletResponse) {
        this.servletResponse = servletResponse;
    }

    public HttpServletRequest getServletRequest() {
        return servletRequest;
    }

    public void setServletRequest(HttpServletRequest servletRequest) {
        this.servletRequest = servletRequest;
    }

}
View Code
Context context = new InitialContext();
private PersonServiceRemote service = (PersonServiceRemote) context.lookup("PersonServiceBean/remote");

  三、创建web项目

    1、需要引入jboss的jboss-4.2.3.GA\client目录下的jar文件。

  2、在WEB-INF文件夹下创建jboss-web.xml文件,它用于设置发布到jboss上项目的根路径。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-web
    PUBLIC "-//JBoss//DTD Web Application 2.3V2//EN"
    "http://www.jboss.org/j2ee/dtd/jboss-web_3_2.dtd">
<jboss-web>
    <context-root>/</context-root>
    <virtual-host>self.net.cn</virtual-host>
</jboss-web>

  3、如果要打包成ear项目,通过ant文件,在ear项目下需要创建一个META-INF文件夹,然后再META-INF文件夹下创建application.xml文件。

<?xml version="1.0" encoding="ASCII"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:application="http://java.sun.com/xml/ns/javaee/application_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd" version="5">
  <display-name>my</display-name>
  <module>
    <ejb>myejb.jar</ejb>
  </module>
  <module>
    <web>
      <web-uri>myweb.war</web-uri>
      <context-root>/</context-root>
    </web>
  </module>
</application>

四、发布项目

    1、可以将项目打成war包或(ear)发布到jboss服务器上,可以发布到“ jboss-4.2.3.GA\server\all\deploy ”目录下。

    2、访问资源文件:localhost:8080/项目名称/资源文件

    3、访问action:localhost:8080/项目名称/struts包命名空间/action

    4、http://127.0.0.1:8080/jbossws/services 查看webservice的发布情况

  5、127.0.0.1/jmx-console  查看jboss服务

posted @ 2013-11-06 17:34  若 ♂ 只如初见  阅读(646)  评论(0编辑  收藏  举报