Hello everybody,

I've searching around for the last two weeks trying to find a solution for the 
following set-up. What I would like to achieve is a set-up where 4 JBoss 
instances work together in a clustered environment. Two nodes are actually 
serving client requests while two other nodes are being hot-standby being 
Apache working as software loadbalancer. This works just great and is up and 
running. So no difficulties concerning this matter.

Now I would like to extends the configuration by setting up a fifth JBoss 
instance running the default configuration that needs to serve like a 
centralized, cluster-wide cache. And this is where difficulties appear. 
Browsing  the Wiki has showed me (due to two articles written by Manik Surtani) 
that I need to set-up a TreeCache on this fifth machine together with a 
TcpCacheServer. Each node then synchronizes with the global cache by using the 
TcpDelegatingCacheLoader. The TreeCache on JBoss instance 5 can then be backed 
by a JDBCCacheLoader to persist the cached data.

As described in this article, I have installed a default JBoss instance wich I 
extended with jboss-cache.jar and jgroups.jar in it's default lib folder to 
provice caching functionality. I'm using JBossCache 1.3.0 together with the 
JGroups version provided with JBoss 4.0.2 on a JBoss 4.0.2 configuration. In 
fact, all my JBoss nodes are also running 4.0.2. I configured both the 
TreeCache and the TcpCacheServer in a HttpCache-service.xml file (located 
below) and copied this one to the deploy folder together with a mysql-ds.xml 
file because my TreeCache uses the JDBCCacheLoader.

A first strange thing appeared when starting the AS. I got an error message 
stating that the datasource was not bounded alltough it is available in the 
deploy folder. As far as I know, xxx-ds.xml files are always deployed before 
xxx-service.xml files under normal deployment order configuration. Can anyone 
explain what the reason for this behaviour might be? Anyway I solved it by 
using a deploy.last folder that contains my xxx-service.xml file which solved 
the problem.

A second problem I have is with the TcpCacheServer. As soon as this service is 
started by the AS, it seems to freeze. The web-console in fact is blocking, so 
I dont' have the possibility to do anything with the default JBoss 
configuration. Does anyone have the same behaviour in this circumstances? If 
so, did anyone found a solution for this one. I know I must be doing something 
wrong within this set-up but I can't figure out what. Any help would be greatly 
appreciated off course and any assistance for finding a solution would result 
in a neat article within the Wiki describing this entire configuration.

Below some of the configuration files I used within my attempt to set-up this 
configuration.
The JBoss instance serving as cache has the following service definition file 
called HttpCache-service.xml


  | <server>
  | 
  |     <classpath codebase="./lib" archives="jboss-cache.jar, jgroups.jar"/>
  | 
  |     <mbean code="org.jboss.cache.TreeCache" 
name="jboss.cache:service=HttpCache">
  |             <depends>jboss:service=Naming</depends>
  |             <depends>jboss:service=TransactionManager</depends>
  |             
  |             <attribute 
name="TransactionManagerLookupClass">org.jboss.cache.JBossTransactionManagerLookup</attribute>
  |             
  |             <attribute name="NodeLockingScheme">PESSIMISTIC</attribute>
  |             
  |             <attribute name="IsolationLevel">REPEATABLE_READ</attribute>
  |             
  |             <attribute name="CacheMode">LOCAL</attribute>
  |             
  |             <attribute name="UseInterceptorMbeans">TRUE</attribute>
  |             
  |             <attribute name="LockAcquisitionTimeout">5000</attribute>
  |             
  |             <attribute name="CacheLoaderConfiguration">
  |                             <config>
  |                                     <passivation>TRUE</passivation>
  |                                     <preload>/</preload>
  |                                     <shared>FALSE</shared>                  
                
  |                                     <cacheloader>
  |                                             
<class>org.jboss.cache.loader.JDBCCacheLoader</class>
  |                                             <properties>
  |                                                     
cache.jdbc.datasource=java:/HttpCacheDS
  |                                             </properties>
  |                                             
