问题标签 [javaagents]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2507 浏览

java - Java代理。做什么的?

当我尝试查找使用 Javaagent 的示例时,在大多数情况下,它们都是使用字节码的示例。这些示例使用第三方库,例如 Javaassist。

据我所知,Java 中没有使用字节码的标准方法,无论如何您都必须求助于库。

所以,我尝试在我自己的自定义类加载器中使用这些库,然后再调用defineClass(). 而且,当然,它运行得非常好。我可以用同样的方式改变字节码,就好像我会用ClassFileTransformer'stransform()方法一样。

我是否正确理解 javaagents 的另一个有用特性,而这又是它们的主要特性?因为,首先,javaagent 为您提供了一个Instrumentation对象,而 Java 规范说该instrument包主要用于处理字节码。instrument但是,如果我可以实现我自己的类加载器(在引入包之前我可以做的事情),我为什么需要这样做呢?

0 投票
3 回答
4816 浏览

java - Difference between redefine and retransform in javaagent

When packing a jar file with custom java agent, you can add the following properties:

  • Can-Redefine-Classes
  • Can-Retransform-Classes

What is the difference between those two?

If redefinition happens before class is loaded and retransformation after, then when does exactly retransformation happen?

0 投票
1 回答
349 浏览

lotus-notes - managed-beans.xml 将存储在 Domino 数据库中的什么位置以供 Java 代理使用?

我已经成功创建了一个独立的 Java 应用程序,与我们的 Connections 服务器通信。端点在 src\META-INF\managed-beans.xml 中定义,而 sbt.properties 存储在项目的根目录中。

