際際滷

際際滷Share a Scribd company logo
Simone Federici  s.federici@k-tech.it
                                                                by K-Tech S.r.l.


                            Terracotta for Spring:
                               Clustering di beans

                                                      +
Cagliari
                                                      =
Spring Meeting 2008                 --------------------

Simone Federici
s.federici@gmail.com
it_openterracotta@yahoogroups.com

     Spring Meeting 2008
     Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                          by K-Tech S.r.l.




                       whoami

 Simone Federici
     Java Architect for K-Tech S.r.l.
     APM, Performance, Networks


Staff di Java Italian Portal
Coord. JugRoma
Coord. Terracotta IT Group
Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                                  by K-Tech S.r.l.




                         Breve intro su TC
   Soluzione opensource per il clustering a livello di JVM.
   Clustering trasparente a livello applicativo
   Fa interagire le applicazioni distribuite come se
    fossero su una unica JVM
   In una JVM i threads interagiscono gli uni con gli altri
    attraverso il cambiamento degli oggetti residenti
    nell'HEAP e attraverso le primitive concorrenti.
    (synchronized keyword, wait(), notify() e notifyAll()).
   Terracotta estende il loro          significato   per      una
    sincronizzazione distribuita.




      Spring Meeting 2008
      Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                by K-Tech S.r.l.




                           Terracotta DSO
Client/Server p2p




TC Library caricate nel boot classpath.




Cluster capabilities injection



Disaccoppiamento tra applicazione e
infrastruttura di cluster DSO.
Threads Coordination




Scalability




High availaility





    Spring Meeting 2008
    Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                                 by K-Tech S.r.l.




              Delevopment Benefit
                          Cluster non applicativo, 竪 un cluster di JVM.
                          Separate of concerns tra Business Logic e Infrastructure
                           Object.
                          NESSUNA API Java NUOVA da imparare.
                          Non c'竪 serializzazione.
                          Non ci sono metodi CUSTOM da implementare per la
                           replicazione.
                          Un programmatore deve semplicemente conoscere la
                           programmazione concorrente.




Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                    by K-Tech S.r.l.




                           Features
 Utilizzo della rete ottimizzato
 no full replications
 Update degli oggetti possibile
 JMX per il monitor del server
 Admin console
 Aumento della massima capacita di memoria
  della jvm.
 Monitoring e tuning delle applicazioni




  Spring Meeting 2008
  Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                              by K-Tech S.r.l.




                           Terracotta Tools

 Eclipse plugin
Session Cofigurator


Admin Conosle


Snapshot Visualization Tool




    Spring Meeting 2008
    Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                   by K-Tech S.r.l.



                           HTTP Session
                            Clustering
 La memoria occupata dalle sessioni cresce 1:1 con gli utenti che
  usano il sistema.
 C'竪 quindi bisogno di una cluster orizzontale, con un load


  balancer (stiky).
 Terracotta supporta la replicazione delle sessioni senza bisogno


  di API speciali, senza bisogno della serializazione e non
  introduce i noti problemi della full replication.



    Spring Meeting 2008
    Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                                                              by K-Tech S.r.l.


        Serializatione
  scambio dati non ottimizzato

                                                  500 bytes
                 Grandparent
                                                                                     Total session size:
                                                                                         1548 bytes


           Parent1             Parent2                                         Cost of 16 byte change:
                                                              500 bytes each
                                                                                         1548 bytes



  Child1             Child2              Child3
                                                                     16 bytes each




Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                                                              by K-Tech S.r.l.


                 Terracotta DSO
              scambio dati: ottimale

                                                  500 bytes
                 Grandparent
                                                                                     Total session size:
                                                                                         1548 bytes


           Parent1             Parent2                                         Cost of 16 byte change:
                                                              500 bytes each
                                                                                          16 bytes



  Child1             Child2              Child3
                                                                     16 bytes each




Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                              by K-Tech S.r.l.



                      Fine-Grained
                    Change Replication

   Ogni cambiamento ad un oggetto genera una transazione
   Tutti i cambiamenti fatti all'interno di un blocco sincronizzato vengono
    inviati in una unica transazione.
   Le transazioni contengono solo i dati dei campi cambiati.
   Le transazioni vengono inviate al server che le replica alle altre JVM.
   Il server filtra i dati delle transazioni in modo da mandare i cambiamenti
    dei soli oggetti posseduti dalle singole JVM.




    Spring Meeting 2008
    Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                               by K-Tech S.r.l.


                Propagazione tramite
                   setAttribute()
in molte soluzione per replicare una modifica effettuata ad un oggetto, 竪
  necessario chiamare il metodo setAttribute()




   AS1: Session attributes             AS2: Session attributes



         obj1          obj2   Obj3           obj1           obj2          Obj3




                                        setAttribute()




Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                                            by K-Tech S.r.l.




                    Configurazione DSO
                      tc-config.xml
<dso>
    <roots/>
    <transient-fields/>
    <locks/>
    <instrumented-classes/>
    <distributed-methods/>
    <web-applications/>
</dso>




