序章:重构,向Spring出发

2022-04-09  本文已影响0人  柚子光谱

最近初步完成了一个 EJB 项目到 SpringBoot 框架的重构,复盘一下,留个记录

第一次接触EJB,也不是很懂,是个全栈项目,简述一下EJB项目的情况:

开发过程中遇到的问题:

基于以上,我们开发团队决定趁业务尚不复杂的情况下,全面重构。使用当下流行的前后端分离架构,前端仍然使用Angular,后端选择Spring Boot框架重写,数据库仍然使用目前的DB2。这样在之后的DevOps部署上也会更加灵活。


以下是一些当前EJB项目中的代码示例

以一个Category接口为例,有三层,个人的理解应该有如下的对应关系:

框架 对外接口层 实际干活层 实体类层
EJB CategoryService CategoryBean Category
Spring Controller Service Repository/Entity

CategoryService.java

@Stateless
@Path("/CategoryService")
public class CategoryService {
  @EJB
  CategoryBean categoryBean;

  @GET
  @Produces("application/json")
  @Path("/list")
  public Response list() {
    try {
      return Response.ok().entity(categoryBean.list()).build();
    } catch (Exception e) {
      return Response.serverError().entity(new Exception(Constants.ERROR_READING_DATA, e)).build();
    }
  }
}

CategoryBean.java

@Stateless
@LocalBean
public class CategoryBean {
  @PersistenceContext(unitName = "MDJPA") // 配置在对应 persistence.xml 里
  protected EntityManager em;

  public List<Category> list() {
    Query query = em.createNamedQuery("Category.findAll");
    if (query != null) {
      return query.getResultList();
    }
    return new ArrayList<>();
  }
}

Category.java

@Entity
@Table
@NamedQuery(name = "Category.findAll", query = "SELECT c FROM Category c")
public class Category implements Serializable {
  private static final long serialVersionUID = 1L;

  @Id
  @XmlID
  @Column(name = "ID")
  private int id;

  @Column(name = "NAME")
  private String name;

  @Column(name = "CREATE_ID")
  private String createId;
// ...
// Getter Setter

还有诸多零碎配置就不在此列出了,比如persistence.xml,DB2 数据库相关配置,Liberty Server 的server.xml

上一篇下一篇

猜你喜欢

热点阅读