兄弟代码!
这里的第一个问题,所以我会尽力尊重所有标准。如果我跳过任何东西,请纠正我,我会马上解决。
我对我应用程序应采用的方法感到困惑。我在同一个EAR下有几个EJB项目和JSF项目,当然,我想为所有EJB项目定义一些本地接口。我有一个持久层,其中包含一些模块,这些模块由EAO模式提供,并通过会话外观访问业务层。
我的目的是创建一个“SharedInterfaces”Jar,它包含所有客户端接口(如果我必须说,所有EJB客户端jar),以及实体将实现的所有接口,以便我可以在它们之间抽象项目(没有依赖关系,只是一起工作的通用接口。)
如何将此“SharedInterfaces”项目转换为所有模块使用的公共EJB CLient Jar?另一方面,我可以进行一些接口扩展,因此我不必配置项目...仍然我不确定这个常见项目是否采用“最佳实践”方法。
答案 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
}
当然,人们应该始终小心他所暴露的内容。将接口视为服务合同,人们不应该能够访问他没有被访问的功能。