www.ironjacamar.orgCommunity Documentation
Table of Contents
The configuration for the IronJacamar container is mainly located under the config/ directory.
        The IronJacamar server can be configured by including an ironjacamar.properties file
        next to the ironjacamar-sjc.jar in the bin/ directory.
      
This file will allow to override the core options given to the kernel environment, if multiple instances of the IronJacamar container are going to run on the same machine, and network interface.
The options available
Table 4.1. IronJacamar options
| Property | Type | Description | 
|---|---|---|
| name | String | The name of the IronJacamar configuration | 
| management | boolean | Should management be enabled | 
| parallel.deploy | boolean | Should parallel deployment be enabled | 
| remote.access | boolean | Should remote access be enabled | 
| remote.port | int | The port for remote access | 
| remote.jmx.access | boolean | Should remote access via JMX be enabled | 
| use.platform.mbeanserver | boolean | Should the platform MBeanServer be used for management | 
| bean.management | boolean | Should management for all beans be enabled | 
      
        An example of an ironjacamar.properties file:
        
remote.access=true
remote.port=1302
        
IronJacamar features a connection pool implementation, which keeps track of connection allocations, and their release in order to provide feedback if a connection is obtained, but never released by the application. This will cause leaks, and lead to applications not being able to obtain any connections.
The leak detector pool provides a stack trace of the leaked connection allocation either during shutdown of the pool, or once the pool is flush using a flush strategy which kills all active connections.
          The leak detector pool is configured using the ironjacamar.mcp system
          property with a value of
        
org.jboss.jca.core.connectionmanager.pool.mcp.LeakDumperManagedConnectionPool
        This configuration applies to all connection pools used by IronJacamar.
          The system property ironjacamar.leaklog can be used
          to have the leaks dumped out into a special file separate from the logging
          setup.
        
An example
-Dironjacamar.mcp=org.jboss.jca.core.connectionmanager.pool.mcp.LeakDumperManagedConnectionPool
-Dironjacamar.leaklog=leaks.txt
        
          IronJacamar doesn't allow to obtain a new connection once a transaction is in
          MARKED_FOR_ROLLBACK mode. This allows the container to fail
          eagerly, since any work after that point is wasted anyway.
        
However, certain applications depends on getting a connection to perform work.
          IronJacamar has a system property called ironjacamar.allow_marked_for_rollback
          which can be set to true to enable this scenario.
        
          Note, that an existing enlisted connection is allowed to be obtained. This can be disallowed
          by setting the system property ironjacamar.allow_marked_for_rollback_fast_fail
          to true.
        
          IronJacamar records transaction enlistment traces in order to help to locate error situations
          that happens during enlistment of XAResource instances.
        
This has a performance overhead of course, so in certain situations you may want to disable these traces.
          IronJacamar has a system property called ironjacamar.disable_enlistment_trace
          which can be set to true which does this.
        
          IronJacamar calls transaction.enlistResource(xaResource) for the ManagedConnection
          when it is enlisting in the transaction.
        
          IronJacamar will also call transaction.delistResource(xaResource, flag) once the
          ManagedConnection should be disassociated with the transaction. This typically happens
          on the transaction boundary (beforeCompletion) before the connection is returned to
          the pool (afterCompletion). This is done as part of the transaction specification contract.
        
          However, in certain scenarios you may want to disable this call, as other Synchronization
          objects may still want the connection enlisted in the transaction, and hence it depends on the
          ordering of these objects.
        
          IronJacamar has a system property called ironjacamar.no_delist_resource
          which is a ',' separated list of pool names where delistResource
          shouldn't be called. Disabling the delistResource call for all pools can be done
          by defining ironjacamar.no_delist_resource_all.
        
delistResource call it is up to the resource manager and transaction
          manager to make sure that the connection is delisted from the transaction in all cases.
        
          IronJacamar calls transaction.setRollbackOnly() when the ManagedConnection
          has a fatal error occur on it after calling the transaction.delistResource(xaResource, XAResource.TMFAIL)
          method.
        
          IronJacamar has a system property called ironjacamar.rollback_on_fatal_error
          which is either a value of true, false or a ',' separated list of
          pool names where setRollbackOnly
          shouldn't be called.
        
