Jboss 7 classpath and external properties

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.

Advertisements

Author: lwpro2

Java J2EE professional

1 thought on “Jboss 7 classpath and external properties”

  1. another solution is by specifying the configuration url

    		<property name="locations">
    			<list>
    <!-- 				<value>classpath:composerinterfacesmgr.properties</value> -->
    				<value>${myserver.application.properties.url}</value>
    			</list>
    		</property>
    
    myserver.application.properties.url=file:C:\\jboss-as-7.1.1.Final\\modules\\com\\bfm\\cims\\main\\composerinterfacesmgr.properties
    

    Liked by 1 person

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s