The following is the example content of the bttconfig.xml file of server side.
<import file="ej.xml" /> <import file="overrideServer.xml" /> <import file="transactions.xml" /> <import file="accessControl.xml" /> <com.ibm.btt.poc.postengine.PostEngineImpl id="poc.postengine" /> <com.ibm.btt.bc.common.pool.ConnectionPoolImpl id="JDBCDAOPool" disablePool="true"> <com.ibm.btt.bc.common.pool.JdbcConnectionConfig Injection="jdbcConfig" dbDriverName="COM.ibm.db2.jdbc.app.DB2Driver" dbUrl="jdbc:db2:journal" dataSource="jdbc/DEMO" /> <com.ibm.btt.bc.common.pool.PoolProperty Injection="poolProperty" maxActive="10" /> </com.ibm.btt.bc.common.pool.ConnectionPoolImpl>
The JDBC connection pool is commonly used by EJ and Access Control. So it is defined in the bttconfig.xml file.
Access Control Configuration
<com.ibm.btt.poc.login.LoginImpl id="login"> <ref refId="securityManager" Injection="securityManager"/> </com.ibm.btt.poc.login.LoginImpl> <com.ibm.btt.bc.ac.impl.BTTSecurityManager id="securityManager"> <ref Injection="securityObjectManager" refId="securityObjectManager" /> </com.ibm.btt.bc.ac.impl.BTTSecurityManager> <com.ibm.btt.bc.ac.impl.SecurityObjectManager id="securityObjectManager"> <ref Injection="daoFactory" refId="db2DAOFactory" /> </com.ibm.btt.bc.ac.impl.SecurityObjectManager> <com.ibm.btt.bc.ac.dao.db.DBDAOFactory id="db2DAOFactory" dbSchema="administrator"> <ref Injection="connectionPool" refId="JDBCDAOPool" /> </com.ibm.btt.bc.ac.dao.db.DBDAOFactory>
EJ configuration
<BTTEJ> <com.ibm.btt.bc.ej.BTTEJBase id="ejJdbcT1" sharedMode="false"> <com.ibm.btt.bc.ej.dao.jdbc.EJDAOJdbcImpl Injection="ejDAO" tableName="administrator.ejtable"> <ref Injection="connectionPool" refId="JDBCDAOPool" /> </com.ibm.btt.bc.ej.dao.jdbc.EJDAOJdbcImpl> <ref Injection="userDefinedFieldsDesc" refId="UserDefinedFieldsDescriptionTable" /> </com.ibm.btt.bc.ej.BTTEJBase> <list id="UserDefinedFieldsDescriptionTable"> <com.ibm.btt.bc.ej.FieldDescriptor fieldName="ACCOUNT" isNumeric="false" /> <com.ibm.btt.bc.ej.FieldDescriptor fieldName="AMOUNT" isNumeric="true" /> <com.ibm.btt.bc.ej.FieldDescriptor fieldName="TxnID" isNumeric="false" /> <com.ibm.btt.bc.ej.FieldDescriptor fieldName="BankID" isNumeric="false" /> <com.ibm.btt.bc.ej.FieldDescriptor fieldName="Status" isNumeric="false" /> <com.ibm.btt.bc.ej.FieldDescriptor fieldName="ACCOUNT2" isNumeric="false" /> </list> </BTTEJ>
Override configuration
<config> <com.ibm.btt.msg.poll.PollMessageDispatcher id="com.ibm.btt.msg.MessageDispatcher" traceMessage="true" /> <com.ibm.btt.bc.override.agent.OverrideAgentImpl id="com.ibm.btt.bc.override.agent.OverrideAgent"> <ref Injection="messageDispatcher" refId="com.ibm.btt.msg.MessageDispatcher" /> </com.ibm.btt.bc.override.agent.OverrideAgentImpl> </config>
Transaction configuration
In the configuration example, we use command chain to implement server side transaction handling. In this definition example, the definition is clear and flexible to add or remove the command. Also the command is highly reused.
<transactions> <com.ibm.btt.command.CommandChain id="depositeCmdChain"> <java.util.ArrayList Injection="commands"> <ref refId="accessControlCmd"/> <com.ibm.btt.demo.srvcmd.EJBeforeTransactionCmd /> <com.ibm.btt.demo.srvcmd.SendToHostCmd /> <com.ibm.btt.demo.srvcmd.EJAfterTransactionCmd /> </java.util.ArrayList> </com.ibm.btt.command.CommandChain> <com.ibm.btt.command.CommandChain id="withdrawCmdChain"> <java.util.ArrayList Injection="commands"> <ref refId="accessControlCmd"/> <com.ibm.btt.demo.srvcmd.EJBeforeTransactionCmd /> <com.ibm.btt.demo.srvcmd.SendToHostCmd /> <com.ibm.btt.demo.srvcmd.EJAfterTransactionCmd /> </java.util.ArrayList> </com.ibm.btt.command.CommandChain> <com.ibm.btt.demo.srvcmd.AccessControlCmd id="accessControlCmd"> <ref refId="securityManager" Injection="securityManager" /> </com.ibm.btt.demo.srvcmd.AccessControlCmd> </transactions>