我想将代理作为 java-agent 移动到 Notes 数据库。使用 Java 透视图,我可以看到数据库有一个 WebContent\WEB-INF 文件夹,但没有类似的 META-INF 文件夹。将 managed-beans.xml 放在那里似乎不起作用。我还尝试在 WebContent\WEB-INF\faces-config.xml 中定义托管 bean,但没有成功(从我目前阅读的内容来看,似乎 WEB-INF 更适合 XPages 和 Web 工作,而META-INF 用于独立的 java 代理。

通过将 managed-bean.xml 存储在 sbt.user 目录(我的机器上的 C:\Program Files (x86)\IBM\Lotus\Notes\framework)中,我可以读取该文件,但有例外。如果我可以将 xml 文件存储在 Notes 数据库中,那就更好了。

普通 NotesMain() 中的代码片段是

编辑:还没有成功,但我看到 SBTPlayground.nsf 的 META-INF 文件位于 Core/Java 文件夹中(从 Java Perspective 看到)。也尝试将我的 managed-beans.xml 放在那里,但代理不会读取它(还没有!)。

0 投票
1 回答
1024 浏览

lotus-notes - 尝试从 Domino Java 代理使用 SBT 失败并出现 NoSuchMethodError:org/apache/http/protocol/BasicHttpContext。()V

10 月 30 日更新,见问题底部。

我在 Eclipse 中创建了一个独立 java 应用程序的工作示例(基于 SBT 的 sbt.sample.app GetAllCommunitiesApp.java。我唯一的变化是我手动创建了我的 BasicEndpoint 以跳过使用托管 bean 进行端点配置(和因此读取 managed-beans.xml)。如前所述,这一切都在 Eclipse 中运行良好。

将代码移动到本地 Notes Java 代理(代理被放置在本地数据库中),我首先将 SBT jar 文件复制到我的 C:\Program Files (x86)\IBM\Lotus\Notes\jvm\lib\ext目录。有关这些文件的列表,请参见下文。当我运行 java 代理时,我得到以下堆栈跟踪;

搜索 StackOverflow 和其他站点表明,其他人已经看到了混合版本的 Apache HttpClient 的类似问题(通常人们一直在使用 httpclient 4.0.1,并且问题消失了,将其替换为 httpclient 4.1)。SBT 包含 httpclient-4.2.1.jar 是我复制到 Lotus Notes 的 C:\Program Files (x86)\IBM\Lotus\Notes\jvm\lib\ext 的文件。

对我来说,Lotus Notes 似乎以某种方式使用了某个地方的其他 httpclient,这可能已经过时了。

所以问题是 - 我可以强制 Notes 以某种方式使用 SBT jar 吗?有任何想法吗?

作为参考,我复制到我的 C:\Program Files (x86)\IBM\Lotus\Notes\jvm\lib\ext 的 SBT jar 文件是;

2013 年 10 月 30 日更新 - 找到了一个可能遵循相同路线的样本。以下代码是一个完整的 Notes Java 代理,其核心代码直接来自 Apache.org HttpClient 4.2 示例代码。这也会产生 NoSuchMethodError,并且可能比 SBT 更容易调试。

0 投票
2 回答
897 浏览

playframework - New Relic 未从 Play 2.2.1 Scala 应用程序收集数据

我试图用来New Relic's Java Agent 3.1.0监控基于 Scala 的Play 2.2.1网络应用程序,但是 NR Web UI 似乎没有从我的服务器收集任何数据。

我已经验证我的newrelic.yml配置文件是正确的,并且在使用以下命令启动应用程序时,代理似乎按预期挂接(根据此处找到的官方说明):

运行上述程序后,我可以看到我的应用程序名称显示在 NR 的 Web UI 的应用程序部分,因此我的应用程序肯定在 ping 服务,但是我在仪表板中看不到任何实际数据。

我的newrelic_agent.log文件如下:

任何人都可以提供任何建议吗?谢谢!

0 投票
1 回答
5523 浏览

profiling - java Instrumentation中agentmain方法有什么用

我使用-javaagent参数和premain方法完成了一些 java 字节码检测。但这是我第一次听说agentmain方法。我对这种方法有一些疑问。下面跟着它。

premain 和 agentmain 方法有相同的用途吗?
何时调用 agentmain 方法?
java Instrumentation中agentmain方法的用途是什么?

0 投票
1 回答
1122 浏览

debugging - 远程调试 javaagent jar 文件

我创建了一个 javaagent jar 文件并将其附加到一个 Web 应用程序(通过-javaagent在 Web 应用程序启动时使用关键字)。我怎样才能用 eclipse 远程调试这个 javaagent

0 投票
1 回答
439 浏览

java - 字节码操作清单条目

我在做一些 Java 字节码修改教程很开心。他们都说我需要设置以下清单属性: Can-Redefine-Classes: true Can-Retransform-Classes: true Can-Set-Native-Method-Prefix: true 完全没问题,但是没有教程解释属性到底是做什么的。oracle 文档非常简洁,除了 Can-Set-Native-Method-Prefix: true 我假设它也允许检测本地方法,因为它们不能简单地更改为 Java 方法......

谁能解释一下重新定义和重新转换类有什么区别?

0 投票
1 回答
1463 浏览

jboss - 如何卸载由 loadAgent() 加载的代理

我正在使用jdk1.6。我已经在运行时成功加载了一个 jar。代码如下:

现在我想在运行时卸载这个代理。没有 API DOC 可以做到这一点。谁能给我一些建议?谢谢。

编辑

更多代码

我当时做了什么

我再次运行上述代码以再次加载这两个代理。但我有错误。

错误

当前虚拟机中的错误

目标虚拟机错误

目标

做同样的工作没有错误。我想我每次完成工作后都需要卸下代理。但是我没有卸载那些代理。

编辑 GlobleVariables

0 投票
1 回答
10627 浏览

java - 如何使用两个 jar 配置 JVM Argument -javaagent

要使用 spring AOP,我必须将-javaagent:C:/spring-agent-2.5.6.jar配置为 JVM 参数。但是有一个已经配置好的jar -javaagent:C:/other.jar

现在如何使用 -javaagent 配置两个 jar 以便两个 jar 都可以正常工作?

在 Windows 和 Linux 环境中,使用 -javaagent 配置多个 jar 的方法也可能不同。请为这两种环境提出解决方案。