setRollbackOnly call it is up to the transaction
          manager to make sure that the outcome of transaction is correctly handled, since the associated
          XAResource instance no longer can access the Enterprise Information System, and hence
          implementation specific behavior.
        The IronJacamar container uses JBoss Logging framework as the implementation.
The configuration is done in the
config/logging.properties
      file.
Consult the JBoss Logging documentation on how the service can be configured.
The IronJacamar container uses Narayana its transaction implementation.
The configuration is done in the
config/transaction.xml
      file.
Consult the Narayana documentation on how the service can be configured.
The IronJacamar deployer is configured in the
config/bootstrap/jca.xml
        file.
The configuration of the resource adapter deployer chain is handled
            by a org.jboss.jca.deployers.fungal.RAConfiguration bean.
<bean name="RAConfiguration"
class="org.jboss.jca.deployers.fungal.RAConfiguration">
<property name="ArchiveValidation">true</property>
<property name="ArchiveValidationFailOnWarn">false</property>
<property name="ArchiveValidationFailOnError">true</property>
<property name="BeanValidation">true</property>
<property name="PrintStream">
<inject bean="JBossStdioContext" property="Out"/>
</property>
<property name="DefaultBootstrapContext">
<inject bean="DefaultBootstrapContext"/>
</property>
<property name="JndiStrategy"><inject bean="JndiStrategy"/></property>
<property name="TransactionManager">
<inject bean="RealTransactionManager"/>
</property>
<property name="MetadataRepository"><inject bean="MDR"/></property>
</bean>
Table 4.2. Resource adapter deployer configuration
| Property | Type | Description | 
|---|---|---|
| ArchiveValidation | boolean | Toggle archive validation for the deployment units. Default:  | 
| ArchiveValidationFailOnWarn | boolean | Should an archive validation warning report fail the deployment. Default:  | 
| ArchiveValidationFailOnError | boolean | Should an archive validation error report fail the deployment. Default:  | 
| BeanValidation | boolean | Toggle bean validation (JSR-303) for the deployment units. Default:  | 
| DefaultBootstrapContext | org.jboss.jca.core.api.bootstrap.CloneableBootstrapContext | Specifies the default bootstrap context for resource adapters | 
| BootstrapContexts | Map<String, org.jboss.jca.core.api.bootstrap.CloneableBootstrapContext> | Bootstrap context map (unique name to a cloneable bootstrap context) which allows
                    developers to bind (through ironjacamar.xml) their resource adapter to
                    a specific bootstrap context instance. | 
| PrintStream | java.io.PrintStream | Specifies which print stream that should be used to handle the LogWriters | 
| MetadataRepository | org.jboss.jca.core.spi.mdr.MetadataRepository | The metadata repository | 
| ResourceAdapterRepository | org.jboss.jca.core.spi.rar.ResourceAdapterRepository | The resource adapter repository | 
| ScopeDeployment | boolean | Should each deployment be scoped (isolated) from the container. This feature allows
                    deployment of libraries of a different version than used in the container environment. Default:  | 
| JndiStrategy | org.jboss.jca.core.spi.naming.JndiStrategy | Specifies the JNDI strategy policy for binding the connection factories into
                    the naming environment The JNDI strategies are located in the  
 | 
The initial deployer for resource adapter archives is handled
            by a org.jboss.jca.deployers.fungal.RADeployer bean.
<bean name="RADeployer"
interface="com.github.fungal.spi.deployers.Deployer"
class="org.jboss.jca.deployers.fungal.RADeployer">
<property name="Configuration"><inject bean="RAConfiguration"/></property>
<depends>BeanValidation</depends>
<depends>JBossStdioContextSelector</depends>
</bean>
This deployer will register the resource adapters with the metadata repository in the system.
Table 4.3. Resource adapter deployer
| Property | Type | Description | 
|---|---|---|
| Configuration | org.jboss.jca.deployers.fungal.RAConfiguration | The configuration for the deployer | 
The deployer for deploying our -ra.xml deployment descriptor is handled
            by a org.jboss.jca.deployers.fungal.RaXmlDeployer bean.