http://www.terracotta.org/confluence/display/docs1/Configuration+Guide+and+Reference

  Spring Meeting 2008
  Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                                      by K-Tech S.r.l.


                 Hello World
         tutorial/HelloWorld.java
     package tutorial;

     import java.util.*;

     public class HelloWorld {
       private List<String> hellos = new ArrayList<String>();

         public void sayHello() {
           synchronized(hellos) {
             hellos.add("Hello, World " + new Date());
             for (String hello : hellos) {
               System.out.println(hello);
             }
           }
         }

         public static void main(String[] args) {
           new HelloWorld().sayHello();
         }
     }

Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                                 by K-Tech S.r.l.


                        Hello World
                       tc-config.xml
    <tc:tc-config xmlns:tc="http://www.terracotta.org/config">
     <application>
       <dso>
        <roots>
          <root><field-name>tutorial.HelloWorld.hellos</field-name></root>
        </roots>
        <locks>
          <autolock>
           <method-expression>* tutorial.HelloWorld*.*(..)</method-expression>
           <lock-level>write</lock-level>
          </autolock>
        </locks>
        <instrumented-classes>
          <include><class-expression>tutorial..*</class-expression></include>
        </instrumented-classes>
       </dso>
     </application>
    </tc:tc-config>

Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                                  by K-Tech S.r.l.


                              Hello World
                                startup
 JAVA_OPTS
    -Dtc.config=<location of configuration information>
    -Dtc.install-root=<location Terracotta is installed>
    -Xbootclasspath/p:<dso-boot-jar-path>


  dso-java.sh -Dtc.config=/path/tc-config.xml tutorial.HelloWorld




   Spring Meeting 2008
   Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                                      by K-Tech S.r.l.



                         Heap Condiviso
                        Grafo degli oggetti
   Le root sono identificate da un FQN Field (it.ktech.package.Class.field)
   A partire da ogni root si formano dei grafi di oggetti condivisi.
   La prima istanza del root field non pu嘆 mai essere sostituita
   Tutte le successive assegnazioni verranno ignorate
   Le jvm che proveranno ad assegnarlo riceveranno invece il valore dell'oggetto
    condiviso
   Questo rappresenta il maggiore Cambio di Semantica effettuato dalle librerie DSO
   Se un oggetto viene referenziato da un oggetto condiviso, esso e l'intero grafo di
    oggetti raggiungibili da esso diventeranno anch'essi condivisi
   Un oggetto clusterizzato ha assegnato un cluster-unique-id e rimarr clusterizzato
    per tutto il suo ciclo di vita.
   Qualora un oggetto diviene irraggiungibile da ogni root e non ci sono istanze di
    questo in alcuna JVM allora questo diviene idoneo per la rimozione da parte del
    cluster garbage collector del TC Server.
       Spring Meeting 2008
       Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                                   by K-Tech S.r.l.



                       Clustered Locks
    I cambiamenti ad un oggetto fatti in un blocco sincronizzato
     formano una Terracotta transaction.
    La definizione di una Terracotta transaction 竪 qualcosa di differente
     da una JTA transaction, questa infatti 竪 molto pi湛 simile ad una
     transazione usata nel Java memory model.
    Per ottenere il lock su un'oggetto condiviso, il thread deve ottenere,
     oltre al lock della jvm, anche un cluster lock. Il tread sar quindi
     bloccato finche non ottiene entrambi i lock, locale e del cluster.
    Tutti i cambiamenti effettuati tra in blocco sincronizzato sono salvati
     da Terracotta in una transazione locale e inviati al server.
    Viene garantito, prima che un altro thread di un altra jvm riesca ad
     ottenere il lock, che tutti i cambiamenti effettuati sugli oggetti
     coinvolti sono stati replicati.
    Le transazioni, ovviamente possono contenere cambiamenti a
     qualsiasi oggetto, non solo all'oggetto di cui si detiene il lock.
                                  http://www.terracotta.org/confluence/display/docs1/Locking+Guide

Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                                            by K-Tech S.r.l.



               Auto locks, named locks
                      Lock Types
 Auto locks
   損 convertono un blocco synchronized in un cluster-wide
     synchronized block.
 Named locks
   損 Mrendono possibile l'esecuzione thread-safe di un qualsiasi
     metodo (anche se non syncronized) attraverso il meccanismo
     di sincronizazione del cluster.
 Write Locks
   損 Multi-threaded synchronized lock.
 Synchronized-write Locks
    Il server non consegna l'ACK di risposta finche la transazione
     non viene committata su disco (persistent store)
 Read Locks
   損 Permette multipli lettori, ma qualora arriva uno scrittore,
     vengono fermati tutti i lettori.
 Concurrent Locks
   損 Nessun cluster-wait / L'ultimo thread vince
   損 Ovviamente non 竪 garantita la transazione


    Spring Meeting 2008
    Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                       by K-Tech S.r.l.




                 Distributed Metods

  Esistono dei metodi che possono essere invocati in tutte le jvm del
                    cluster contemporaneamente?




         il metodo deve essere invocato su un oggetto condiviso.
     Comodo per le GUI, messaggio broadcast o refresh della view.



Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                      by K-Tech S.r.l.




                           Virtual Heap
 Un grafo condiviso potrebbe crescere al di sopra della
  dimensione massima raggiungibile da una singola JVM
 Terracotta permette un uso efficiente dell'heap locale


   tenendo solo gli oggetti di cui la JVM ha bisogno
   Raggiunta una percentuale terracotta libera l'HEAP locale di un
    10% tenendosi dei piccoli shodow object.
   In ogni momento la JVM tramite lo shodow object pu嘆
    richiedere il vero missing object.
   La percentuale di memoria che la JVM pu嘆 usare per l'HEAP
    condiviso 竪 configurabile.

    Spring Meeting 2008
    Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                                   by K-Tech S.r.l.



                     Typical Clustering
                         Strategies
  AS           AS           AS   AS            AS          AS             AS      AS



  Single point of failure                      Network bottleneck



                                                                    LB
 AS           AS            AS   AS


                                                AS          AS            AS       AS



       SoR bottleneck                 Cascading failures (Buddy system)

Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                                                 by K-Tech S.r.l.


         Dedicated Terracotta Servers
 (1 active / 1 passive)
 che condividono un disco
 tramite le classiche
 tecnologie di disk sharing


 Terracotta JVM Clients


 Terracotta Servers


 Shared Store

http://www.terracotta.org/confluence/display/docs1/Deployment+Guide
http://www.terracotta.org/confluence/display/docs1/Creating+a+Terracotta+Server+Cluster
     Spring Meeting 2008
     Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                                       by K-Tech S.r.l.




        Network NAT Replication
 E' importante
  replicare anche la
  configurazione di
  rete, in modo da
  non avere un
  single point of
  failure (la rete)

          http://www.terracotta.org/confluence/display/docs1/Network+Active-Passive+Deployment+Guide

Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                            by K-Tech S.r.l.




                       JVM Tuning
   -XX:+UseConcMarkSweepGC
   -XX:+UseParNewGC
   -XX:SurvivorRatio=8
   -XX:+UseParallelGC
   -XX:ParallelGCThreads=20
   -XX:+UseParallelOldGC
   -Xmn1g


                         http://www.terracotta.org/confluence/display/docs1/Tuning+Guide
                         http://java.sun.com/performance/reference/whitepapers/tuning.html
                                    http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html

Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                    by K-Tech S.r.l.




              Terracotta for Spring




Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                              by K-Tech S.r.l.




               JMX Spring clustering
