首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tomcat 7-在运行时通过java-agent/aspectj获取应用程序名,而无需登录。

Tomcat 7-在运行时通过java-agent/aspectj获取应用程序名,而无需登录。
EN

Stack Overflow用户
提问于 2016-09-14 11:04:30
回答 1查看 1.6K关注 0票数 2

我正在尝试获取所有已部署应用程序的列表,特别是--映射到tomcat 的应用程序名称。我希望能够在运行时使用一个在tomcat服务器上收集信息的java代理来完成这个任务。我尝试使用这个代码示例:

代码语言:javascript
复制
private Iterable<String> collectAllDeployedApps() {
    try {
        final Set<String> result = new HashSet<>();
        final Set<ObjectName> instances = findServer()
                .queryNames(new ObjectName("Tomcat:j2eeType=WebModule,*"), null);
        for (ObjectName each : instances) {
            result.add(substringAfterLast(each.getKeyProperty("name"), "/")); //it will be in format like //localhost/appname 
        }
        return result;
    } catch (MalformedObjectNameException e) {
         //handle
    }
}

取自类似的问题,但由于没有登录到manager应用程序,所以我没有正确的权限,因此我得到了一个空列表。

我真正想要的是--我有一个java代理(基于aspectJ),我希望在运行时/部署期间等等,能够获得所有已部署应用程序的列表,而无需亲自登录到管理器。我该怎么做?我不介意检测tomcat的部署代码(这不需要从我这边登录,因为我已经在检测代码了),但我不确定要检测哪个函数。

谢谢,林

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-20 19:29:51

本问题由两部分组成:

  • 获取所有已部署应用程序的列表--在查看Tomcat的API之后,我找到了几个可以检测的相关部署代码部分: WarWatcher.java (允许检测更改),我们还可以看到启动时调用的- UserConfig.java应用程序(可以在setDirectory名称上进行测试等),当然还可以看到HostConfig.java: 受保护的无效org.apache.catalina.startup.HostConfig.deployWARs(java.io.File,org.apache.catalina.startup.HostConfig.deployApps()受保护的无效org.apache.catalina.startup.HostConfig.deployWAR(org.apache.catalina.util.ContextName,java.io.File) 此外,您还可以检查参数,以便: 保护布尔org.apache.catalina.startup.HostConfig.deploymentExists(java.lang.String) 它包括war/文件夹名称(通常指应用程序名称+-)。
  • 获取根应用程序名称--这可以通过使用ServletContext.getRealPath()来实现--它返回文件夹名,可以从中提取war名称(并且可以使用,至少在我的示例中是作为应用程序名称)。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39488852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档