JBoss Cache Helves H. Domingues MAC 5863 - Sistemas de Middleware Avançados Prof. Francisco Reverbel Agenda Visão Geral TreeCache / Demonstração POJOCache / Demonstração Cache Loaders Configurações JBoss Cache Consiste em dois módulos – TreeCache – Dados em estrutura de árvore Replicação, transação Utiliza JGroups PojoCache “Acima” do TreeCache Replicação de objetos POJO Utiliza AOP Versão Atual JBoss Cache 1.4.0 “Jalapeno” Integrado ao JBoss App. Server como MBean service. Standalone – Pode rodar em qualquer Java EE Server ( WebLogic e WebSphere) e também em um processo Java fora de um servidor de applicação. Aplicações JBoss Cache como segundo nível de cache para o Hibernate Replicação de objetos de sessão em um cluster Cópia local de dados “caros”: – – – – Banco de dados ( acesso mais lento ) Dados calculados ( faz um cálculo ) Parte de conjunto muito grande Dados remotos, onde o tráfego é lento Organização dos dados a b c d e f Full Qualified Name ( Fqn ) = /a/d/f TreeCache API put (Fqn path,Object key, Object value) put (Fqn path,Object key, Map data) Object get (Fqn path,Object key) remove(Fqn path) remove(Fqn path, Object key) TreeCache Exemplo 1 / Demonstração import org.jboss.cache.*; TreeCache tree = new TreeCache(); PropertyConfigurator config = new PropertyConfigurator(); config.configure(tree, "META-INF/replSync-service.xml"); tree.startService(); tree.put("/a/b/c", "chave", "valor1"); POJOCache API putObject (Fqn path,Object pojo) Object getObject (Fqn path) removeObject(Fqn path) O objeto que será posto no cache: – @org.jboss.cache.aop.annotation.InstanceOfPojoCacheable POJOCache Interceptadores 1 2 CacheInterceptor 6 3 5 4 POJO Cache Objeto POJOCache Exemplo 2 / Demonstração // Import necessários… TreeCache tree = new PojoCache(); PropertyConfigurator config = new PropertyConfigurator(); config.configure(tree, "META-INF/replSync-service.xml"); Person joe = new Person(); joe.setName("Joao Batista"); joe.setAge(31); Address addr = new Address(); addr.setCity("Sao Paulo"); addr.setStreet("Bosque Saude, 56"); addr.setZip(04136-222); joe.setAddress(addr); tree.startService(); tree.putObject("/aop/joe", joe); POJOCache com Transação Exemplo 3 / Demonstração //-- Import necessários… DummyTransactionManager.getInstance(); Properties prop = new Properties(); prop.put(Context.INITIAL_CONTEXT_FACTORY,"org.jboss.cache.tra nsaction.DummyContextFactory"); UserTransaction tx = (UserTransaction)new InitialContext(prop).lookup("UserTransaction"); PojoCache tree = new PojoCache(); PropertyConfigurator config = new PropertyConfigurator(); config.configure(tree, "META-INF/replSync-service.xml"); //-- Criação do Person e Address, etc… tree.startService(); tree.putObject("/aop/joe", joe); tx.begin(); joe.setAge(41); tx.commit(); POJOCache com CacheLoader Exemplo 4 / Demonstração //-- Import necessários… //-- o mesmo do exemplo anterior… config.configure(tree, "META-INF/oodb-service.xml"); tree.startService(); if(!tree.exists("/aop/joe")) { print("Criando um entrada no cache"); //-- Cria Person e Addres.. } else { print("O Cache ja tem a entrada /aop/joe"); } Cenários CacheLoaders Repositório compartilhado Replicação CacheLoader CacheLoader Repositório Cenários CacheLoaders Repositório único Replicação CacheLoader Repositório Cenários CacheLoaders Repositórios isolados Replicação CacheLoader CacheLoader Repositório Repositório Configuração JBoss Cache Modo de replicação CacheMode – Sem replicação – Com replicação – LOCAL REPL_SYNC REPL_ASYNC Com invalidação INVALIDATE_SYNC INVALIDATE_ASYNC Configuração JBoss Cache Transação IsolationLevel – – – – – SERIALIZABLE REPEATABLE_READ (default) READ_COMMITTED READ_UNCOMMITTED NONE NodeLockingScheme – – OPTIMISTIC PESSIMISTIC (default) Configuração JBoss Cache Replicação entre um subgrupo buddyReplicationEnabled – buddyLocatorProperties – – TRUE/FALSE numBuddies = 5 ignoreColocatedBuddies = true buddyPoolName Configuração JBoss Cache Invalidação de Cache “Eviction Policy” EvictionPolicyClass – Region ( fqn de um nó ) – – – LRUPolicy, LFUPolicy, MRUPolicy e FIFOPolicy maxNodes, minNodes timeToLiveSeconds maxAgeSeconds wakeUpIntervalSeconds Configuração JBoss Cache Cache Loaders Modo de operação – – – passivation= true/false preload=(fqn do nó) shared=true/false Para cada cache Loaders – – – – – class location (onde está o repositório) async=true/false purgeOnStartup=true/false ignoreModifications=true/false JBoss Cache Dúvidas/Perguntas Helves H. Domingues MAC 5863 - Sistemas de Middleware Avançados Prof. Francisco Reverbel