Terracotta config                               Spring config
<spring>
 <application name="tc-jmx">
   <application-contexts>                      <bean id="localCounter"
    <application-context>                         class="demo.jmx.Counter"/>
     <paths>
       <path>*/applicationContext.xml</path>   <bean id="clusteredCounter"
     </paths>                                     class="demo.jmx.Counter"/>
     <beans>
       <bean name="clusteredCounter"/>         <bean id="localHistory"
       <bean name="clusteredHistory"/>            class="demo.jmx.HistoryQueue"/>
     </beans>
    </application-context>                     <bean id="clusteredHistory"
   </application-contexts>                        class="demo.jmx.HistoryQueue"/>
 </application>
</spring>


Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                              by K-Tech S.r.l.




       Spring Configuration: WAR
<!-- tc:config/application/spring -->
<!-- list of applications -->
<jee-application name="SampleWebApp">
 ... // uno specifico WAR
</jee-application>
                                        ...oppure...



                                        <jee-application name="*">
                                         ... // tutti i WAR
                                        </jee-application>



Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                                                by K-Tech S.r.l.




        Spring Configuration: Context
<!-- tc:config/application/spring/jee-application -->   ApplicationContext ac = new
                                                              ClassPathXmlApplicationContext({
                                                            "config/foo.xml",
<application-contexts>                                      "config/bar.xml"
 <application-context>                                  });
   <paths>
     <path>config/foo.xml</path>
     <path>config/bar.xml</path>                        ... oppure web.xml ...
   </paths>
 <application-context>                                   <context-param>
<application-contexts>                                    <param-name>contextConfigLocation</param-name>
                                                          <param-value>
...oppure...                                               classpath:config/foo.xml
                                                           classpath:config/bar.xml
                                                          </param-value>
<!-- tc:config/application/spring/jee-                   </context-param>
     application/application-contexts/application-
     context/paths -->                                   <listener>
                                                          <listener-class>
                                                             org.springframework.web.context.ContextLoaderListener
<path>*/foo.xml</path>
                                                          </listener-class>
                                                         </listener>


     Spring Meeting 2008
     Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                                  by K-Tech S.r.l.




        Spring Configuration: Beans
<!-- tc:config/application/spring/jee-   <!-- tc:config/application/spring/jee-
     application/application-                 application/application-
     contexts/application-context -->         contexts/application-context -->

                                         <beans>
                                          <bean name="myBean">
                                            <non-distributed-field>
<beans>
                                              dataSource
  <bean name="myBean"/>                     </non-distributed-field>
  <bean name="txManager"/>                </bean>
                                         </beans>
  <bean name="securityManager"/>
  ...                                    <--- spring --->
</beans>                                 <bean name="myBean"
                                            class="com.biz.webapp.MyBeanImpl">
                                          <property name="dataSource"
                                            ref="dataSource"/>
                                         </bean>

Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                                       by K-Tech S.r.l.




    Spring Configuration: Events


<!-- tc:config/application/spring/jee-application/application-contexts/application-context -->
<distributed-events>
 <distributed-event>org.comp.SomeEvent</distributed-event>
 <distributed-event>*.SomeEvent</distributed-event>
 <distributed-event>org.comp.Some*</distributed-event>
 <distributed-event>org.comp.*</distributed-event>
 <distributed-event>*</distributed-event>
</distributed-events>




Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                                   by K-Tech S.r.l.




   Spring Configuration: Classes

<!-- Under c:config/application/spring/jee-application -->
<instrumented-classes>
 <include>
   <class-expression>com.biz.webapp..*</class-expression>
 </include>
</instrumented-classes>


LEGENDA:
* Una classe o un package
.. Zero o pi湛 packages




Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                                   by K-Tech S.r.l.


        Spring Configuration:
      Http Sessions and WebFlow


<!-- Under c:config/application/spring/jee-application -->
<!-- optional (default false) -->

<session-support>true</session-support>




Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                              by K-Tech S.r.l.




      Spring Configuration: Locks
<!-- tc:config/application/spring/jee-application -->
<locks>
 <autolock>
   <method-expression>
     * com.biz.webapp.MyBeanImpl.updateBar(..)
   </method-expression>
   <lock-level>write</lock-level>
 </autolock>
 <named-lock>
   <lock-name>lockTwo</lock-name>
   <method-expression>
     * com.biz.webapp.MyBeanImpl.getBar(..)
   </method-expression>
   <lock-level>read</lock-level>
 </named-lock>
</locks>




Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                              by K-Tech S.r.l.




                          JMX
 samples/spring/jmx
     ./start-tomcat1.sh
          http://localhost:8081/jmx/
     ./start-tomcat2.sh
          http://localhost:8082/jmx/
 View Source:
          samples/spring/jmx/docs/source.html



Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                               by K-Tech S.r.l.




                       Coordination
 samples/spring/coordination
     ./start-tomcat1.sh
          http://localhost:8081/coordination/
     ./start-tomcat2.sh
          http://localhost:8082/coordination/
 View Source:
          samples/spring/coordination/docs/source.html



Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                 by K-Tech S.r.l.




                        Events
 samples/spring/events
     ./start-tomcat1.sh
          http://localhost:8081/events/
     ./start-tomcat2.sh
          http://localhost:8082/events/
 View Source:
          samples/spring/events/docs/source.html



Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                              by K-Tech S.r.l.




                       WebFlow
 samples/spring/webflow
     ./start-tomcat[123].sh
     ./start-load-balancer.sh
          http://localhost:8080/webflow/
 View Source:
          samples/spring/webflow/docs/source.html




Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                              by K-Tech S.r.l.




               Integrations - Spring