The deployment descriptor is defined by the resource-adapters-1_0.xsd and
          resource-adapters-1_1.xsd schemas.
<bean name="RaXmlDeployer"
interface="com.github.fungal.spi.deployers.Deployer"
class="org.jboss.jca.deployers.fungal.RaXmlDeployer">
<property name="Configuration"><inject bean="DeployerConfiguration"/></property>
<property name="Kernel"><inject bean="Kernel"/></property>
<depends>BeanValidation</depends>
<depends>JBossStdioContextSelector</depends>
</bean>
This deployer will activate resource adapters based on the deployment information.
Table 4.4. Resource adapter metadata deployer
| Property | Type | Description | 
|---|---|---|
| Configuration | org.jboss.jca.deployers.fungal.RAConfiguration | The configuration for the deployer | 
The deployer chain features an activator for resource adapter archives is handled
            by the org.jboss.jca.deployers.fungal.RAActivator bean.
<bean name="RAActivator"
class="org.jboss.jca.deployers.fungal.RAActivator">
<property name="Configuration"><inject bean="RAConfiguration"/></property>
<property name="Kernel"><inject bean="Kernel"/></property>
<property name="ExcludeArchives">
<set elementClass="java.lang.String">
<value>jdbc-local.rar</value>
<value>jdbc-xa.rar</value>
</set>
</property>
<depends>BeanValidation</depends>
<depends>JBossStdioContextSelector</depends>
</bean>
This activator will activate any resource adapters which hasn't been activated yet unless they are in the excluded list.
Table 4.5. Resource adapter activator
| Property | Type | Description | 
|---|---|---|
| Configuration | org.jboss.jca.deployers.fungal.RAConfiguration | The configuration for the deployer | 
| Enabled | boolean | Should the activator be enabled. Default is true | 
| Kernel | com.github.fungal.api.Kernel | The kernel instance | 
| ExcludeArchives | java.util.Set | A set of resource adapter archives which should be excluded from activation | 
          IronJacamar features a standard work manager on its default setup using one thread pool for
          short running jobs, and one thread pool for long running jobs identified by the 
          HintsContext.LONGRUNNING_HINT with a value of true.
        
          The configuration of the work manager and the necessary components can be viewed in the jca.xml
          file.
        
A distributed work manager is a work manager instance, which is able to reschedule work execution on another work manager instance on the network.
The distributed work manager has three additional components
to control the distribution process.
Supported policies
org.jboss.jca.core.workmanager.policy.Never
                  Never the distribute the Work instance to another node.
                
org.jboss.jca.core.workmanager.policy.Always
                  Always the distribute the Work instance to another node.
                
org.jboss.jca.core.workmanager.policy.WaterMark
                  Distribute the Work instance to another node based on how many
                  free worker threads the current node has available.
                
Supported selectors
org.jboss.jca.core.workmanager.selector.FirstAvailableSelect the first available node in the list
org.jboss.jca.core.workmanager.selector.PingTimeSelect the node with the lowest ping time
org.jboss.jca.core.workmanager.selector.MaxFreeThreadsSelect the node with highest number of free worker threads
Supported transports
org.jboss.jca.core.workmanager.transport.remote.socket.SocketTransport
                  Communication based on java.net.Socket, and hence TCP/IP 
                
org.jboss.jca.core.workmanager.transport.remote.jgroups.JGroupsTransportCommunication based on the JGroups framework, and hence UDP (by default)
            Below is an example of a socket based configuration where two instances localhost:1299 and
            localhost:1300 communicates, taken from the IronJacamar test suite.
          
<deployment>
<!-- DistributedWorkManagerThreadGroupSocket -->
<bean name="DistributedWorkManagerThreadGroupSocket"
class="java.lang.ThreadGroup">
<constructor>
<parameter>dwm</parameter>
</constructor>
<ignoreStop/>
<ignoreDestroy/>
</bean>
<!-- DistributedWorkManagerThreadFactorySocket -->
<bean name="DistributedWorkManagerThreadFactorySocket"
interface="java.util.concurrent.ThreadFactory"
class="org.jboss.threads.JBossThreadFactory">
<constructor>
<parameter><inject bean="DistributedWorkManagerThreadGroupSocket"/></parameter>
<parameter>false</parameter>
<parameter>5</parameter>
<parameter>work</parameter>
<parameter><null/></parameter>
<parameter><null/></parameter>
</constructor>
</bean>
<!-- DistributedWorkManagerShortRunningThreadPoolSocket -->
<bean name="DistributedWorkManagerShortRunningThreadPoolSocket"
class="org.jboss.threads.QueueExecutor">
<constructor>
<!-- Core threads -->
<parameter>20</parameter>
<!-- Max threads -->
<parameter>100</parameter>
<!-- 60 seconds keepalive -->
<parameter>60</parameter>
<parameter><inject bean="KeepAliveTimeUnit"/></parameter>
<!-- Queue size -->
<parameter>1024</parameter>
<!-- Thread factory -->
<parameter><inject bean="DistributedWorkManagerThreadFactorySocket"/></parameter>
<!-- Blocking -->
<parameter>true</parameter>
<!-- Handoff executor -->
<parameter><inject bean="RejectingExecutor"/></parameter>
</constructor>
<destroy method="shutdown"/>
</bean>
<!-- DistributedWorkManagerPolicySocket -->
<bean name="DistributedWorkManagerPolicySocket"
class="org.jboss.jca.core.workmanager.policy.Always">
</bean>
<!-- DistributedWorkManagerSelectorSocket -->
<bean name="DistributedWorkManagerSelectorSocket"
class="org.jboss.jca.core.workmanager.selector.FirstAvailable">
</bean>
<!-- DistributedWorkManagerTransportSocket -->
<bean name="DistributedWorkManagerTransportSocket"
class="org.jboss.jca.core.workmanager.transport.remote.socket.SocketTransport">
<!-- The id -->
<property name="Id">1</property>
<!-- The executor -->
<property name="ExecutorService">
<inject bean="Kernel" property="ExecutorService"/>
</property>
<!-- The host -->
<property name="Host">127.0.0.1</property>
<!-- The port -->
<property name="Port">1299</property>
<!-- The peers -->
<property name="Peers">
<set class="java.util.HashSet"
elementClass="java.lang.String">
<value>localhost:1300</value>
</set>
</property>
<start method="startup"/>
<stop method="shutdown"/>
</bean>
<!-- PicketBox -->
<bean name="PicketBoxSocket"
class="org.jboss.jca.core.security.picketbox.PicketBoxSecurityIntegration">
</bean>
<!-- DistributedWorkManagerSocket -->
<bean name="DistributedWorkManagerSocket"
interface="org.jboss.jca.core.api.workmanager.DistributedWorkManager"
class="org.jboss.jca.core.workmanager.DistributedWorkManagerImpl">
<!-- The name -->
<property name="Name">DWM-Socket</property>
<!-- The short running thread pool -->
<property name="ShortRunningThreadPool">
<inject bean="DistributedWorkManagerShortRunningThreadPoolSocket"/>
</property>
<!-- The XA terminator -->
<property name="XATerminator">
<inject bean="TransactionIntegration" property="XATerminator"/>
</property>
<!-- The callback security module -->
<property name="CallbackSecurity">
<inject bean="Callback"/>
</property>
<!-- The security integration module -->
<property name="SecurityIntegration">
<inject bean="PicketBoxSocket"/>
</property>
<!-- The policy -->
<property name="Policy">
<inject bean="DistributedWorkManagerPolicySocket"/>
</property>
<!-- The selector -->
<property name="Selector">
<inject bean="DistributedWorkManagerSelectorSocket"/>
</property>
<!-- The transport -->
<property name="Transport">
<inject bean="DistributedWorkManagerTransportSocket"/>
</property>
<!-- <destroy method="shutdown"/> -->
</bean>
<!-- DistributedBootstrapContextSocket -->
<bean name="DistributedBootstrapContextSocket"
interface="org.jboss.jca.core.api.bootstrap.CloneableBootstrapContext"
class="org.jboss.jca.core.bootstrapcontext.BaseCloneableBootstrapContext">
<property name="Name">DWMBC-Socket</property>
<property name="TransactionSynchronizationRegistry">
<inject bean="TransactionSynchronizationRegistry"/>
</property>
<property name="WorkManagerName">
<inject bean="DistributedWorkManagerSocket" property="Name"/>
</property>
<property name="XATerminator">
<inject bean="TransactionIntegration" property="XATerminator"/>
</property>
</bean>
</deployment>
The Java EE Connector Architecture 1.6 specification allows units of 
          javax.resource.spi.Work to be executed in a specific security context.
