-
Notifications
You must be signed in to change notification settings - Fork 1
Formatters Tips & Tricks
Making Flopsar Formatters feature work can be a little bit tricky sometimes due to various class loading mechanisms in application servers. Below, you can find some tips which can help you to use your formatters successfully.
JBoss AS 7 changed the class loading mechanism completely. First of all, you need to add an extra JVM option -Djboss.modules.system.pkgs. i.e.
for Flopsar Suite 1.6:
-Djboss.modules.system.pkgs=com.flopsar.instrumentationfor Flopsar <2.3:
-Djboss.modules.system.pkgs=com.flopsar.agentMake sure, the option above appears before javaagent one.
Next, you need to create a new module under JBOSS_HOME/modules directory. Create a directory JBOSS_HOME/modules/foo/bar/main and copy your formatter.jar into that directory. Now, you must create a module.xml file in the same directory. The contents of the file should be similar to those below:
<module xmlns="urn:jboss:module:1.1" name="foo.bar">
<properties>
<property name="jboss.api" value="private"/>
</properties>
<resources>
<resource-root path="formatter.jar"/>
<!-- Insert resources here -->
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.servlet.api"/>
<!-- Insert dependencies here -->
</dependencies>
</module>Remember your module name, which in this case is foo.bar. If your module depends on some other modules, you must declare it in the dependencies tag. In this case, we have a HTTP formatter module, which depends on HttpServlet and that is why we put javax.servlet.api module as a dependency. Next step is to define our module as a global one. We do it by editing a file standalone.xml. Open the file and find a tag . Next, modify it:
<subsystem xmlns="urn:jboss:domain:ee:1.0">
<global-modules>
<module name="foo.bar" slot="main"/>
</global-modules>
</subsystem>Do not use the com.flopsar.instrumentation name for your formatters packages. It has to be different name from the -Djboss.modules.system.pkgs option value.
In domain configuration you can have multiple JVM instances running. Make sure your instances will have unique flopsar.id values. For example, you can edit domain/configuration/host.xml file and set flopsar.id as follows:
<jvms>
<jvm name="default">
<heap size="64m" max-size="256m"/>
<jvm-options>
<!--
Put common Flopsar JVM options here.
-->
<option value="-server"/>
<option value="-XX:MetaspaceSize=96m"/>
<option value="-XX:MaxMetaspaceSize=256m"/>
<option value="--add-exports=java.base/sun.nio.ch=ALL-UNNAMED"/>
</jvm-options>
</jvm>
</jvms>
<servers>
<server name="server-one" group="main-server-group">
<jvm name="default">
<jvm-options>
<option value="-Dflopsar.id=host1"/>
</jvm-options>
</jvm>
</server>
<server name="server-two" group="main-server-group" auto-start="true">
<jvm name="default">
<jvm-options>
<option value="-Dflopsar.id=host2"/>
</jvm-options>
</jvm>
<socket-bindings port-offset="150"/>
</server>
</servers>https://docs.jboss.org/author/display/AS71/Class+Loading+in+AS7
First, locate ORACLE_HOME directory and copy your formatters jar, say flopsar-ext.jar to the directory ORACLE_HOME/j2ee/home/lib. Next, edit a file boot.xml inside ORACLE_HOME/j2ee/home/oc4j.jar/META-INF. Find system-class-loader tag and add your formatter jar element:
<system-class-loader name="api" parent="jre.extension" version="1.4.0" extension-property="api.ext.dirs" default-extension-directory="lib/api-ext">
<code_source path="oc4j-api.jar"/>
<code_source path="lib/jmxri.jar" if="java.specification.version == 1.4"/>
<code_source path="lib/oc4j-unsupported-api.jar"/>
<code_source path="lib/activation.jar"/>
<code_source path="lib/mail.jar"/>
<code_source path="lib/persistence.jar" if="default.persistence.provider != toplink"/>
<code_source path="${oracle.home}/toplink/jlib/preview-persistence.jar" if="default.persistence.provider == toplink"/>
<code_source path="lib/ejb30.jar" if="oracle.cts.useCtsFlags != true"/>
<code_source path="lib/ejb.jar"/>
<code_source path="lib/javax77.jar"/>
<code_source path="lib/javax88.jar"/>
<code_source path="lib/servlet.jar"/>
<code_source path="lib/jms.jar"/>
<code_source path="lib/jta.jar"/>
<code_source path="lib/jacc-api.jar"/>
<code_source path="lib/connector.jar"/>
<code_source path="lib/cos.jar"/>
<code_source path="lib/jaas.jar"/>
<code_source path="lib/jaxp.jar"/>
<code_source path="lib/jmx_remote_api.jar"/>
<code_source path="lib/jax-qname-namespace.jar"/>
<code_source path="lib/flopsar-ext.jar"/>
</system-class-loader>http://docs.oracle.com/cd/B31017_01/web.1013/b28952/classload.htm