簡體   English   中英

使用自定義啟動器連接到Apache Ace Server

[英]Connecting to Apache Ace Server with Custom Launcher

我正在嘗試設置自定義啟動器以連接到Apache ACE服務器,但是似乎找不到涵蓋該過程的任何文檔。 我唯一能找到的就是,由於這里有一個線程,我顯然需要使用Apache ACE Agent。 但是,嘗試在該線程中使用提供的代碼似乎不起作用。 啟動啟動器后,它甚至沒有嘗試連接到服務器,或者返回了一個錯誤,它試圖連接到錯誤的端口(默認端口,而不是我告訴它的端口),並且找不到服務器。

我也看到一些帖子暗示使用了ace-launcher.jar文件,但是關於如何使用它卻一無所獲,Apache Wiki上的文檔表明它是一個獨立文件。 嘗試按此處顯示的方式運行它似乎不起作用,因為它沒有讀取用於識別/發現/等的參數。 使用示例顯示方式時。

我仍然不知道如何通過自定義啟動器連接到Apache ACE服務器。 Apache ACE服務器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...

讓我嘗試解釋一下。 “代理”是一個捆綁軟件,可以部署在任何OSGi容器中以連接到ACE服務器。 如果您從SVN中簽出源代碼(或從最新版本下載源代碼),則可以在org.apache.ace.agent項目中找到它。 可以通過各種系統或框架屬性來配置該捆綁包。

為了使人們更方便地使用該捆綁包,我們創建了org.apache.ace.agent.launcher項目。 我們有兩種不同的風格(構建工作空間后,請參見生成的文件夾)。 第一個是嵌入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的一部分沒有任何協議!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM