Jboss 7 classpath and external properties

Jackie
2 min readJul 28, 2020

C:\jboss-as-7.1.1.Final\bin>standalone.bat -P=C:\jboss-as-7.1.1.Final\modules\xxxxx\xxxx.properties

-P or –properties, would load the specified properties into jboss system environment

See boot.log with above properties:

12:31:56,005 INFO [org.jboss.modules] JBoss Modules version 1.1.1.GA

12:31:56,137 INFO [org.jboss.msc] JBoss MSC version 1.0.2.GA

12:31:56,168 INFO [org.jboss.as] JBAS015899: JBoss AS 7.1.1.Final "Brontes" starting

12:31:56,170 DEBUG [org.jboss.as.config] Configured system properties:

FPW.details.sql = SELECT xxxxxx

awt.toolkit = sun.awt.windows.WToolkit

camel.context.startonboot = true

camel.scan.class.resolver = org.apache.camel.jboss.JBossPackageScanClassResolver

java.net.preferIPv4Stack = true

java.runtime.name = Java(TM) SE Runtime Environment

java.runtime.version = 1.6.0_31-b05

java.specification.name = Java Platform API Specification

java.specification.vendor = Sun Microsystems Inc.

java.specification.version = 1.6

java.util.logging.manager = org.jboss.logmanager.LogManager

java.vendor = Sun Microsystems Inc.

java.vendor.url = http://java.sun.com/

java.vendor.url.bug = http://java.sun.com/cgi-bin/bugreport.cgi

java.version = 1.6.0_31

java.vm.info = mixed mode

java.vm.name = Java HotSpot(TM) 64-Bit Server VM

java.vm.specification.name = Java Virtual Machine Specification

java.vm.specification.vendor = Sun Microsystems Inc.

java.vm.specification.version = 1.0

java.vm.vendor = Sun Microsystems Inc.

java.vm.version = 20.6-b01

javax.management.builder.initial = org.jboss.as.jmx.PluggableMBeanServerBuilder

javax.xml.datatype.DatatypeFactory = __redirected.__DatatypeFactory

javax.xml.parsers.DocumentBuilderFactory = __redirected.__DocumentBuilderFactory

javax.xml.parsers.SAXParserFactory = __redirected.__SAXParserFactory

javax.xml.stream.XMLEventFactory = __redirected.__XMLEventFactory

javax.xml.stream.XMLInputFactory = __redirected.__XMLInputFactory

javax.xml.stream.XMLOutputFactory = __redirected.__XMLOutputFactory

javax.xml.transform.TransformerFactory = __redirected.__TransformerFactory

javax.xml.validation.SchemaFactory:http://www.w3.org/2001/XMLSchema = __redirected.__SchemaFactory

javax.xml.xpath.XPathFactory:http://java.sun.com/jaxp/xpath/dom = __redirected.__XPathFactory

jboss.home.dir = C:\jboss-as-7.1.1.Final

12:31:56,231 DEBUG [org.jboss.as.config] VM Arguments: -XX:+TieredCompilation -Dprogram.name=standalone.bat -Xms64M -Xmx512M -XX:MaxPermSize=256M -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djboss.server.default.config=standalone.xml -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n -Dorg.jboss.boot.log.file=C:\jboss-as-7.1.1.Final\standalone\log\boot.log -Dlogging.configuration=file:C:\jboss-as-7.1.1.Final\standalone/configuration/logging.properties

12:31:56,874 INFO [org.xnio] XNIO Version 3.0.3.GA

12:31:56,874 INFO [org.jboss.as.server] JBAS015888: Creating http management service using socket-binding (management-http)

12:31:56,882 INFO [org.xnio.nio] XNIO NIO Implementation Version 3.0.3.GA

12:31:56,888 INFO [org.jboss.remoting] JBoss Remoting version 3.2.3.GA

12:31:56,956 INFO [org.jboss.as.security] JBAS013101: Activating Security Subsystem

12:31:56,969 INFO [org.jboss.as.webservices] JBAS015537: Activating WebServices Extension

12:31:56,983 INFO [org.jboss.as.logging] JBAS011502: Removing bootstrap log handlers

12:31:56,983 INFO [org.jboss.as.connector] JBAS010408: Starting JCA Subsystem (JBoss IronJacamar 1.0.9.Final)

12:31:56,996 INFO [org.jboss.as.security] JBAS013100: Current PicketBox version=4.0.7.Final

Above properties are loaded into system properties and were from composerinterfacesmgr.properties.

However, if using above parameter alone, it still wont put the properties into classpath, so below spring application context configuration wont work:

<bean class="com.bfm.app.jmim.conf.Configurer">

<property name="locations">

<list>

<value>classpath:xxxx.properties</value>

</list>

</property>

</bean>

To resolve, as for current, the only solution is to create new modules, and put the properties inside the module, and specify to depend on this module in jboss-deployment-structure.xml: https://community.jboss.org/wiki/HowToPutAnExternalFileInTheClasspath

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1">

<deployment>

<exclusions>

<module name="org.apache.log4j" />

<module name="org.slf4j" />

<module name="org.slf4j.impl" />

<module name="org.slf4j.ext" />

<module name="org.slf4j.jcl-over-slf4j" />

<module name="org.apache.commons.logging" />

<module name="org.jboss.logging.jul-to-slf4j-stub" />

<module name="org.jboss.logging" />

<module name="org.jboss.as.logging" />

</exclusions>

<dependencies>

<module name="org.osgi.core" />

<module name="com.xxxx.xxxx" />

</dependencies>

<!-- <resources> -->

<!-- <resource-root path="xxxx.properties" /> -->

<!-- </resources> -->

</deployment>

</jboss-deployment-structure>

With above two together, the application would work. If only create a module, and put the properties into classpath, it might not work either. For example, log4j.xml,

<appender name="emailAppender" class="org.apache.log4j.net.SMTPAppender">

<param name="Threshold" value="DEBUG"/>

<param name="To" value="${smtp.error.recipient}" />

<param name="BufferSize" value="1" />

<layout class="org.apache.log4j.PatternLayout">

<param name="ConversionPattern" value="%d %-5p [%t] %c{2} (%F:%L) - %m%n" />

</layout>

</appender>

Above requires a system property or at least the classloader of log4j aware of. So the first change, specify the -P / –properties needed to put that properties into system environment.

--

--