2 つの別個の Web アプリケーションと、Restful API サーバーを作成しました。
これらは、Eclipse 内の動的 Web プロジェクトとしてチェックアウトされた Maven プロジェクトです。
私が使用しているいくつかの依存関係には、Spring 3 MVC、Spring Security、Hibernate、および JPA が含まれます。
私の Web アプリケーションと API はどちらも、各アプリケーションで多数の同じドメイン モデル、DAO、およびサービスを利用しています。
それらはすべて、モデル、dao、サービスの独自の独立したコピーを持っています。
構造:
***Consumer App:***
-Model<br/>
..User.java<br/>
..Card.java<br/>
..Purchase.java<br/>
-Dao<br/>
..UserDAO.java<br/>
..CardDAO.java<br/>
..PurchaseDAO.java<br/>
-Services<br/>
..UserService.java<br/>
..CardService.java<br/>
..PurchaseService.java<br/>
***Admin App:***
Same with few different models, dao's and services.
***API Server:***
Same with few different models, dao's and services.
ユーザー:
@Entity
public class User implements Serializable
{
/**
*
*/
private static final long serialVersionUID = -5232533507244034448L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotEmpty
@Size(min=2, max=15)
private String firstname;
@NotEmpty
@Size(min=2, max=15)
private String surname;
@NotEmpty
@Email
private String email;
@NotEmpty
@Size(min=6, max=10)
private String password;
@OneToOne(mappedBy="user", cascade={CascadeType.ALL})
private UserRole userRole;
@OneToMany(mappedBy = "user", fetch = FetchType.EAGER, cascade = { CascadeType.ALL })
private Set<Card> cards;
@OneToMany(mappedBy = "user", fetch = FetchType.EAGER, cascade = { CascadeType.ALL })
private Set<UserOffer> offers;
@Temporal(TemporalType.TIMESTAMP)
private Date dob;
@NotEmpty
private String sex;
.......
}
ユーザーDAO:
@Repository
public class UserDAO extends AbstractJpaDAO<User> implements IUserDAO
{
@PersistenceContext
EntityManager entityManager;
public UserDAO()
{
setClazz(User.class);
}
public User findOneByEmail(String email)
{
return (User) entityManager
.createQuery("SELECT u FROM User u WHERE u.email = :email")
.setParameter("email", email).getSingleResult();
}
}
ユーザーサービス:
@Service
public class UserService implements IUserService
{
@Autowired
private IUserDAO userDAO;
public UserService()
{
}
@Transactional
public List<User> getAll()
{
return userDAO.findAll();
}
@Transactional
public User getById(Long id)
{
return userDAO.findOne(id);
}
...
}
ご覧のとおり、これらの重複を取り除き、可能であれば各モデル、dao、サービスのコピーを 1 つずつ用意する必要があります。
モデル、DAO、およびサービスを Web アプリケーションおよび API から削除し、jar として含める必要がある別のプロジェクト/モジュールに配置する最善の方法はありますか?
これにアプローチして実装する方法について誰か提案がありますか?
複数のSpringアプリケーション間で共有モジュールを作成した経験のある人からの簡単な概要は素晴らしいでしょう.