使用自定义启动器连接到Apache Ace服务器

时间:2015-08-03 16:45:41

标签: java deployment osgi apache-ace

我尝试设置自定义启动器以连接到Apache ACE服务器,但我似乎无法找到任何涵盖该过程的文档。关于我能找到的唯一一件事就是我显然需要使用Apache ACE Agent,感谢线程here。但是,试图在该线程中使用提供的代码似乎不起作用。在启动启动器时,它或者甚至不尝试连接到服务器,或者返回错误,它尝试连接到错误的端口(默认情况下而不是我告诉它的端口)并且找不到服务器。

我还看到一些帖子暗示ace-launcher.jar文件是使用的,但没有关于如何使用它,Apache维基上的文档暗示它'一个独立的文件。试图在显示here时运行它似乎不起作用,因为它没有读取识别/发现/等的参数。当按照他们的例子显示的方式使用时。

我仍然无法弄清楚如何通过自定义启动器连接到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...

1 个答案:

答案 0 :(得分:0)

让我试着解释一下。 “代理”是一个捆绑包,可以部署在任何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

您使用的服务器网址没有任何协议作为网址的一部分!