Ok, hier nog even de update over JBoss Cache.
Hier is te lezen hoe je deze onder JBoss kan opzetten.
http://www.jboss.org/deve...jboss/tc5-clustering.html
Hier wordt een setup gedaan voor tomcat clustering, waarbij JBoss cache nodig is. Je kan later natuurlijk gewoon alleen maar de cache voor Hibernate gebruiken, maar als je je aplpicaties zelf ook nog 'distributable' wilt maken, staat dat daar ook uitgelegd
De tc5-cluster-service.xml die daar besproken wordt, heeft standaard het volgende:
XML:
1
| <attribute name="CacheMode">REPL_ASYNC</attribute> |
Dit hebben wij naar LOCAL veranderd:
XML:
1
| <attribute name="CacheMode">LOCAL</attribute> |
Nu blijft de cache gewoon lekker op zich zelf draaien.
Ik had zelf een iets uitgebreidere xml gevonden, maar de details zal ik verder besparen.
Wel wil ik nog even dit uitlichten (iets wat er meestal standaard niet in staat):
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| <!-- Name of the eviction policy class. -->
<attribute name="EvictionPolicyClass">org.jboss.cache.eviction.LRUPolicy</attribute>
<!-- Specific eviction policy configurations. This is LRU -->
<attribute name="EvictionPolicyConfig">
<config>
<attribute name="wakeUpIntervalSeconds">5</attribute>
<!-- Cache wide default -->
<region name="/_default_">
<attribute name="maxNodes">5000</attribute>
<attribute name="timeToLiveSeconds">300</attribute>
<!-- Maximum time an object is kept in cache regardless of idle time -->
<attribute name="maxAgeSeconds">120</attribute>
</region>
<region name="/net/tweakers/examplepackage">
<attribute name="maxNodes">5000</attribute>
<attribute name="timeToLiveSeconds">300</attribute>
</region>
</config>
</attribute> |
Dit zorgt er dus voor dat je cache ook weer opgeruimd wordt
Om de cache nu binnen Hibernate te kunnen gebruiken, moeten we nog wat aan de Hibernate configuratie veranderen. Wij gebruiken zelf de hibernate deployer in Jboss, dus hebben geen echte hibernate.conf.xml, maar meer iets dat lijk op een jboss-service.xml (voor je jboss services (sar)).
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <server>
<mbean code="org.jboss.hibernate.jmx.Hibernate" name="jboss.har:service=HibernateService">
<attribute name="DatasourceName">java:/AnyDS</attribute>
<attribute name="SessionFactoryName">java:/hibernate/AnySessionFactory</attribute>
<attribute name="Dialect">org.hibernate.dialect.Oracle9Dialect</attribute>
<attribute name="CacheProviderClass">org.jboss.hibernate.cache.DeployedTreeCacheProvider</attribute>
<attribute name="DeployedTreeCacheObjectName">jboss.cache:service=TomcatClusteringCache</attribute>
<attribute name="ShowSqlEnabled">false</attribute>
<attribute name="SqlCommentsEnabled">false</attribute>
<attribute name="StatGenerationEnabled">true</attribute>
<attribute name="MaxFetchDepth">1</attribute>
</mbean>
</server> |
Nu hebben we Hibernate verteld dat hij de TreeCache moet gebruiken en waar hij deze kan vinden.
Bij elk domein object dat je dan in de cache wilt hebben voeg je dan de cache tag toe, maar nu met 'transactional' als value ipv de veel gebruikte 'read-only'
XML:
1
2
3
| <class name="net.tweakers.examplepackage.ExampleClass" table="EXAMPLE_TABLE">
<cache usage="transactional"/>
</class> |
En dan ben je (zo goed als) klaar
Hibernate houd zelf mooi stats bij (en meer dan de stats die hij dumpt in de console als je er om vraagt), dus daar kan je zelf zien hoe je 2nd level cache het er vanaf brengt
Neem je whisky mee, is het te weinig... *zucht*