Liferay服务商业逻辑

时间:2017-05-19 05:04:23

标签: liferay liferay-6

我想澄清一个疑问。我正在创建自己的服务类来操纵数据。我应该在类级别(在MVCPortlet中)创建此服务实例,还是在我的processAction / doView方法中创建新实例。 使用实例级别时是否存在线程安全问题。

纤维蛋白原:

public class MvcCycle extends MVCPortlet {

    int counter;
    LdapService ldapservice;

    @Override
    public void init() throws PortletException {
        counter=0;
        ldapservice = new LdapService(); // Option 1
        super.init();
    }

    @Override
    public void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException {
        // TODO Auto-generated method stub
        System.out.println("Counter hits "+ ++counter);
        // 
        LdapService ldapservice = new LdapService(); // Option 2
        ldapservice.authUser(request.getParameter("email"));
        // -- some code--
        super.doView(renderRequest, renderResponse);
    }

    @Override
    public void destroy() {
        System.out.println("Last counter "+counter);
        counter=0;
        super.destroy();
    }

}

    class LdapService{
         public boolean authUser(String email){
              if(//logic to authenticate user){
                   return true;
              }else{
                   return false;
              }
         }
    }

在这里,我的ldapservice只启动一次。所以当多次点击时。这个时候哪个代码对Option1或Option 2有用。

希望我已经解决了我的问题。

1 个答案:

答案 0 :(得分:0)

跟进你的评论:总的来说:这取决于你。我们没有足够的信息为您提供空白的架构建议。

在Liferay的上下文中,即使您没有数据库交互,也可以使用服务构建器。只需创建一个空实体,就可以获得没有持久性的服务。

<entity name="MyService" local="true"/>

就是这样。现在实现MyServiceLocalServiceImpl添加你已经完成

在您澄清之后编辑:它没有任何区别。我仍然建议你的portlet中实例化,因为这会使你的portlet依赖于服务实现。例如。我仍然和服务建设者一起去。

您还询问线程安全性,这也取决于您的实现。您的示例代码是线程安全的,但实际代码可能不是。你的判断。