适用于同一EAR下各种模块的公共EJB Client Jar

时间:2012-03-20 14:38:02

标签: ejb-3.1

兄弟代码!

这里的第一个问题,所以我会尽力尊重所有标准。如果我跳过任何东西,请纠正我,我会马上解决。

我对我应用程序应采用的方法感到困惑。我在同一个EAR下有几个EJB项目和JSF项目,当然,我想为所有EJB项目定义一些本地接口。我有一个持久层,其中包含一些模块,这些模块由EAO模式提供,并通过会话外观访问业务层。

我的目的是创建一个“SharedInterfaces”Jar,它包含所有客户端接口(如果我必须说,所有EJB客户端jar),以及实体将实现的所有接口,以便我可以在它们之间抽象项目(没有依赖关系,只是一起工作的通用接口。)

如何将此“SharedInterfaces”项目转换为所有模块使用的公共EJB CLient Jar?另一方面,我可以进行一些接口扩展,因此我不必配置项目...仍然我不确定这个常见项目是否采用“最佳实践”方法。

1 个答案:

答案 0 :(得分:1)

好吧,我几乎把它弄清楚了。

SharedInterfaces项目定义了常用的接口,当我想为EJB创建LocalInterface时,我只是将该接口留空并扩展我在SharedInterfaces上定义的接口。容器似乎可以处理它,因为接口毕竟是一个本地接口(有点)。

为了清楚起见,我将添加一个我所做的简单示例。这是我为EJB创建的本地接口:

package org.myapp.managers;

import javax.ejb.Local;

@Local
public interface UserManagerLI extends IUserManager{

}

然后,在SharedInterfaces上,我只需添加接口IUserManager:

public interface IUserManager {

    public IUser newUser(); 
    public void saveOrUpdate(IUser u, boolean hashPass);    
    public void deleteUser(IUser u);    
    public boolean checkUserAvailability(String username);  
    public IUser getUser(String username);

}

然后,为了使用它我只是照常进行注射:

@ManagedBean
@SessionScoped
public class LogInBean {

    @EJB
    private IUserManager userManager;

        // Attributes, Setters, Getters and methods

}

当然,人们应该始终小心他所暴露的内容。将接口视为服务合同,人们不应该能够访问他没有被访问的功能。