This is done through the use of Java Authentication Service Provider Interface for Containers (JSR-196)
          call backs using the javax.security.auth.callback.Callback interface.
The support is activated by letting the work instance implement the
javax.resource.spi.work.WorkContextProvider
        interface and returning an instance of javax.resource.spi.work.SecurityContext.
          The security callback is configured through the >workmanager< element for the
          deployment, either in ironjacamar.xml or in the -ra.xml file. See the schema
          definitions for further details.
        
There is support for creating a basic security domain which can provide
          a javax.security.auth.Subject instance to deployments that
          are using <security-domain> or
          <security-domain-and-application> in their setup.
A security domain can be configured through
<!-- SubjectFactory -->
<bean name="DefaultSecurityDomain"
interface="org.jboss.jca.core.spi.security.SubjectFactory"
class="org.jboss.jca.core.security.DefaultSubjectFactory">
<property name="SecurityDomain">DefaultSecurityDomain</property>
<property name="UserName">user</property>
<property name="Password">password</property>
</bean>
beans.
The IronJacamar project can deploy datasources using the datasources-1_0.xsd,
        datasources-1_1.xsd or datasources-1_2.xsd schemas.
The configuration is done in the
config/bootstrap/ds.xml
      file.
Table 4.6. DsXmlDeployer
| Property | Type | Description | 
|---|---|---|
| JDBCLocal | String | The name of the jdbc-local.rardeployment | 
| JDBCXA | String | The name of the jdbc-xa.rardeployment | 
| TransactionManager | javax.transaction.TransactionManager | The transaction manager | 
| MetadataRepository | org.jboss.jca.core.spi.mdr.MetadataRepository | The metadata repository | 
| Kernel | com.github.fungal.api.Kernel | The kernel | 
The datasource deployer can be removed from the environment by removing the ds.xml
        file in
config/bootstrap/
      as well as the reference in config/bootstrap/bootstrap.xml to the file.
Furthermore all jdbc-*.rar files in the system/ directory should be removed too.
The IronJacamar project features a web server which is used to serve web archive deployments. More information about Jetty can be found at the homepage.
The configuration is done in the
system/web.xml
      file.
<bean name="WebServer" class="org.jboss.jca.web.WebServer">
<property name="Host">${iron.jacamar.bindaddress:localhost}</property>
<property name="Port">8080</property>
<property name="ExecutorService"><inject bean="Kernel" property="ExecutorService"/></property>
</bean>
Table 4.7. Web server
| Property | Type | Description | 
|---|---|---|
| Host | String | Set the bind address for the web server Default:  | 
| Port | int | Set the port for the web server Default:  | 
| AcceptQueueSize | int | Set the accept queue size for the Jetty connector Default:  | 
| ExecutorService | java.util.concurrent.ExecutorService | The thread pool for the web server Default: The kernel thread pool | 
The web server can be removed from the environment by removing the web.xml
        file in
system/
      Furthermore all .war files in the same directory should be removed too.
All the Jetty libraries can be removed by deleting the
lib/jetty
      directory.