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

时间:2023-03-09 20:22:03
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 ;
}
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); }
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;
} }

 可以实现多表查询

    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;
} }

  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;
} }
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服务