SonarQubeの例でのjvmプロセスでのWebコンソールの実装

この記事の例と同様に、hawtioコンソールを再構築および再コンパイルせずにjvmアプリケーションに埋め込むことができます。 DEV / QAホストの場合と同様に、H2プロジェクトからJavaプロセスSQL Webコンソールを実装します













実践に移る前に、小さな理論的余談。



jvmエコシステムでは、mavenリポジトリーで膨大な数のライブラリー、フレームワーク、およびプロジェクトが使用可能です:maven centralおよびjcenter。 この出版物では、io.hawt:hawtio-appおよびcom.h2database:h2のみに関心があります。



両方のコンソールは、別個のサーバーなしで機能し、組み込みWebサーバーを起動します。

ただし、プロジェクトでは、リポジトリから適切なほぼすべてのMavenアーティファクトを使用できます。



そして、JavaエージェントAspectJ-Scriptingを使用してSonarQubeで作業します。



エージェントは、jvmの起動時に2つの追加パラメーターによってアクティブ化され、構成からすべての「魔法」を実行します。 日々の作業で、開発者がJavaエージェントテクノロジーを使用することはめったにありませんが、トレースおよびDevOpsの多くの独自のソリューションは、takipi、plumbr、new relicなど、javaagentを積極的に使用します。



したがって、例としてSonarQubeを使用してjvmパラメーターを構成し、Webコンソールを実装することによってのみ、Javaプロセスの変更に戻ります。



プロジェクトサイトからzipアーカイブをダウンロードし、ローカルディレクトリに解凍します。





aspectj-scripting Javaエージェントをダウンロードします



また、たとえば、エージェント用に3つの構成ファイルが必要になります。

database_console.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <configuration> <aspects> <name>com.github.igorsuhorukov.H2Console</name> <type>AFTER</type> <pointcut>execution(* org.sonar.server.app.WebServer.start(..))</pointcut> <artifacts> <artifact>com.h2database:h2:1.3.176</artifact> <classRefs> <variable>Console</variable> <className>org.h2.tools.Console</className> </classRefs> </artifacts> <process> <expression> Console.main("-web","-browser","-url","jdbc:h2:tcp://localhost:9092/sonar","-driver","org.h2.Driver","-user","sonar","-password","sonar"); </expression> </process> </aspects> </configuration>
      
      





hawtio_console.xml
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <configuration> <aspects> <name>com.github.igorsuhorukov.HawtIo</name> <type>BEFORE</type> <pointcut>execution(* org.sonar.server.app.WebServer.start(..))</pointcut> <artifacts> <artifact>io.hawt:hawtio-app:jar:2.0.0</artifact> <classRefs> <variable>App</variable> <className>io.hawt.app.App</className> </classRefs> </artifacts> <process> <expression> cl = java.lang.Thread.currentThread().getContextClassLoader(); java.lang.Thread.currentThread().setContextClassLoader(App.getClassLoader()); App.main({"--port","10090"}); java.lang.Thread.currentThread().setContextClassLoader(cl); </expression> </process> </aspects> </configuration>
      
      





h2_hawtio.xml
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <configuration> <aspects> <name>com.github.igorsuhorukov.H2Console</name> <type>AFTER</type> <pointcut>execution(* org.sonar.server.app.WebServer.start(..))</pointcut> <artifacts> <artifact>com.h2database:h2:1.3.176</artifact> <classRefs> <variable>Console</variable> <className>org.h2.tools.Console</className> </classRefs> </artifacts> <process> <expression> Console.main("-web","-browser","-url","jdbc:h2:tcp://localhost:9092/sonar","-driver","org.h2.Driver","-user","sonar","-password","sonar"); </expression> </process> </aspects> <aspects> <name>com.github.igorsuhorukov.HawtIo</name> <type>BEFORE</type> <pointcut>execution(* org.sonar.server.app.WebServer.start(..))</pointcut> <artifacts> <artifact>io.hawt:hawtio-app:jar:2.0.0</artifact> <classRefs> <variable>App</variable> <className>io.hawt.app.App</className> </classRefs> </artifacts> <process> <expression> cl = java.lang.Thread.currentThread().getContextClassLoader(); java.lang.Thread.currentThread().setContextClassLoader(App.getClassLoader()); App.main({"--port","10090"}); java.lang.Thread.currentThread().setContextClassLoader(cl); </expression> </process> </aspects> </configuration>
      
      









aspectj-scriptingエージェントが機能するためには、jvmの起動時に-javaagent:aspectj-scripting-1.0-agent.jarパラメーターとして渡され、-Dorg.aspectj.weaver.loadtime.configuration = config:ファイルプロパティ:PATH_C_CONFIGURATIONを介した設定が渡される必要があります。 。 システムプロパティパラメータを使用して、mavenプロキシリポジトリとローカルmavenリポジトリへのパスを渡すことができます。



SonarQubeのこのすべては、 sonar.web.javaAdditionalOptsプロパティのconf / sonar.propertiesファイルで構成されます。



このビデオは、コンソールが起動するhawtio_console.xmlおよびhawt.ioとともにSonarQubeが実行されるように構成されている方法を示しています





次のスクリーンキャストは、 database_console.xmlパラメーターを使用してエージェントを起動し、SQLコンソールを起動する方法を示しています





最後に、両方のコンソールは、 h2_hawtio.xml構成によりSonarQubeプロセスで起動します。たとえば、mvelプロジェクトメトリックをSonarにインポートし、コンソールを使用してソナーデータベース内のテーブルを確認します。





H2コンソールからSonarQubeを照会する
MVELライブラリーのSonarQubeのメトリックの場合










conf / sonar.propertiesファイルの sonar.jdbc.urlプロパティに「JMX = TRUE」を追加することにより、JMX hawtioタブのH2ベース統計にアクセスできます。sonar.jdbc.url = jdbc:h2:tcp:// localhost: 9092 /ソナー; JMX = TRUE





JMX java.lang.OperatingSystemのグラフの概要:





そのため、既存のSonarQubeアプリケーションを変更して、開始時にhawtioとh2がmavenリポジトリからダウンロードされ、ソナーが開始された適切なタイミングでWebコンソールが起動されるようにしました。



次の出版物では、アスペクトスクリプトを使用して対話型sshコンソールを既存のJavaアプリケーションに実装する方法を示します。 また、開発中にjdbcリクエストとそのパラメーターをアプリケーションでログに記録する方法のいくつかのオプションを検討してください。



「Java開発者とQA向けの分散システムでのアスペクト指向プログラミング」に関する9月9日のレポートをご覧になりたい方は、 登録してください。



作業の分析とJavaアプリケーションの監視で幸運を



All Articles