Versions Supported:
                                   Support
 - 1.2.4,                          for 2.5 ?
                          https://jira.terracotta.org/jira/browse/CDV-559
 - 2.0 (up to 2.0.5),     https://jira.terracotta.org/jira/browse/CDV-772
 - Web Flow 1.0,
 - Events

Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                                                  by K-Tech S.r.l.




                Monitoring and Statistics
         Agents
         Gateway
         Gatherer
         Statistics Store
         Snapshot
          Visualization Tool

http://www.terracotta.org/confluence/display/docs1/Cluster+Statistics+Recorder+Guide

     Spring Meeting 2008
     Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                                        by K-Tech S.r.l.




     Maven Plugin for Terracotta
                               <plugin>
   tc:bootjar                     <groupId>org.terracotta.maven.plugins</groupId>
   tc:start                        <artifactId>tc-maven-plugin</artifactId>
                                    <version>1.1.1</version>
   tc:stop
   tc:restart                 <configuration>
   tc:admin                     <!-- used by tc:run -->
                                 <!-- <workingDirectory>working directory</workingDirectory> -->
   tc:run                       <!-- <activeNodes>master, sample0, sample1</activeNodes> -->
   tc:clean
   tc:terminate                <processes>
                                  <process nodeName="master" count="1"jvmargs="-Xmx20m"
   tc:run-integration             className="org.terracotta.maven.plugins.tc.test.MasterProcess"/>
   tc:terminate-integration      <process nodeName="sample" count="2" jvmargs="-Xmx20m"
   tc:test                        className="org.terracotta.maven.plugins.tc.test.SampleProcess"/>
   tc:manifest                 </processes>

                               </configuration>
mvn -Pjetty6x tc:run           </plugin>
mvn -Pjetty6x tc:terminate
                                                                                Integrated with Cargo
mvn -Ptomcat5x tc:run          mvn -DactiveNodes=master,sample0 tc:run
mvn -Ptomcat5x tc:terminate    mvn -DactiveNodes=sample1 tc:run



Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                                        by K-Tech S.r.l.




              Supported integrations
'Supported' significa:
   Basta aggiungere un modulo per clusterizzare la tua applicazione
   No c'竪 bisogno di alcun setup
   Con Terracotta DSO tutto continua a funzionare
   Tecnicamente, Terracotta supporta tutte le integrazioni di tutto ci嘆 che gira su una JVM




  Spring Meeting 2008
  Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                               by K-Tech S.r.l.




              Integrations Modules
<modules>
   <module name="clustered-apache-struts-1.1" version="1.1.0"/>
   <module name="clustered-cglib-2.1.3" version="1.0.0"/>
 </modules>




Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                          by K-Tech S.r.l.




                       Parlando di JEE
 EJB: ma ce ne 竪 realmente bisogno?
 JMS: Collections.SynchronizedList(list);
 JNDI: 竪 un grafo di oggetti no?




Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                         by K-Tech S.r.l.




                        Q/A?

http://it.groups.yahoo.com/group/it_openterracotta/
                  s.federici@gmail.com




 Spring Meeting 2008
 Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                                 by K-Tech S.r.l.




                        Link utili
                 www.terracotta.org
              www.springframework.org
http://it.groups.yahoo.com/group/it_openterracotta

                       www.javaportal.it
                        www.jugroma.it
                       www.javapress.org

Spring Meeting 2008
Cagliari 3rd Edition
Simone Federici  s.federici@k-tech.it
                                                         by K-Tech S.r.l.




                       Ringraziamenti

Massimiliano Dess狸  Jug Sardegna
Jonas Boner - Terracotta, Inc.
K-Tech S.r.l.




Spring Meeting 2008
Cagliari 3rd Edition
Ad

Recommended

Terracotta Torino Javaday
Terracotta Torino Javaday
Simone Federici
What is kanban
What is kanban
Simone Federici
Python enterprise vento di liberta
Python enterprise vento di liberta
Simone Federici
DevOps with Fabric
DevOps with Fabric
Simone Federici
What is xp
What is xp
Simone Federici
Fabric Python Lib
Fabric Python Lib
Simone Federici
Opensource Aziende
Opensource Aziende
Simone Federici
Maven Eclipse
Maven Eclipse
Simone Federici
Anti pattern se lo conosci lo eviti
Anti pattern se lo conosci lo eviti
Simone Federici
Vilken betydelse har aff辰rsmodeller f旦r framg奪ngsrika energitj辰nster?
Vilken betydelse har aff辰rsmodeller f旦r framg奪ngsrika energitj辰nster?
Marcus Linder
Cirkul辰ra aff辰rsmodeller f旦r milj旦 och l旦nsamhet - Folkuniversitetet 23 okt 2013
Cirkul辰ra aff辰rsmodeller f旦r milj旦 och l旦nsamhet - Folkuniversitetet 23 okt 2013
Marcus Linder
Self-presentation: Marcus Linder as new researcher at Viktoria Swedish ICT
Self-presentation: Marcus Linder as new researcher at Viktoria Swedish ICT
Marcus Linder
The association between environmental orientation and financial performance
The association between environmental orientation and financial performance
Marcus Linder
Django in enterprise world
Django in enterprise world
Simone Federici
BORANG TAKSIRAN DAN rekod transit PENDIDIKAN MORAL tahun 4
BORANG TAKSIRAN DAN rekod transit PENDIDIKAN MORAL tahun 4
Norazlaili Mokhtar
Capturing Value from Green Offers - slides PhD thesis defense
Capturing Value from Green Offers - slides PhD thesis defense
Marcus Linder
Java VS Python
Java VS Python
Simone Federici
Django productivity tips and tricks
Django productivity tips and tricks
Simone Federici
Java o non java
Java o non java
Simone Federici
Ujian akhir tahun muzik tahun 5
Ujian akhir tahun muzik tahun 5
Norazlaili Mokhtar
Business Model Innovation
Business Model Innovation
Marcus Linder
Advice to all
Advice to all
velang
Woeste Mannen Presentatie2
Woeste Mannen Presentatie2
guesteba386c
Military Construction Summit 2010
Military Construction Summit 2010
AndrewDrummond
ECON2010 Proposal - "E4 Flexible Resources: From Local File System To REST"
ECON2010 Proposal - "E4 Flexible Resources: From Local File System To REST"
Ed Bartsch
R2R Meeting 2 pdf
R2R Meeting 2 pdf
Rancho Bernardo Community Presbyterian Church
Maarne51 Prep.
Maarne51 Prep.
discountshoppingmallwinnipeg.com
Daugialyps terps ND Jurkenas
Daugialyps terps ND Jurkenas
barzdukas

