0

Apache ACE サーバーに接続するためのカスタム ランチャーをセットアップしようとしていますが、そのプロセスを説明しているドキュメントが見つからないようです。私が見つけることができた唯一のことは、こちらのスレッドのおかげで、どうやら Apache ACE Agent を使用する必要があるということでした。ただし、そのスレッドで提供されたコードを使用しようとしても、うまくいかないようです。ランチャーを起動すると、サーバーに接続しようとさえしないか、間違ったポート (指定したポートではなくデフォルト) に接続しようとしているというエラーが返され、サーバーが見つかりません。

ace-launcher.jar ファイルが使用されていることを示唆するいくつかの投稿も見ましたが、その使用方法については何も説明されておらず、Apache wiki のドキュメントはそれがスタンドアロン ファイルであることを示唆しています。ここに示すように実行しようとしても、識別/発見/その他の引数を読み取らないため、機能しないようです。彼らの例が示すように使用された場合。

カスタムランチャー経由で Apache ACE サーバーに接続する方法がまだわかりません。Apache ACE server-allinone は私のサーバーには問題ありませんが、target.jar では (少なくとも私が確認した限りでは) OSGi フレームワークに公開するシステム パッケージを指定できません。ランチャーを Apache Ace サーバーに接続するようにセットアップする方法を理解してくれる人はいますか?

import java.io.File;
import java.net.MalformedURLException;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.ServiceLoader;

import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
import org.osgi.framework.Constants;
import org.osgi.framework.launch.Framework;
import org.osgi.framework.launch.FrameworkFactory;

public class Main {
    public static void main(String[] args) throws BundleException {
        File bundlesDir = new File(new File("").getAbsolutePath() + "/bundles/");
        FrameworkFactory frameworkFactory = ServiceLoader.load(FrameworkFactory.class).iterator().next();
        Map<String, String> config = new HashMap<String, String>();
        config.put(Constants.FRAMEWORK_STORAGE, bundlesDir.getAbsolutePath());
        config.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, "org.w3c.dom.html,..."); // Truncated for readability
        Framework framework = frameworkFactory.newFramework(config);
        framework.start();

        BundleContext context = framework.getBundleContext();
        List<Bundle> installedBundles = new LinkedList<Bundle>();
        for (File file : bundlesDir.listFiles()) {
            if (file.getAbsolutePath().contains(".jar")) {
                try {
                    installedBundles.add(context.installBundle(file.toURI().toURL().toString()));
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                    continue;
                }
                System.out.println(file.getName() + " installed.");
            }
        }

        for (Bundle bundle : installedBundles) {
            System.out.println("Starting: " + bundle.getSymbolicName());
            bundle.start();
        }
    }
}

エージェント ランチャーを実行しようとすると、次の出力メッセージが表示されます。

...\test>java -jar org.apache.ace.agent.launcher.felix.jar -v --agent Test --serverurl localhost:9000
Launching OSGi framework
- factory:      org.apache.felix.framework.FrameworkFactory
- properties:   {agent.logging.level=DEBUG, agent.identification.agentid=Test, verbose=true, agent.discovery.serverurls=localhost:9000}
- providers:    [AgentBundleProvider, BundleDirBundleProvider]
- installing:   file:/.../test/org.apache.ace.agent.launcher.felix.jar!/org.apache.ace.agent.jar
[DEBUG] 10:32:53 (controller) Config initialized: update: true, fixPkg: true, syncDelay: 5, syncInterval: 60, maxRetries: 1
[DEBUG] 10:32:53 (controller) Scheduling controller to run in 5 seconds...
Startup complete...[DEBUG] 10:32:58 (controller) Controller syncing...
[DEBUG] 10:32:58 (controller) Synchronizing feedback channels: [auditlog]
[WARNING] 10:32:59 (discovery) Blacklisting unavailable serverURL: http://localhost:8080
[WARNING] 10:32:59 (discovery) No valid server URL discovered?!
[WARNING] 10:32:59 (feedbackChannel(auditlog)) No identification or server URL present, cannot send feedback!
[DEBUG] 10:32:59 (controller) Feedback send succesfully for channel: auditlog
[DEBUG] 10:32:59 (controller) Checking for agent updates...
[DEBUG] 10:32:59 (discovery) Ignoring blacklisted serverURL: http://localhost:8080
[WARNING] 10:32:59 (discovery) No valid server URL discovered?!
[WARNING] 10:32:59 (controller) Sync received retry exception from server. Rescheduled in 10 seconds...
[DEBUG] 10:32:59 (controller) Scheduling controller to run in 10 seconds...
4

1 に答える 1

0

説明してみましょう。「エージェント」は、ACE サーバーに接続するために任意の OSGi コンテナーにデプロイできるバンドルです。SVN からソースコードをチェックアウト (または最新リリースからソースコードをダウンロード) すると、org.apache.ace.agent プロジェクトで見つけることができます。そのバンドルは、さまざまなシステムまたはフレームワークのプロパティを介して構成できます。

人々がそのバンドルを使いやすくするために、org.apache.ace.agent.launcher プロジェクトを作成しました。これには 2 つの異なるフレーバーがあります (ワークスペースを構築した後に生成されたフォルダーを参照してください)。1 つ目は、Felix フレームワークとそのエージェント バンドルを埋め込むランチャーです。次のように簡単に実行できます。

java -jar org.apache.ace.agent.launcher.felix.jar --help

これにより、最も重要なオプションが出力されます。Felix を使用したくない場合は、クラスパス上にある任意のフレームワークを起動できる他のアーティファクトを使用できます。たとえば、equinox.jar というファイルに Equinox フレームワークがあるとします。次のように実行できます。

java -cp equinox.jar:org.apache.ace.agent.launcher.base.jar org.apache.ace.agent.launcher.Launcher --help

繰り返しますが、同じオプションが出力されます。

出力に関しては、次を試してください。

java -jar org.apache.ace.agent.launcher.felix.jar -v --agent Test --serverurl http://localhost:9000

使用していたサーバー URL には、URL の一部としてプロトコルがありませんでした!

于 2015-08-03T22:00:27.003 に答える