web-dev-qa-db-ja.com

Javaアプリの拡張メカニズムを設計する方法

コア機能のセットがあるアプリケーションがあります。

  1. アプリケーション自体はコア専用モードで動作する必要があります。

  2. また、アプリケーションを拡張可能にして、特定のjar /プラグインファイルがクラスパス/インストール場所に存在する場合に追加機能を利用できるようにしたいのです。これはオプションです。

私が行う方法は、変更を加えたファクトリパターンを使用することです。コアパッケージには、拡張ポイントがあります(パブリックスタティック変数またはシングルトン、または私のフレームワークのEclipse RCPからの他の拡張ポイントモデルによって実装されています)。拡張jar /プラグインはこの拡張ポイントを取得し、そのファクトリオブジェクトをこの拡張ポイントに登録します。 (これはRCPプラグイン/機能のアクティブ化メカニズムを使用して行うのが最適です。または、拡張jar /プラグインファクトリクラスのロードを引き起こすものであれば何でもかまいません)

アプリケーションが実行されると、コアファクトリは、登録されている場合は拡張ファクトリからオブジェクトを生成するか、そうでない場合はそのコアファクトリを使用します。これは、拡張jarが存在する場合に、アプリケーションがコアモードから拡張モードに移行する方法です。

これが私がやりたかったことを行うための適切な方法なのか、これは単なるハックやアンチパターンなどなのかと思います。可能であれば、より良い解決策を提案してください。ありがとう。

3
InformedA

Javaサービスプロバイダーは、JDBCプラグインを使用する方法を考え、クラスパスにJDBCドライバーを配置すると、アプリケーションがこの具象に接続できるようになります。データベースプロバイダー(Oracle、mysql)実際には、これは、さまざまな実装を許可するインターフェイスを定義する多くのJava標準で使用されています。

それはあなたの実装とあまり違いはありませんが、それは標準であり、これを実装しやすくするためにjdkにいくつかのクラスがあります。たとえば、これを見てください: http://docs.Oracle.com/javase /7/docs/api/Java/util/ServiceLoader.html

2
AlfredoCasado