More Related Content

Viewers also liked (20)

Anti pattern se lo conosci lo eviti
Anti pattern se lo conosci lo eviti
Simone Federici
Vilken betydelse har aff辰rsmodeller f旦r framg奪ngsrika energitj辰nster?
Vilken betydelse har aff辰rsmodeller f旦r framg奪ngsrika energitj辰nster?
Marcus Linder
Cirkul辰ra aff辰rsmodeller f旦r milj旦 och l旦nsamhet - Folkuniversitetet 23 okt 2013
Cirkul辰ra aff辰rsmodeller f旦r milj旦 och l旦nsamhet - Folkuniversitetet 23 okt 2013
Marcus Linder
Self-presentation: Marcus Linder as new researcher at Viktoria Swedish ICT
Self-presentation: Marcus Linder as new researcher at Viktoria Swedish ICT
Marcus Linder
The association between environmental orientation and financial performance
The association between environmental orientation and financial performance
Marcus Linder
Django in enterprise world
Django in enterprise world
Simone Federici
BORANG TAKSIRAN DAN rekod transit PENDIDIKAN MORAL tahun 4
BORANG TAKSIRAN DAN rekod transit PENDIDIKAN MORAL tahun 4
Norazlaili Mokhtar
Capturing Value from Green Offers - slides PhD thesis defense
Capturing Value from Green Offers - slides PhD thesis defense
Marcus Linder
Java VS Python
Java VS Python
Simone Federici
Django productivity tips and tricks
Django productivity tips and tricks
Simone Federici
Java o non java
Java o non java
Simone Federici
Ujian akhir tahun muzik tahun 5
Ujian akhir tahun muzik tahun 5
Norazlaili Mokhtar
Business Model Innovation
Business Model Innovation
Marcus Linder
Advice to all
Advice to all
velang
Woeste Mannen Presentatie2
Woeste Mannen Presentatie2
guesteba386c
Military Construction Summit 2010
Military Construction Summit 2010
AndrewDrummond
ECON2010 Proposal - "E4 Flexible Resources: From Local File System To REST"
ECON2010 Proposal - "E4 Flexible Resources: From Local File System To REST"
Ed Bartsch
R2R Meeting 2 pdf
R2R Meeting 2 pdf
Rancho Bernardo Community Presbyterian Church
Maarne51 Prep.
Maarne51 Prep.
discountshoppingmallwinnipeg.com
Daugialyps terps ND Jurkenas
Daugialyps terps ND Jurkenas
barzdukas
Anti pattern se lo conosci lo eviti
Anti pattern se lo conosci lo eviti
Simone Federici
Vilken betydelse har aff辰rsmodeller f旦r framg奪ngsrika energitj辰nster?
Vilken betydelse har aff辰rsmodeller f旦r framg奪ngsrika energitj辰nster?
Marcus Linder
Cirkul辰ra aff辰rsmodeller f旦r milj旦 och l旦nsamhet - Folkuniversitetet 23 okt 2013
Cirkul辰ra aff辰rsmodeller f旦r milj旦 och l旦nsamhet - Folkuniversitetet 23 okt 2013
Marcus Linder
Self-presentation: Marcus Linder as new researcher at Viktoria Swedish ICT
Self-presentation: Marcus Linder as new researcher at Viktoria Swedish ICT
Marcus Linder
The association between environmental orientation and financial performance
The association between environmental orientation and financial performance
Marcus Linder
Django in enterprise world
Django in enterprise world
Simone Federici
BORANG TAKSIRAN DAN rekod transit PENDIDIKAN MORAL tahun 4
BORANG TAKSIRAN DAN rekod transit PENDIDIKAN MORAL tahun 4
Norazlaili Mokhtar
Capturing Value from Green Offers - slides PhD thesis defense
Capturing Value from Green Offers - slides PhD thesis defense
Marcus Linder
Django productivity tips and tricks
Django productivity tips and tricks
Simone Federici
Ujian akhir tahun muzik tahun 5
Ujian akhir tahun muzik tahun 5
Norazlaili Mokhtar
Business Model Innovation
Business Model Innovation
Marcus Linder
Advice to all
Advice to all
velang
Woeste Mannen Presentatie2
Woeste Mannen Presentatie2
guesteba386c
Military Construction Summit 2010
Military Construction Summit 2010
AndrewDrummond
ECON2010 Proposal - "E4 Flexible Resources: From Local File System To REST"
ECON2010 Proposal - "E4 Flexible Resources: From Local File System To REST"
Ed Bartsch
Daugialyps terps ND Jurkenas
Daugialyps terps ND Jurkenas
barzdukas

