美文网首页
序章:重构,向Spring出发

序章:重构,向Spring出发

作者: 柚子光谱 | 来源:发表于2022-04-09 22:59 被阅读0次

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

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

    • 前端使用Angular及一个第三方展示框架
    • 后端EJBIBM Liberty Server
    • DB2数据库

    开发过程中遇到的问题:

    • 由于某些安全验证原因,前端没法通过npm start单独启动也就不好Debug,想启动测试,需要每次ng build --prod,然后把成果物copy到后端随server一同启动
    • DevOps无法前后端分离部署,无法满足快速测试的需求
    • 且后端架构的资料较少,不是很 "现代化" 的Spring架构

    基于以上,我们开发团队决定趁业务尚不复杂的情况下,全面重构。使用当下流行的前后端分离架构,前端仍然使用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

    相关文章

      网友评论

          本文标题:序章:重构,向Spring出发

          本文链接:https://www.haomeiwen.com/subject/ocppsrtx.html