<fetchPersistentState>true</fetchPersistentState>
  |                                             
<ignoreModifications>false</ignoreModifications>
  |                                             <async>false</async>
  |                                     </cacheloader>
  |                             </config>
  |             </attribute>            
  |     </mbean>
  |     
  |     <mbean code="org.jboss.cache.loader.tcp.TcpCacheServer" 
  |                                name="jboss.cache:service=TcpCacheServer">   
                           
  |                     <depends optional-attribute-name="Cache" 
proxy-type="attribute">jboss.cache:service=HttpCache</depends>-->               
       
  |                     <attribute 
name="BindAddress">${jboss.bind.address:localhost}</attribute>
  |                     <attribute name="Port">7500</attribute>
  |                     <attribute name="MBeanServerName"></attribute>
  |     </mbean>
  |     
  | </server>

Each JBoss cluster node (running the all configuration) has a modified 
tc5-cluster-service.xml file that should (if I understand everything correct) 
use the global cache to synchronize with:


  | <server>
  | 
  |     <classpath codebase="./lib" archives="jboss-cache.jar, jgroups.jar"/>
  | 
  |     <mbean code="org.jboss.cache.TreeCache"
  |         name="jboss.cache:service=TomcatClusteringCache">
  |         <depends>jboss:service=Naming</depends>
  |         <depends>jboss:service=TransactionManager</depends>
  |         
  |         <attribute 
name="TransactionManagerLookupClass">org.jboss.cache.JBossTransactionManagerLookup</attribute>
  |         
  |         <attribute name="IsolationLevel">REPEATABLE_READ</attribute>
  |         
  |         <attribute name="CacheMode">LOCAL</attribute>
  |         
  |         <attribute name="LockAcquisitionTimeout">10000</attribute>
  |         
  |         <attribute name="UseReplQueue">false</attribute>
  |         
  |         <attribute name="UseMarshalling">false</attribute>
  |         
  |         <attribute name="CacheLoaderConfiguration">
  |                     <config>
  |                             <shared>true</shared>
  |                             
  |                             <cacheloader>
  |                                     
<class>org.jboss.cache.loader.tcp.TcpDelegatingCacheLoader</class>
  |                                     <properties>
  |                                             host=sinfonix
  |                                             port=7500
  |                                     </properties>
  |                                     <async>true</async>
  |                                     
<fetchPersistentState>false</fetchPersistentState>
  |                                     
<ignoreModifications>false</ignoreModifications>
  |                             </cacheloader>
  |                     </config>
  |         </attribute>
  | 
  |     </mbean>
  | 
  | </server>
  | 

My datasource configuration file looks like the following
<datasources>
  |   <local-tx-datasource>
  |     <jndi-name>HttpCacheDS</jndi-name>
  |     <connection-url>jdbc:mysql://localhost:3306/jbosscache</connection-url>
  |     <driver-class>com.mysql.jdbc.Driver</driver-class>
  |     <user-name>xxxxx</user-name>
  |     <password>xxxxx</password>
  |     
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
  |     <!-- sql to call when connection is created
  |     <new-connection-sql>some arbitrary sql</new-connection-sql>
  |       -->
  |     <!-- sql to call on an existing pooled connection when it is obtained 
from pool 
  |     <check-valid-connection-sql>some arbitrary 
sql</check-valid-connection-sql>
  |       -->
  | 
  |     <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml 
(optional) -->
  |     <metadata>
  |        <type-mapping>mySQL</type-mapping>
  |     </metadata>
  |   </local-tx-datasource>
  | </datasources>


Can anyone tell me whether or not this is the appropriate approach to achieve 
the configuration mentionned above or am I completely wrong and is there 
another approach that must be followed.

Any reference containing information how to create this kind of set-up would be 
greatly appreciated. Many thanks in advance to all the people out there, 
certainly the few who found enough energy to read this question ;-)


Cheers,
Kurt

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3955645#3955645

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3955645

Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
JBoss-user mailing list
JBoss-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to