Terracotta Springmeeting

  • 1. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Terracotta for Spring: Clustering di beans + Cagliari = Spring Meeting 2008 -------------------- Simone Federici s.federici@gmail.com it_openterracotta@yahoogroups.com Spring Meeting 2008 Cagliari 3rd Edition
  • 2. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. whoami Simone Federici Java Architect for K-Tech S.r.l. APM, Performance, Networks Staff di Java Italian Portal Coord. JugRoma Coord. Terracotta IT Group Spring Meeting 2008 Cagliari 3rd Edition
  • 3. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Breve intro su TC Soluzione opensource per il clustering a livello di JVM. Clustering trasparente a livello applicativo Fa interagire le applicazioni distribuite come se fossero su una unica JVM In una JVM i threads interagiscono gli uni con gli altri attraverso il cambiamento degli oggetti residenti nell'HEAP e attraverso le primitive concorrenti. (synchronized keyword, wait(), notify() e notifyAll()). Terracotta estende il loro significato per una sincronizzazione distribuita. Spring Meeting 2008 Cagliari 3rd Edition
  • 4. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Terracotta DSO Client/Server p2p TC Library caricate nel boot classpath. Cluster capabilities injection Disaccoppiamento tra applicazione e infrastruttura di cluster DSO. Threads Coordination Scalability High availaility Spring Meeting 2008 Cagliari 3rd Edition
  • 5. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Delevopment Benefit Cluster non applicativo, 竪 un cluster di JVM. Separate of concerns tra Business Logic e Infrastructure Object. NESSUNA API Java NUOVA da imparare. Non c'竪 serializzazione. Non ci sono metodi CUSTOM da implementare per la replicazione. Un programmatore deve semplicemente conoscere la programmazione concorrente. Spring Meeting 2008 Cagliari 3rd Edition
  • 6. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Features Utilizzo della rete ottimizzato no full replications Update degli oggetti possibile JMX per il monitor del server Admin console Aumento della massima capacita di memoria della jvm. Monitoring e tuning delle applicazioni Spring Meeting 2008 Cagliari 3rd Edition
  • 7. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Terracotta Tools Eclipse plugin Session Cofigurator Admin Conosle Snapshot Visualization Tool Spring Meeting 2008 Cagliari 3rd Edition
  • 8. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. HTTP Session Clustering La memoria occupata dalle sessioni cresce 1:1 con gli utenti che usano il sistema. C'竪 quindi bisogno di una cluster orizzontale, con un load balancer (stiky). Terracotta supporta la replicazione delle sessioni senza bisogno di API speciali, senza bisogno della serializazione e non introduce i noti problemi della full replication. Spring Meeting 2008 Cagliari 3rd Edition
  • 9. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Serializatione scambio dati non ottimizzato 500 bytes Grandparent Total session size: 1548 bytes Parent1 Parent2 Cost of 16 byte change: 500 bytes each 1548 bytes Child1 Child2 Child3 16 bytes each Spring Meeting 2008 Cagliari 3rd Edition
  • 10. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Terracotta DSO scambio dati: ottimale 500 bytes Grandparent Total session size: 1548 bytes Parent1 Parent2 Cost of 16 byte change: 500 bytes each 16 bytes Child1 Child2 Child3 16 bytes each Spring Meeting 2008 Cagliari 3rd Edition
  • 11. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Fine-Grained Change Replication Ogni cambiamento ad un oggetto genera una transazione Tutti i cambiamenti fatti all'interno di un blocco sincronizzato vengono inviati in una unica transazione. Le transazioni contengono solo i dati dei campi cambiati. Le transazioni vengono inviate al server che le replica alle altre JVM. Il server filtra i dati delle transazioni in modo da mandare i cambiamenti dei soli oggetti posseduti dalle singole JVM. Spring Meeting 2008 Cagliari 3rd Edition
  • 12. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Propagazione tramite setAttribute() in molte soluzione per replicare una modifica effettuata ad un oggetto, 竪 necessario chiamare il metodo setAttribute() AS1: Session attributes AS2: Session attributes obj1 obj2 Obj3 obj1 obj2 Obj3 setAttribute() Spring Meeting 2008 Cagliari 3rd Edition
  • 13. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Configurazione DSO tc-config.xml <dso> <roots/> <transient-fields/> <locks/> <instrumented-classes/> <distributed-methods/> <web-applications/> </dso> http://www.terracotta.org/confluence/display/docs1/Configuration+Guide+and+Reference Spring Meeting 2008 Cagliari 3rd Edition
  • 14. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Hello World tutorial/HelloWorld.java package tutorial; import java.util.*; public class HelloWorld { private List<String> hellos = new ArrayList<String>(); public void sayHello() { synchronized(hellos) { hellos.add("Hello, World " + new Date()); for (String hello : hellos) { System.out.println(hello); } } } public static void main(String[] args) { new HelloWorld().sayHello(); } } Spring Meeting 2008 Cagliari 3rd Edition
  • 15. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Hello World tc-config.xml <tc:tc-config xmlns:tc="http://www.terracotta.org/config"> <application> <dso> <roots> <root><field-name>tutorial.HelloWorld.hellos</field-name></root> </roots> <locks> <autolock> <method-expression>* tutorial.HelloWorld*.*(..)</method-expression> <lock-level>write</lock-level> </autolock> </locks> <instrumented-classes> <include><class-expression>tutorial..*</class-expression></include> </instrumented-classes> </dso> </application> </tc:tc-config> Spring Meeting 2008 Cagliari 3rd Edition
  • 16. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Hello World startup JAVA_OPTS -Dtc.config=<location of configuration information> -Dtc.install-root=<location Terracotta is installed> -Xbootclasspath/p:<dso-boot-jar-path> dso-java.sh -Dtc.config=/path/tc-config.xml tutorial.HelloWorld Spring Meeting 2008 Cagliari 3rd Edition
  • 17. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Heap Condiviso Grafo degli oggetti Le root sono identificate da un FQN Field (it.ktech.package.Class.field) A partire da ogni root si formano dei grafi di oggetti condivisi. La prima istanza del root field non pu嘆 mai essere sostituita Tutte le successive assegnazioni verranno ignorate Le jvm che proveranno ad assegnarlo riceveranno invece il valore dell'oggetto condiviso Questo rappresenta il maggiore Cambio di Semantica effettuato dalle librerie DSO Se un oggetto viene referenziato da un oggetto condiviso, esso e l'intero grafo di oggetti raggiungibili da esso diventeranno anch'essi condivisi Un oggetto clusterizzato ha assegnato un cluster-unique-id e rimarr clusterizzato per tutto il suo ciclo di vita. Qualora un oggetto diviene irraggiungibile da ogni root e non ci sono istanze di questo in alcuna JVM allora questo diviene idoneo per la rimozione da parte del cluster garbage collector del TC Server. Spring Meeting 2008 Cagliari 3rd Edition
  • 18. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Clustered Locks I cambiamenti ad un oggetto fatti in un blocco sincronizzato formano una Terracotta transaction. La definizione di una Terracotta transaction 竪 qualcosa di differente da una JTA transaction, questa infatti 竪 molto pi湛 simile ad una transazione usata nel Java memory model. Per ottenere il lock su un'oggetto condiviso, il thread deve ottenere, oltre al lock della jvm, anche un cluster lock. Il tread sar quindi bloccato finche non ottiene entrambi i lock, locale e del cluster. Tutti i cambiamenti effettuati tra in blocco sincronizzato sono salvati da Terracotta in una transazione locale e inviati al server. Viene garantito, prima che un altro thread di un altra jvm riesca ad ottenere il lock, che tutti i cambiamenti effettuati sugli oggetti coinvolti sono stati replicati. Le transazioni, ovviamente possono contenere cambiamenti a qualsiasi oggetto, non solo all'oggetto di cui si detiene il lock. http://www.terracotta.org/confluence/display/docs1/Locking+Guide Spring Meeting 2008 Cagliari 3rd Edition
  • 19. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Auto locks, named locks Lock Types Auto locks 損 convertono un blocco synchronized in un cluster-wide synchronized block. Named locks 損 Mrendono possibile l'esecuzione thread-safe di un qualsiasi metodo (anche se non syncronized) attraverso il meccanismo di sincronizazione del cluster. Write Locks 損 Multi-threaded synchronized lock. Synchronized-write Locks Il server non consegna l'ACK di risposta finche la transazione non viene committata su disco (persistent store) Read Locks 損 Permette multipli lettori, ma qualora arriva uno scrittore, vengono fermati tutti i lettori. Concurrent Locks 損 Nessun cluster-wait / L'ultimo thread vince 損 Ovviamente non 竪 garantita la transazione Spring Meeting 2008 Cagliari 3rd Edition
  • 20. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Distributed Metods Esistono dei metodi che possono essere invocati in tutte le jvm del cluster contemporaneamente? il metodo deve essere invocato su un oggetto condiviso. Comodo per le GUI, messaggio broadcast o refresh della view. Spring Meeting 2008 Cagliari 3rd Edition
  • 21. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Virtual Heap Un grafo condiviso potrebbe crescere al di sopra della dimensione massima raggiungibile da una singola JVM Terracotta permette un uso efficiente dell'heap locale tenendo solo gli oggetti di cui la JVM ha bisogno Raggiunta una percentuale terracotta libera l'HEAP locale di un 10% tenendosi dei piccoli shodow object. In ogni momento la JVM tramite lo shodow object pu嘆 richiedere il vero missing object. La percentuale di memoria che la JVM pu嘆 usare per l'HEAP condiviso 竪 configurabile. Spring Meeting 2008 Cagliari 3rd Edition
  • 22. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Typical Clustering Strategies AS AS AS AS AS AS AS AS Single point of failure Network bottleneck LB AS AS AS AS AS AS AS AS SoR bottleneck Cascading failures (Buddy system) Spring Meeting 2008 Cagliari 3rd Edition
  • 23. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Dedicated Terracotta Servers (1 active / 1 passive) che condividono un disco tramite le classiche tecnologie di disk sharing Terracotta JVM Clients Terracotta Servers Shared Store http://www.terracotta.org/confluence/display/docs1/Deployment+Guide http://www.terracotta.org/confluence/display/docs1/Creating+a+Terracotta+Server+Cluster Spring Meeting 2008 Cagliari 3rd Edition
  • 24. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Network NAT Replication E' importante replicare anche la configurazione di rete, in modo da non avere un single point of failure (la rete) http://www.terracotta.org/confluence/display/docs1/Network+Active-Passive+Deployment+Guide Spring Meeting 2008 Cagliari 3rd Edition
  • 25. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. JVM Tuning -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:SurvivorRatio=8 -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC -Xmn1g http://www.terracotta.org/confluence/display/docs1/Tuning+Guide http://java.sun.com/performance/reference/whitepapers/tuning.html http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html Spring Meeting 2008 Cagliari 3rd Edition
  • 26. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Terracotta for Spring Spring Meeting 2008 Cagliari 3rd Edition
  • 27. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. JMX Spring clustering Terracotta config Spring config <spring> <application name="tc-jmx"> <application-contexts> <bean id="localCounter" <application-context> class="demo.jmx.Counter"/> <paths> <path>*/applicationContext.xml</path> <bean id="clusteredCounter" </paths> class="demo.jmx.Counter"/> <beans> <bean name="clusteredCounter"/> <bean id="localHistory" <bean name="clusteredHistory"/> class="demo.jmx.HistoryQueue"/> </beans> </application-context> <bean id="clusteredHistory" </application-contexts> class="demo.jmx.HistoryQueue"/> </application> </spring> Spring Meeting 2008 Cagliari 3rd Edition
  • 28. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Spring Configuration: WAR <!-- tc:config/application/spring --> <!-- list of applications --> <jee-application name="SampleWebApp"> ... // uno specifico WAR </jee-application> ...oppure... <jee-application name="*"> ... // tutti i WAR </jee-application> Spring Meeting 2008 Cagliari 3rd Edition
  • 29. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Spring Configuration: Context <!-- tc:config/application/spring/jee-application --> ApplicationContext ac = new ClassPathXmlApplicationContext({ "config/foo.xml", <application-contexts> "config/bar.xml" <application-context> }); <paths> <path>config/foo.xml</path> <path>config/bar.xml</path> ... oppure web.xml ... </paths> <application-context> <context-param> <application-contexts> <param-name>contextConfigLocation</param-name> <param-value> ...oppure... classpath:config/foo.xml classpath:config/bar.xml </param-value> <!-- tc:config/application/spring/jee- </context-param> application/application-contexts/application- context/paths --> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener <path>*/foo.xml</path> </listener-class> </listener> Spring Meeting 2008 Cagliari 3rd Edition
  • 30. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Spring Configuration: Beans <!-- tc:config/application/spring/jee- <!-- tc:config/application/spring/jee- application/application- application/application- contexts/application-context --> contexts/application-context --> <beans> <bean name="myBean"> <non-distributed-field> <beans> dataSource <bean name="myBean"/> </non-distributed-field> <bean name="txManager"/> </bean> </beans> <bean name="securityManager"/> ... <--- spring ---> </beans> <bean name="myBean" class="com.biz.webapp.MyBeanImpl"> <property name="dataSource" ref="dataSource"/> </bean> Spring Meeting 2008 Cagliari 3rd Edition
  • 31. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Spring Configuration: Events <!-- tc:config/application/spring/jee-application/application-contexts/application-context --> <distributed-events> <distributed-event>org.comp.SomeEvent</distributed-event> <distributed-event>*.SomeEvent</distributed-event> <distributed-event>org.comp.Some*</distributed-event> <distributed-event>org.comp.*</distributed-event> <distributed-event>*</distributed-event> </distributed-events> Spring Meeting 2008 Cagliari 3rd Edition
  • 32. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Spring Configuration: Classes <!-- Under c:config/application/spring/jee-application --> <instrumented-classes> <include> <class-expression>com.biz.webapp..*</class-expression> </include> </instrumented-classes> LEGENDA: * Una classe o un package .. Zero o pi湛 packages Spring Meeting 2008 Cagliari 3rd Edition
  • 33. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Spring Configuration: Http Sessions and WebFlow <!-- Under c:config/application/spring/jee-application --> <!-- optional (default false) --> <session-support>true</session-support> Spring Meeting 2008 Cagliari 3rd Edition
  • 34. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Spring Configuration: Locks <!-- tc:config/application/spring/jee-application --> <locks> <autolock> <method-expression> * com.biz.webapp.MyBeanImpl.updateBar(..) </method-expression> <lock-level>write</lock-level> </autolock> <named-lock> <lock-name>lockTwo</lock-name> <method-expression> * com.biz.webapp.MyBeanImpl.getBar(..) </method-expression> <lock-level>read</lock-level> </named-lock> </locks> Spring Meeting 2008 Cagliari 3rd Edition
  • 35. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. JMX samples/spring/jmx ./start-tomcat1.sh http://localhost:8081/jmx/ ./start-tomcat2.sh http://localhost:8082/jmx/ View Source: samples/spring/jmx/docs/source.html Spring Meeting 2008 Cagliari 3rd Edition
  • 36. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Coordination samples/spring/coordination ./start-tomcat1.sh http://localhost:8081/coordination/ ./start-tomcat2.sh http://localhost:8082/coordination/ View Source: samples/spring/coordination/docs/source.html Spring Meeting 2008 Cagliari 3rd Edition
  • 37. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Events samples/spring/events ./start-tomcat1.sh http://localhost:8081/events/ ./start-tomcat2.sh http://localhost:8082/events/ View Source: samples/spring/events/docs/source.html Spring Meeting 2008 Cagliari 3rd Edition
  • 38. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. WebFlow samples/spring/webflow ./start-tomcat[123].sh ./start-load-balancer.sh http://localhost:8080/webflow/ View Source: samples/spring/webflow/docs/source.html Spring Meeting 2008 Cagliari 3rd Edition
  • 39. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Integrations - Spring Versions Supported: Support - 1.2.4, for 2.5 ? https://jira.terracotta.org/jira/browse/CDV-559 - 2.0 (up to 2.0.5), https://jira.terracotta.org/jira/browse/CDV-772 - Web Flow 1.0, - Events Spring Meeting 2008 Cagliari 3rd Edition
  • 40. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Monitoring and Statistics Agents Gateway Gatherer Statistics Store Snapshot Visualization Tool http://www.terracotta.org/confluence/display/docs1/Cluster+Statistics+Recorder+Guide Spring Meeting 2008 Cagliari 3rd Edition
  • 41. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Maven Plugin for Terracotta <plugin> tc:bootjar <groupId>org.terracotta.maven.plugins</groupId> tc:start <artifactId>tc-maven-plugin</artifactId> <version>1.1.1</version> tc:stop tc:restart <configuration> tc:admin <!-- used by tc:run --> <!-- <workingDirectory>working directory</workingDirectory> --> tc:run <!-- <activeNodes>master, sample0, sample1</activeNodes> --> tc:clean tc:terminate <processes> <process nodeName="master" count="1"jvmargs="-Xmx20m" tc:run-integration className="org.terracotta.maven.plugins.tc.test.MasterProcess"/> tc:terminate-integration <process nodeName="sample" count="2" jvmargs="-Xmx20m" tc:test className="org.terracotta.maven.plugins.tc.test.SampleProcess"/> tc:manifest </processes> </configuration> mvn -Pjetty6x tc:run </plugin> mvn -Pjetty6x tc:terminate Integrated with Cargo mvn -Ptomcat5x tc:run mvn -DactiveNodes=master,sample0 tc:run mvn -Ptomcat5x tc:terminate mvn -DactiveNodes=sample1 tc:run Spring Meeting 2008 Cagliari 3rd Edition
  • 42. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Supported integrations 'Supported' significa: Basta aggiungere un modulo per clusterizzare la tua applicazione No c'竪 bisogno di alcun setup Con Terracotta DSO tutto continua a funzionare Tecnicamente, Terracotta supporta tutte le integrazioni di tutto ci嘆 che gira su una JVM Spring Meeting 2008 Cagliari 3rd Edition
  • 43. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Integrations Modules <modules> <module name="clustered-apache-struts-1.1" version="1.1.0"/> <module name="clustered-cglib-2.1.3" version="1.0.0"/> </modules> Spring Meeting 2008 Cagliari 3rd Edition
  • 44. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Parlando di JEE EJB: ma ce ne 竪 realmente bisogno? JMS: Collections.SynchronizedList(list); JNDI: 竪 un grafo di oggetti no? Spring Meeting 2008 Cagliari 3rd Edition
  • 45. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Q/A? http://it.groups.yahoo.com/group/it_openterracotta/ s.federici@gmail.com Spring Meeting 2008 Cagliari 3rd Edition
  • 46. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Link utili www.terracotta.org www.springframework.org http://it.groups.yahoo.com/group/it_openterracotta www.javaportal.it www.jugroma.it www.javapress.org Spring Meeting 2008 Cagliari 3rd Edition
  • 47. Simone Federici s.federici@k-tech.it by K-Tech S.r.l. Ringraziamenti Massimiliano Dess狸 Jug Sardegna Jonas Boner - Terracotta, Inc. K-Tech S.r.l. Spring Meeting 2008 Cagliari 3rd Edition