http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/be0e755b/examples/src/main/java/org/apache/ignite/examples/datagrid/hibernate/HibernateL2CacheExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/hibernate/HibernateL2CacheExample.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/hibernate/HibernateL2CacheExample.java deleted file mode 100644 index 7ba7ea1..0000000 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/hibernate/HibernateL2CacheExample.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.examples.datagrid.hibernate; - -import org.apache.ignite.*; -import org.apache.ignite.examples.*; -import org.hibernate.*; -import org.hibernate.cache.spi.access.AccessType; -import org.hibernate.cfg.*; -import org.hibernate.service.*; -import org.hibernate.stat.*; - -import java.net.*; -import java.util.*; - -/** - * This example demonstrates the use of Ignite In-Memory Data Ignite cluster as a Hibernate - * Second-Level cache provider. - * <p> - * The Hibernate Second-Level cache (or "L2 cache" shortly) lets you significantly - * reduce the number of requests to the underlying SQL database. Because database - * access is known to be an expansive operation, using L2 cache may improve - * performance dramatically. - * <p> - * This example defines 2 entity classes: {@link User} and {@link Post}, with - * 1 <-> N relation, and marks them with appropriate annotations for Hibernate - * object-relational mapping to SQL tables of an underlying H2 in-memory database. - * The example launches node in the same JVM and registers it in - * Hibernate configuration as an L2 cache implementation. It then stores and - * queries instances of the entity classes to and from the database, having - * Hibernate SQL output, L2 cache statistics output, and Ignite cache metrics - * output enabled. - * <p> - * When running example, it's easy to notice that when an object is first - * put into a database, the L2 cache is not used and it's contents is empty. - * However, when an object is first read from the database, it is immediately - * stored in L2 cache (which is Ignite In-Memory Data Ignite cluster in fact), which can - * be seen in stats output. Further requests of the same object only read the data - * from L2 cache and do not hit the database. - * <p> - * In this example, the Hibernate query cache is also enabled. Query cache lets you - * avoid hitting the database in case of repetitive queries with the same parameter - * values. You may notice that when the example runs the same query repeatedly in - * loop, only the first query hits the database and the successive requests take the - * data from L2 cache. - * <p> - * Note: this example uses {@link AccessType#READ_ONLY} L2 cache access type, but you - * can experiment with other access types by modifying the Hibernate configuration file - * {@code IGNITE_HOME/examples/config/hibernate/example-hibernate-L2-cache.xml}, used by the example. - * <p> - * Remote nodes should always be started using {@link HibernateL2CacheExampleNodeStartup} - */ -public class HibernateL2CacheExample { - /** JDBC URL for backing database (an H2 in-memory database is used). */ - private static final String JDBC_URL = "jdbc:h2:mem:example;DB_CLOSE_DELAY=-1"; - - /** Path to hibernate configuration file (will be resolved from application {@code CLASSPATH}). */ - private static final String HIBERNATE_CFG = "hibernate/example-hibernate-L2-cache.xml"; - - /** Entity names for stats output. */ - private static final List<String> ENTITY_NAMES = - Arrays.asList(User.class.getName(), Post.class.getName(), User.class.getName() + ".posts"); - - /** - * Executes example. - * - * @param args Command line arguments, none required. - * @throws IgniteException If example execution failed. - */ - public static void main(String[] args) throws IgniteException { - // Start the node, run the example, and stop the node when finished. - try (Ignite ignite = Ignition.start(HibernateL2CacheExampleNodeStartup.configuration())) { - // We use a single session factory, but create a dedicated session - // for each transaction or query. This way we ensure that L1 cache - // is not used (L1 cache has per-session scope only). - System.out.println(); - System.out.println(">>> Hibernate L2 cache example started."); - - URL hibernateCfg = ExamplesUtils.url(HIBERNATE_CFG); - - SessionFactory sesFactory = createHibernateSessionFactory(hibernateCfg); - - System.out.println(); - System.out.println(">>> Creating objects."); - - final long userId; - - Session ses = sesFactory.openSession(); - - try { - Transaction tx = ses.beginTransaction(); - - User user = new User("jedi", "Luke", "Skywalker"); - - user.getPosts().add(new Post(user, "Let the Force be with you.")); - - ses.save(user); - - tx.commit(); - - // Create a user object, store it in DB, and save the database-generated - // object ID. You may try adding more objects in a similar way. - userId = user.getId(); - } - finally { - ses.close(); - } - - // Output L2 cache and Ignite cache stats. You may notice that - // at this point the object is not yet stored in L2 cache, because - // the read was not yet performed. - printStats(sesFactory); - - System.out.println(); - System.out.println(">>> Querying object by ID."); - - // Query user by ID several times. First time we get an L2 cache - // miss, and the data is queried from DB, but it is then stored - // in cache and successive queries hit the cache and return - // immediately, no SQL query is made. - for (int i = 0; i < 3; i++) { - ses = sesFactory.openSession(); - - try { - Transaction tx = ses.beginTransaction(); - - User user = (User)ses.get(User.class, userId); - - System.out.println("User: " + user); - - for (Post post : user.getPosts()) - System.out.println("\tPost: " + post); - - tx.commit(); - } - finally { - ses.close(); - } - } - - // Output the stats. We should see 1 miss and 2 hits for - // User and Collection object (stored separately in L2 cache). - // The Post is loaded with the collection, so it won't imply - // a miss. - printStats(sesFactory); - } - } - - /** - * Creates a new Hibernate {@link SessionFactory} using a programmatic - * configuration. - * - * @param hibernateCfg Hibernate configuration file. - * @return New Hibernate {@link SessionFactory}. - */ - private static SessionFactory createHibernateSessionFactory(URL hibernateCfg) { - ServiceRegistryBuilder builder = new ServiceRegistryBuilder(); - - builder.applySetting("hibernate.connection.url", JDBC_URL); - builder.applySetting("hibernate.show_sql", true); - - return new Configuration() - .configure(hibernateCfg) - .buildSessionFactory(builder.buildServiceRegistry()); - } - - /** - * Prints Hibernate L2 cache statistics to standard output. - * - * @param sesFactory Hibernate {@link SessionFactory}, for which to print - * statistics. - */ - private static void printStats(SessionFactory sesFactory) { - System.out.println("=== Hibernate L2 cache statistics ==="); - - for (String entityName : ENTITY_NAMES) { - System.out.println("\tEntity: " + entityName); - - SecondLevelCacheStatistics stats = - sesFactory.getStatistics().getSecondLevelCacheStatistics(entityName); - - System.out.println("\t\tL2 cache entries: " + stats.getEntries()); - System.out.println("\t\tHits: " + stats.getHitCount()); - System.out.println("\t\tMisses: " + stats.getMissCount()); - } - - System.out.println("====================================="); - } -}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/be0e755b/examples/src/main/java/org/apache/ignite/examples/datagrid/hibernate/HibernateL2CacheExampleNodeStartup.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/hibernate/HibernateL2CacheExampleNodeStartup.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/hibernate/HibernateL2CacheExampleNodeStartup.java deleted file mode 100644 index cef6526..0000000 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/hibernate/HibernateL2CacheExampleNodeStartup.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.examples.datagrid.hibernate; - -import org.apache.ignite.*; -import org.apache.ignite.cache.*; -import org.apache.ignite.configuration.*; -import org.apache.ignite.spi.discovery.tcp.*; -import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*; - -import java.util.*; - -import static org.apache.ignite.cache.CacheAtomicityMode.*; -import static org.apache.ignite.cache.CacheMode.*; -import static org.apache.ignite.cache.CacheWriteSynchronizationMode.*; - -/** - * Starts up an empty node with example cache configuration. - */ -public class HibernateL2CacheExampleNodeStartup { - /** - * Start up an empty node with specified cache configuration. - * - * @param args Command line arguments, none required. - * @throws IgniteException If example execution failed. - */ - public static void main(String[] args) throws IgniteException { - Ignition.start(configuration()); - } - - /** - * Create Ignite configuration with IGFS and enabled IPC. - * - * @return Ignite configuration. - * @throws IgniteException If configuration creation failed. - */ - public static IgniteConfiguration configuration() throws IgniteException { - IgniteConfiguration cfg = new IgniteConfiguration(); - - cfg.setGridName("hibernate-grid"); - cfg.setLocalHost("127.0.0.1"); - cfg.setConnectorConfiguration(null); - - TcpDiscoverySpi discoSpi = new TcpDiscoverySpi(); - - TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder(); - - ipFinder.setAddresses(Collections.singletonList("127.0.0.1:47500..47509")); - - discoSpi.setIpFinder(ipFinder); - - cfg.setDiscoverySpi(discoSpi); - - cfg.setCacheConfiguration( - cacheConfiguration("org.hibernate.cache.spi.UpdateTimestampsCache", ATOMIC), - cacheConfiguration("org.hibernate.cache.internal.StandardQueryCache", ATOMIC), - cacheConfiguration("org.apache.ignite.examples.datagrid.hibernate.User", TRANSACTIONAL), - cacheConfiguration("org.apache.ignite.examples.datagrid.hibernate.User.posts", TRANSACTIONAL), - cacheConfiguration("org.apache.ignite.examples.datagrid.hibernate.Post", TRANSACTIONAL) - ); - - return cfg; - } - - /** - * Create cache configuration. - * - * @param name Cache name. - * @param atomicityMode Atomicity mode. - * @return Cache configuration. - */ - private static CacheConfiguration cacheConfiguration(String name, CacheAtomicityMode atomicityMode) { - CacheConfiguration ccfg = new CacheConfiguration(); - - ccfg.setName(name); - ccfg.setCacheMode(PARTITIONED); - ccfg.setAtomicityMode(atomicityMode); - ccfg.setWriteSynchronizationMode(FULL_SYNC); - - return ccfg; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/be0e755b/examples/src/main/java/org/apache/ignite/examples/datagrid/hibernate/Post.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/hibernate/Post.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/hibernate/Post.java deleted file mode 100644 index 4c73f3f..0000000 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/hibernate/Post.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.examples.datagrid.hibernate; - -import javax.persistence.*; -import java.util.*; - -/** - * An entity class representing a post, that a - * {@link User} has made on some public service. - */ -@Entity -class Post { - /** ID. */ - @Id - @GeneratedValue(strategy=GenerationType.AUTO) - private long id; - - /** Author. */ - @ManyToOne - private User author; - - /** Text. */ - private String text; - - /** Created timestamp. */ - private Date created; - - /** - * Default constructor (required by Hibernate). - */ - Post() { - // No-op. - } - - /** - * Constructor. - * - * @param author Author. - * @param text Text. - */ - Post(User author, String text) { - this.author = author; - this.text = text; - created = new Date(); - } - - /** - * @return ID. - */ - public long getId() { - return id; - } - - /** - * @param id New ID. - */ - public void setId(long id) { - this.id = id; - } - - /** - * @return Author. - */ - public User getAuthor() { - return author; - } - - /** - * @param author New author. - */ - public void setAuthor(User author) { - this.author = author; - } - - /** - * @return Text. - */ - public String getText() { - return text; - } - - /** - * @param text New text. - */ - public void setText(String text) { - this.text = text; - } - - /** - * @return Created timestamp. - */ - public Date getCreated() { - return (Date)created.clone(); - } - - /** - * @param created New created timestamp. - */ - public void setCreated(Date created) { - this.created = (Date)created.clone(); - } - - /** {@inheritDoc} */ - @Override public String toString() { - return "Post [id=" + id + - ", text=" + text + - ", created=" + created + - ']'; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/be0e755b/examples/src/main/java/org/apache/ignite/examples/datagrid/hibernate/User.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/hibernate/User.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/hibernate/User.java deleted file mode 100644 index 500c625..0000000 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/hibernate/User.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.examples.datagrid.hibernate; - -import org.hibernate.annotations.*; - -import javax.persistence.CascadeType; -import javax.persistence.Entity; -import javax.persistence.*; -import java.util.*; - -/** - * A user entity class. Represents a user of some public service, - * having a number of personal information fields as well as a - * number of posts written. - */ -@Entity -class User { - /** ID. */ - @Id - @GeneratedValue(strategy=GenerationType.AUTO) - private long id; - - /** Login. */ - @NaturalId - private String login; - - /** First name. */ - private String firstName; - - /** Last name. */ - private String lastName; - - /** Posts. */ - @OneToMany(mappedBy = "author", cascade = CascadeType.ALL) - private Set<Post> posts = new HashSet<>(); - - /** - * Default constructor (required by Hibernate). - */ - User() { - // No-op. - } - - /** - * Constructor. - * - * @param login Login. - * @param firstName First name. - * @param lastName Last name. - */ - User(String login, String firstName, String lastName) { - this.login = login; - this.firstName = firstName; - this.lastName = lastName; - } - - /** - * @return ID. - */ - public long getId() { - return id; - } - - /** - * @param id New ID. - */ - public void setId(long id) { - this.id = id; - } - - /** - * @return Login. - */ - public String getLogin() { - return login; - } - - /** - * @param login New login. - */ - public void setLogin(String login) { - this.login = login; - } - - /** - * @return First name. - */ - public String getFirstName() { - return firstName; - } - - /** - * @param firstName New first name. - */ - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - /** - * @return Last name. - */ - public String getLastName() { - return lastName; - } - - /** - * @param lastName New last name. - */ - public void setLastName(String lastName) { - this.lastName = lastName; - } - - /** - * @return Posts. - */ - public Set<Post> getPosts() { - return posts; - } - - /** - * @param posts New posts. - */ - public void setPosts(Set<Post> posts) { - this.posts = posts; - } - - /** {@inheritDoc} */ - @Override public String toString() { - return "User [id=" + id + - ", login=" + login + - ", firstName=" + firstName + - ", lastName=" + lastName + - ']'; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/be0e755b/examples/src/main/java/org/apache/ignite/examples/datagrid/hibernate/package-info.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/hibernate/package-info.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/hibernate/package-info.java deleted file mode 100644 index 4bb876b..0000000 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/hibernate/package-info.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * <!-- Package description. --> - * Hibernate example. - */ -package org.apache.ignite.examples.datagrid.hibernate; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/be0e755b/examples/src/main/java/org/apache/ignite/examples/datagrid/package-info.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/package-info.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/package-info.java deleted file mode 100644 index e060581..0000000 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/package-info.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * <!-- Package description. --> - * Demonstrates data ignite cache usage. - */ -package org.apache.ignite.examples.datagrid; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/be0e755b/examples/src/main/java/org/apache/ignite/examples/datagrid/starschema/CacheStarSchemaExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/starschema/CacheStarSchemaExample.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/starschema/CacheStarSchemaExample.java deleted file mode 100644 index 22e7a1d..0000000 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/starschema/CacheStarSchemaExample.java +++ /dev/null @@ -1,244 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.examples.datagrid.starschema; - -import org.apache.ignite.*; -import org.apache.ignite.cache.*; -import org.apache.ignite.cache.query.*; -import org.apache.ignite.configuration.*; -import org.apache.ignite.examples.*; - -import javax.cache.*; -import java.util.*; -import java.util.concurrent.*; - -/** - * <a href="http://en.wikipedia.org/wiki/Snowflake_schema">Snowflake Schema</a> is a logical - * arrangement of data in which data is split into {@code dimensions} and {@code facts}. - * <i>Dimensions</i> can be referenced or joined by other <i>dimensions</i> or <i>facts</i>, - * however, <i>facts</i> are generally not referenced by other facts. You can view <i>dimensions</i> - * as your master or reference data, while <i>facts</i> are usually large data sets of events or - * other objects that continuously come into the system and may change frequently. In Ignite - * such architecture is supported via cross-cache queries. By storing <i>dimensions</i> in - * {@link CacheMode#REPLICATED REPLICATED} caches and <i>facts</i> in much larger - * {@link CacheMode#PARTITIONED PARTITIONED} caches you can freely execute distributed joins across - * your whole in-memory data ignite cluster, thus querying your in memory data without any limitations. - * <p> - * In this example we have two <i>dimensions</i>, {@link DimProduct} and {@link DimStore} and - * one <i>fact</i> - {@link FactPurchase}. Queries are executed by joining dimensions and facts - * in various ways. - * <p> - * Remote nodes should always be started with special configuration file which - * enables P2P class loading: {@code 'ignite.{sh|bat} examples/config/example-ignite.xml'}. - * <p> - * Alternatively you can run {@link ExampleNodeStartup} in another JVM which will - * start node with {@code examples/config/example-ignite.xml} configuration. - */ -public class CacheStarSchemaExample { - /** Partitioned cache name. */ - private static final String PARTITIONED_CACHE_NAME = CacheStarSchemaExample.class.getSimpleName() + "Partitioned"; - - /** Replicated cache name. */ - private static final String REPLICATED_CACHE_NAME = CacheStarSchemaExample.class.getSimpleName() + "Replicated"; - - /** ID generator. */ - private static int idGen = (int)System.currentTimeMillis(); - - /** DimStore data. */ - private static Map<Integer, DimStore> dataStore = new HashMap<>(); - - /** DimProduct data. */ - private static Map<Integer, DimProduct> dataProduct = new HashMap<>(); - - /** - * Executes example. - * - * @param args Command line arguments, none required. - */ - public static void main(String[] args) { - try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) { - - System.out.println(); - System.out.println(">>> Cache star schema example started."); - - CacheConfiguration<Integer, FactPurchase> factCacheCfg = new CacheConfiguration<>(); - - factCacheCfg.setCacheMode(CacheMode.PARTITIONED); - factCacheCfg.setName(PARTITIONED_CACHE_NAME); - factCacheCfg.setIndexedTypes( - Integer.class, FactPurchase.class - ); - - CacheConfiguration<Integer, Object> dimCacheCfg = new CacheConfiguration<>(); - - dimCacheCfg.setCacheMode(CacheMode.REPLICATED); - dimCacheCfg.setName(REPLICATED_CACHE_NAME); - dimCacheCfg.setIndexedTypes( - Integer.class, DimStore.class, - Integer.class, DimProduct.class - ); - - try (IgniteCache<Integer, FactPurchase> factCache = ignite.createCache(factCacheCfg); - IgniteCache<Integer, Object> dimCache = ignite.createCache(dimCacheCfg)) { - populateDimensions(dimCache); - populateFacts(factCache); - - queryStorePurchases(); - queryProductPurchases(); - } - } - } - - /** - * Populate cache with {@code 'dimensions'} which in our case are - * {@link DimStore} and {@link DimProduct} instances. - * @param dimCache Cache to populate. - * - * @throws IgniteException If failed. - */ - private static void populateDimensions(Cache<Integer, Object> dimCache) throws IgniteException { - DimStore store1 = new DimStore(idGen++, "Store1", "12345", "321 Chilly Dr, NY"); - DimStore store2 = new DimStore(idGen++, "Store2", "54321", "123 Windy Dr, San Francisco"); - - // Populate stores. - dimCache.put(store1.getId(), store1); - dimCache.put(store2.getId(), store2); - - dataStore.put(store1.getId(), store1); - dataStore.put(store2.getId(), store2); - - // Populate products - for (int i = 0; i < 20; i++) { - int id = idGen++; - - DimProduct product = new DimProduct(id, "Product" + i, i + 1, (i + 1) * 10); - - dimCache.put(id, product); - - dataProduct.put(id, product); - } - } - - /** - * Populate cache with {@code 'facts'}, which in our case are {@link FactPurchase} objects. - * @param factCache Cache to populate. - * - * @throws IgniteException If failed. - */ - private static void populateFacts(Cache<Integer, FactPurchase> factCache) throws IgniteException { - for (int i = 0; i < 100; i++) { - int id = idGen++; - - DimStore store = rand(dataStore.values()); - DimProduct prod = rand(dataProduct.values()); - - factCache.put(id, new FactPurchase(id, prod.getId(), store.getId(), (i + 1))); - } - } - - /** - * Query all purchases made at a specific store. This query uses cross-cache joins - * between {@link DimStore} objects stored in {@code 'replicated'} cache and - * {@link FactPurchase} objects stored in {@code 'partitioned'} cache. - * - * @throws IgniteException If failed. - */ - private static void queryStorePurchases() { - IgniteCache<Integer, FactPurchase> factCache = Ignition.ignite().jcache(PARTITIONED_CACHE_NAME); - - // All purchases for store1. - // ======================== - - // Create cross cache query to get all purchases made at store1. - QueryCursor<Cache.Entry<Integer, FactPurchase>> storePurchases = factCache.query(new SqlQuery( - FactPurchase.class, - "from \"" + REPLICATED_CACHE_NAME + "\".DimStore, \"" + PARTITIONED_CACHE_NAME + "\".FactPurchase " - + "where DimStore.id=FactPurchase.storeId and DimStore.name=?").setArgs("Store1")); - - printQueryResults("All purchases made at store1:", storePurchases.getAll()); - } - - /** - * Query all purchases made at a specific store for 3 specific products. - * This query uses cross-cache joins between {@link DimStore}, {@link DimProduct} - * objects stored in {@code 'replicated'} cache and {@link FactPurchase} objects - * stored in {@code 'partitioned'} cache. - * - * @throws IgniteException If failed. - */ - private static void queryProductPurchases() { - IgniteCache<Integer, FactPurchase> factCache = Ignition.ignite().jcache(PARTITIONED_CACHE_NAME); - - // All purchases for certain product made at store2. - // ================================================= - - DimProduct p1 = rand(dataProduct.values()); - DimProduct p2 = rand(dataProduct.values()); - DimProduct p3 = rand(dataProduct.values()); - - System.out.println("IDs of products [p1=" + p1.getId() + ", p2=" + p2.getId() + ", p3=" + p3.getId() + ']'); - - // Create cross cache query to get all purchases made at store2 - // for specified products. - QueryCursor<Cache.Entry<Integer, FactPurchase>> prodPurchases = factCache.query(new SqlQuery( - FactPurchase.class, - "from \"" + REPLICATED_CACHE_NAME + "\".DimStore, \"" + REPLICATED_CACHE_NAME + "\".DimProduct, " + - "\"" + PARTITIONED_CACHE_NAME + "\".FactPurchase " - + "where DimStore.id=FactPurchase.storeId and DimProduct.id=FactPurchase.productId " - + "and DimStore.name=? and DimProduct.id in(?, ?, ?)") - .setArgs("Store2", p1.getId(), p2.getId(), p3.getId())); - - printQueryResults("All purchases made at store2 for 3 specific products:", prodPurchases.getAll()); - } - - /** - * Print query results. - * - * @param msg Initial message. - * @param res Results to print. - */ - private static <V> void printQueryResults(String msg, Iterable<Cache.Entry<Integer, V>> res) { - System.out.println(msg); - - for (Cache.Entry<?, ?> e : res) - System.out.println(" " + e.getValue().toString()); - } - - /** - * Gets random value from given collection. - * - * @param c Input collection (no {@code null} and not emtpy). - * @return Random value from the input collection. - */ - @SuppressWarnings("UnusedDeclaration") - private static <T> T rand(Collection<? extends T> c) { - if (c == null) - throw new IllegalArgumentException(); - - int n = ThreadLocalRandom.current().nextInt(c.size()); - - int i = 0; - - for (T t : c) { - if (i++ == n) - return t; - } - - throw new ConcurrentModificationException(); - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/be0e755b/examples/src/main/java/org/apache/ignite/examples/datagrid/starschema/DimProduct.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/starschema/DimProduct.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/starschema/DimProduct.java deleted file mode 100644 index 46adc80..0000000 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/starschema/DimProduct.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.examples.datagrid.starschema; - -import org.apache.ignite.cache.query.annotations.*; -import org.apache.ignite.cache.*; - -/** - * Represents a product available for purchase. In our {@code snowflake} schema a {@code product} - * is a {@code 'dimension'} and will be cached in {@link CacheMode#REPLICATED} - * cache. - */ -public class DimProduct { - /** Primary key. */ - @QuerySqlField(index = true) - private int id; - - /** Product name. */ - private String name; - - /** Product list price. */ - @QuerySqlField - private float price; - - /** Available product quantity. */ - private int qty; - - /** - * Constructs a product instance. - * - * @param id Product ID. - * @param name Product name. - * @param price Product list price. - * @param qty Available product quantity. - */ - public DimProduct(int id, String name, float price, int qty) { - this.id = id; - this.name = name; - this.price = price; - this.qty = qty; - } - - /** - * Gets product ID. - * - * @return Product ID. - */ - public int getId() { - return id; - } - - /** - * Gets product name. - * - * @return Product name. - */ - public String getName() { - return name; - } - - /** - * Gets product list price. - * - * @return Product list price. - */ - public float getPrice() { - return price; - } - - /** - * Gets available product quantity. - * - * @return Available product quantity. - */ - public int getQuantity() { - return qty; - } - - /** {@inheritDoc} */ - @Override public String toString() { - return "DimProduct [id=" + id + - ", name=" + name + - ", price=" + price + - ", qty=" + qty + ']'; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/be0e755b/examples/src/main/java/org/apache/ignite/examples/datagrid/starschema/DimStore.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/starschema/DimStore.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/starschema/DimStore.java deleted file mode 100644 index da991e8..0000000 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/starschema/DimStore.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.examples.datagrid.starschema; - -import org.apache.ignite.cache.query.annotations.*; -import org.apache.ignite.cache.*; - -/** - * Represents a physical store location. In our {@code snowflake} schema a {@code store} - * is a {@code 'dimension'} and will be cached in {@link CacheMode#REPLICATED} - * cache. - */ -public class DimStore { - /** Primary key. */ - @QuerySqlField(index = true) - private int id; - - /** Store name. */ - @QuerySqlField - private String name; - - /** Zip code. */ - private String zip; - - /** Address. */ - private String addr; - - /** - * Constructs a store instance. - * - * @param id Store ID. - * @param name Store name. - * @param zip Store zip code. - * @param addr Store address. - */ - public DimStore(int id, String name, String zip, String addr) { - this.id = id; - this.name = name; - this.zip = zip; - this.addr = addr; - } - - /** - * Gets store ID. - * - * @return Store ID. - */ - public int getId() { - return id; - } - - /** - * Gets store name. - * - * @return Store name. - */ - public String getName() { - return name; - } - - /** - * Gets store zip code. - * - * @return Store zip code. - */ - public String getZip() { - return zip; - } - - /** - * Gets store address. - * - * @return Store address. - */ - public String getAddress() { - return addr; - } - - /** {@inheritDoc} */ - @Override public String toString() { - return "DimStore [id=" + id + - ", name=" + name + - ", zip=" + zip + - ", addr=" + addr + ']'; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/be0e755b/examples/src/main/java/org/apache/ignite/examples/datagrid/starschema/FactPurchase.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/starschema/FactPurchase.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/starschema/FactPurchase.java deleted file mode 100644 index 7dc46c4..0000000 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/starschema/FactPurchase.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.examples.datagrid.starschema; - -import org.apache.ignite.cache.query.annotations.*; -import org.apache.ignite.cache.*; - -/** - * Represents a purchase record. In our {@code snowflake} schema purchase - * is a {@code 'fact'} and will be cached in larger {@link CacheMode#PARTITIONED} - * cache. - */ -public class FactPurchase { - /** Primary key. */ - @QuerySqlField(index = true) - private int id; - - /** Foreign key to store at which purchase occurred. */ - @QuerySqlField - private int storeId; - - /** Foreign key to purchased product. */ - @QuerySqlField - private int productId; - - /** Purchase price. */ - @QuerySqlField - private float purchasePrice; - - /** - * Constructs a purchase record. - * - * @param id Purchase ID. - * @param productId Purchased product ID. - * @param storeId Store ID. - * @param purchasePrice Purchase price. - */ - public FactPurchase(int id, int productId, int storeId, float purchasePrice) { - this.id = id; - this.productId = productId; - this.storeId = storeId; - this.purchasePrice = purchasePrice; - } - - /** - * Gets purchase ID. - * - * @return Purchase ID. - */ - public int getId() { - return id; - } - - /** - * Gets purchased product ID. - * - * @return Product ID. - */ - public int getProductId() { - return productId; - } - - /** - * Gets ID of store at which purchase was made. - * - * @return Store ID. - */ - public int getStoreId() { - return storeId; - } - - /** - * Gets purchase price. - * - * @return Purchase price. - */ - public float getPurchasePrice() { - return purchasePrice; - } - - /** {@inheritDoc} */ - @Override public String toString() { - return "FactPurchase [id=" + id + - ", productId=" + productId + - ", storeId=" + storeId + - ", purchasePrice=" + purchasePrice + ']'; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/be0e755b/examples/src/main/java/org/apache/ignite/examples/datagrid/starschema/package-info.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/starschema/package-info.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/starschema/package-info.java deleted file mode 100644 index 4db7d8c..0000000 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/starschema/package-info.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * <!-- Package description. --> - * Demonstrates distributed SQL joins over ignite using Snowflake schema. - */ -package org.apache.ignite.examples.datagrid.starschema; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/be0e755b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/CacheNodeWithStoreStartup.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/CacheNodeWithStoreStartup.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/CacheNodeWithStoreStartup.java deleted file mode 100644 index 0edf591..0000000 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/CacheNodeWithStoreStartup.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.examples.datagrid.store; - -import org.apache.ignite.*; -import org.apache.ignite.cache.*; -import org.apache.ignite.cache.store.*; -import org.apache.ignite.configuration.*; -import org.apache.ignite.examples.datagrid.store.dummy.*; -import org.apache.ignite.examples.datagrid.store.hibernate.*; -import org.apache.ignite.examples.datagrid.store.jdbc.*; -import org.apache.ignite.examples.datagrid.store.model.*; -import org.apache.ignite.internal.util.typedef.*; -import org.apache.ignite.spi.discovery.tcp.*; -import org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.*; -import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*; - -import javax.cache.configuration.*; -import java.sql.*; -import java.util.*; - -import static org.apache.ignite.cache.CacheAtomicityMode.*; - -/** - * Starts up an empty node with example cache and store configuration. - */ -public class CacheNodeWithStoreStartup { - /** Use org.apache.ignite.examples.datagrid.store.dummy.CacheDummyPersonStore to run example. */ - public static final String DUMMY = "DUMMY"; - - /** Use org.apache.ignite.examples.datagrid.store.jdbc.CacheJdbcPersonStore to run example. */ - public static final String SIMPLE_JDBC = "SIMPLE_JDBC"; - - /** Use org.apache.ignite.examples.datagrid.store.hibernate.CacheHibernatePersonStore to run example. */ - public static final String HIBERNATE = "HIBERNATE"; - - /** Use org.apache.ignite.examples.datagrid.store.jdbc.CacheJdbcPojoPersonStore to run example. */ - public static final String AUTO = "AUTO"; - - /** Store to use. */ - public static final String STORE = DUMMY; - - /** - * Start up an empty node with specified cache configuration. - * - * @param args Command line arguments, none required. - * @throws IgniteException If example execution failed. - */ - public static void main(String[] args) throws IgniteException { - Ignition.start(configure()); - } - - /** - * Configure ignite. - * - * @return Ignite configuration. - * @throws IgniteException If failed. - */ - public static IgniteConfiguration configure() throws IgniteException { - IgniteConfiguration cfg = new IgniteConfiguration(); - - cfg.setLocalHost("127.0.0.1"); - - // Discovery SPI. - TcpDiscoverySpi discoSpi = new TcpDiscoverySpi(); - - TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryMulticastIpFinder(); - - ipFinder.setAddresses(Arrays.asList("127.0.0.1:47500..47509")); - - discoSpi.setIpFinder(ipFinder); - - CacheConfiguration<Long, Person> cacheCfg = new CacheConfiguration<>(); - - // Set atomicity as transaction, since we are showing transactions in example. - cacheCfg.setAtomicityMode(TRANSACTIONAL); - - cacheCfg.setCacheStoreFactory(new Factory<CacheStore<? super Long, ? super Person>>() { - @Override public CacheStore<? super Long, ? super Person> create() { - CacheStore<Long, Person> store; - - switch (STORE) { - case DUMMY: - store = new CacheDummyPersonStore(); - break; - - case SIMPLE_JDBC: - store = new CacheJdbcPersonStore(); - break; - - case HIBERNATE: - store = new CacheHibernatePersonStore(); - break; - - default: - if (!STORE.equals(AUTO)) - throw new IllegalStateException("Unexpected store configured: " + STORE); - - store = new CacheJdbcPojoPersonStore(); - break; - } - - return store; - } - }); - - if (STORE.equals(AUTO)) - cacheCfg.setTypeMetadata(typeMetadata()); - - cacheCfg.setReadThrough(true); - cacheCfg.setWriteThrough(true); - - cfg.setDiscoverySpi(discoSpi); - cfg.setCacheConfiguration(cacheCfg); - - return cfg; - } - - /** - * @return Type mapping description. - */ - private static Collection<CacheTypeMetadata> typeMetadata() { - CacheTypeMetadata tm = new CacheTypeMetadata(); - - tm.setDatabaseTable("PERSON"); - - tm.setKeyType("java.lang.Long"); - tm.setValueType("org.apache.ignite.examples.datagrid.store.model.Person"); - - tm.setKeyFields(F.asList(new CacheTypeFieldMetadata("ID", Types.BIGINT, "id", Long.class))); - - tm.setValueFields(F.asList( - new CacheTypeFieldMetadata("ID", Types.BIGINT, "id", long.class), - new CacheTypeFieldMetadata("FIRST_NAME", Types.VARCHAR, "firstName", String.class), - new CacheTypeFieldMetadata("LAST_NAME", Types.VARCHAR, "lastName", String.class) - )); - - return F.asList(tm); - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/be0e755b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/CacheStoreExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/CacheStoreExample.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/CacheStoreExample.java deleted file mode 100644 index 051d5fc..0000000 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/CacheStoreExample.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.examples.datagrid.store; - -import org.apache.ignite.*; -import org.apache.ignite.configuration.*; -import org.apache.ignite.examples.datagrid.store.model.*; -import org.apache.ignite.transactions.*; - -import java.util.*; - -import static org.apache.ignite.examples.datagrid.store.CacheNodeWithStoreStartup.*; - -/** - * Demonstrates usage of cache with underlying persistent store configured. - * <p> - * Remote nodes should always be started using {@link CacheNodeWithStoreStartup}. - * Also you can change type of underlying store modifying configuration in the - * {@link CacheNodeWithStoreStartup#configure()} method. - */ -public class CacheStoreExample { - /** Global person ID to use across entire example. */ - private static final Long id = Math.abs(UUID.randomUUID().getLeastSignificantBits()); - - /** - * Executes example. - * - * @param args Command line arguments, none required. - * @throws IgniteException If example execution failed. - */ - public static void main(String[] args) throws IgniteException { - IgniteConfiguration cfg = CacheNodeWithStoreStartup.configure(); - - // To start ignite with desired configuration uncomment the appropriate line. - try (Ignite ignite = Ignition.start(cfg)) { - System.out.println(); - System.out.println(">>> Cache store example started."); - System.out.println(">>> Store: " + STORE); - - IgniteCache<Long, Person> cache = ignite.jcache(null); - - // Clean up caches on all nodes before run. - cache.clear(); - - try (Transaction tx = ignite.transactions().txStart()) { - Person val = cache.get(id); - - System.out.println("Read value: " + val); - - val = cache.getAndPut(id, person(id, "Isaac", "Newton")); - - System.out.println("Overwrote old value: " + val); - - val = cache.get(id); - - System.out.println("Read value: " + val); - - tx.commit(); - } - - System.out.println("Read value after commit: " + cache.get(id)); - - // If example run with CacheJdbcPojoStore. - // Example of CacheJdbcPojoStore special features. - if (STORE.equals(AUTO)) { - System.out.println(">>> Example of CacheJdbcPojoStore special feature: load from DB with custom SQL."); - - cache.clear(); - - System.out.println("Cache size: " + cache.size()); - - // Load values from DB into store with custom SQL. - cache.loadCache(null, "java.lang.Long", "select * from PERSON where id = 2"); - - System.out.println("Cache size: " + cache.size()); - System.out.println("Person: " + cache.get(2L)); - } - } - } - - /** - * Creates person. - * - * @param id ID. - * @param firstName First name. - * @param lastName Last name. - * @return Newly created person. - */ - private static Person person(long id, String firstName, String lastName) { - return new Person(id, firstName, lastName); - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/be0e755b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/CacheStoreLoadDataExample.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/CacheStoreLoadDataExample.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/CacheStoreLoadDataExample.java deleted file mode 100644 index 4a0cf2b..0000000 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/CacheStoreLoadDataExample.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.examples.datagrid.store; - -import org.apache.ignite.*; -import org.apache.ignite.examples.*; -import org.apache.ignite.lang.*; - -/** - * Loads data on all cache nodes from persistent store at cache startup by calling - * {@link IgniteCache#loadCache(IgniteBiPredicate, Object...)} method. - * <p> - * Remote nodes should always be started using {@link CacheNodeWithStoreStartup}. - * Also you can change type of underlying store modifying configuration in the - * {@link CacheNodeWithStoreStartup#configure()} method. - */ -public class CacheStoreLoadDataExample { - /** Heap size required to run this example. */ - public static final int MIN_MEMORY = 1024 * 1024 * 1024; - - /** Number of entries to load. */ - private static final int ENTRY_COUNT = 100_000; - - /** - * Executes example. - * - * @param args Command line arguments, none required. - * @throws IgniteException If example execution failed. - */ - public static void main(String[] args) throws IgniteException { - ExamplesUtils.checkMinMemory(MIN_MEMORY); - - try (Ignite ignite = Ignition.start(CacheNodeWithStoreStartup.configure())) { - System.out.println(); - System.out.println(">>> Cache store load data example started."); - - final IgniteCache<String, Integer> cache = ignite.jcache(null); - - // Clean up caches on all nodes before run. - cache.clear(); - - long start = System.currentTimeMillis(); - - // Start loading cache from persistent store on all caching nodes. - cache.loadCache(null, ENTRY_COUNT); - - long end = System.currentTimeMillis(); - - System.out.println(">>> Loaded " + cache.size() + " keys with backups in " + (end - start) + "ms."); - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/be0e755b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/dummy/CacheDummyPersonStore.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/dummy/CacheDummyPersonStore.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/dummy/CacheDummyPersonStore.java deleted file mode 100644 index 7b04528..0000000 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/dummy/CacheDummyPersonStore.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.examples.datagrid.store.dummy; - -import org.apache.ignite.*; -import org.apache.ignite.cache.store.*; -import org.apache.ignite.examples.datagrid.store.model.*; -import org.apache.ignite.lang.*; -import org.apache.ignite.resources.*; -import org.apache.ignite.transactions.*; -import org.jetbrains.annotations.*; - -import java.util.*; -import java.util.concurrent.*; - -/** - * Dummy cache store implementation. - */ -public class CacheDummyPersonStore extends CacheStoreAdapter<Long, Person> { - /** Auto-inject ignite instance. */ - @IgniteInstanceResource - private Ignite ignite; - - /** Auto-inject cache name. */ - @CacheNameResource - private String cacheName; - - /** */ - @CacheStoreSessionResource - private CacheStoreSession ses; - - /** Dummy database. */ - private Map<Long, Person> dummyDB = new ConcurrentHashMap<>(); - - /** {@inheritDoc} */ - @Override public Person load(Long key) { - Transaction tx = transaction(); - - System.out.println(">>> Store load [key=" + key + ", xid=" + (tx == null ? null : tx.xid()) + ']'); - - return dummyDB.get(key); - } - - /** {@inheritDoc} */ - @Override public void write(javax.cache.Cache.Entry<? extends Long, ? extends Person> entry) { - Transaction tx = transaction(); - - Long key = entry.getKey(); - Person val = entry.getValue(); - - System.out.println(">>> Store put [key=" + key + ", val=" + val + ", xid=" + (tx == null ? null : tx.xid()) + ']'); - - dummyDB.put(key, val); - } - - /** {@inheritDoc} */ - @Override public void delete(Object key) { - Transaction tx = transaction(); - - System.out.println(">>> Store remove [key=" + key + ", xid=" + (tx == null ? null : tx.xid()) + ']'); - - dummyDB.remove(key); - } - - /** {@inheritDoc} */ - @Override public void loadCache(IgniteBiInClosure<Long, Person> clo, Object... args) { - int cnt = (Integer)args[0]; - - System.out.println(">>> Store loadCache for entry count: " + cnt); - - for (int i = 0; i < cnt; i++) { - // Generate dummy person on the fly. - Person p = new Person(i, "first-" + i, "last-" + 1); - - // Ignite will automatically discard entries that don't belong on this node, - // but we check if local node is primary or backup anyway just to demonstrate that we can. - // Ideally, partition ID of a key would be stored in the database and only keys - // for partitions that belong on this node would be loaded from database. - if (ignite.affinity(cacheName).isPrimaryOrBackup(ignite.cluster().localNode(), p.getId())) { - // Update dummy database. - // In real life data would be loaded from database. - dummyDB.put(p.getId(), p); - - // Pass data to cache. - clo.apply(p.getId(), p); - } - } - } - - /** - * @return Current transaction. - */ - @Nullable private Transaction transaction() { - CacheStoreSession ses = session(); - - return ses != null ? ses.transaction() : null; - } - - /** - * @return Store session. - */ - private CacheStoreSession session() { - return ses; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/be0e755b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/dummy/package-info.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/dummy/package-info.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/dummy/package-info.java deleted file mode 100644 index 42c3899..0000000 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/dummy/package-info.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * <!-- Package description. --> - * Contains dummy cache store implementation. - */ -package org.apache.ignite.examples.datagrid.store.dummy; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/be0e755b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/hibernate/CacheHibernatePersonStore.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/hibernate/CacheHibernatePersonStore.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/hibernate/CacheHibernatePersonStore.java deleted file mode 100644 index 05ce68d..0000000 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/hibernate/CacheHibernatePersonStore.java +++ /dev/null @@ -1,290 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.examples.datagrid.store.hibernate; - -import org.apache.ignite.cache.store.*; -import org.apache.ignite.examples.datagrid.store.model.*; -import org.apache.ignite.lang.*; -import org.apache.ignite.resources.*; -import org.apache.ignite.transactions.Transaction; -import org.hibernate.*; -import org.hibernate.cfg.*; -import org.jetbrains.annotations.*; - -import javax.cache.integration.*; -import java.util.*; - -/** - * Example of {@link CacheStore} implementation that uses Hibernate - * and deals with maps {@link UUID} to {@link Person}. - */ -public class CacheHibernatePersonStore extends CacheStoreAdapter<Long, Person> { - /** Default hibernate configuration resource path. */ - private static final String DFLT_HIBERNATE_CFG = "/org/apache/ignite/examples/datagrid/store/hibernate/hibernate.cfg.xml"; - - /** Session attribute name. */ - private static final String ATTR_SES = "HIBERNATE_STORE_SESSION"; - - /** Session factory. */ - private SessionFactory sesFactory; - - /** Auto-injected store session. */ - @CacheStoreSessionResource - private CacheStoreSession ses; - - /** - * Default constructor. - */ - public CacheHibernatePersonStore() { - sesFactory = new Configuration().configure(DFLT_HIBERNATE_CFG).buildSessionFactory(); - } - - /** {@inheritDoc} */ - @Override public Person load(Long key) { - Transaction tx = transaction(); - - System.out.println(">>> Store load [key=" + key + ", xid=" + (tx == null ? null : tx.xid()) + ']'); - - Session ses = session(tx); - - try { - return (Person) ses.get(Person.class, key); - } - catch (HibernateException e) { - rollback(ses, tx); - - throw new CacheLoaderException("Failed to load value from cache store with key: " + key, e); - } - finally { - end(ses, tx); - } - } - - /** {@inheritDoc} */ - @Override public void write(javax.cache.Cache.Entry<? extends Long, ? extends Person> entry) { - Transaction tx = transaction(); - - Long key = entry.getKey(); - - Person val = entry.getValue(); - - System.out.println(">>> Store put [key=" + key + ", val=" + val + ", xid=" + (tx == null ? null : tx.xid()) + ']'); - - if (val == null) { - delete(key); - - return; - } - - Session ses = session(tx); - - try { - ses.saveOrUpdate(val); - } - catch (HibernateException e) { - rollback(ses, tx); - - throw new CacheWriterException("Failed to put value to cache store [key=" + key + ", val" + val + "]", e); - } - finally { - end(ses, tx); - } - } - - /** {@inheritDoc} */ - @SuppressWarnings({"JpaQueryApiInspection"}) - @Override public void delete(Object key) { - Transaction tx = transaction(); - - System.out.println(">>> Store remove [key=" + key + ", xid=" + (tx == null ? null : tx.xid()) + ']'); - - Session ses = session(tx); - - try { - ses.createQuery("delete " + Person.class.getSimpleName() + " where key = :key") - .setParameter("key", key).setFlushMode(FlushMode.ALWAYS).executeUpdate(); - } - catch (HibernateException e) { - rollback(ses, tx); - - throw new CacheWriterException("Failed to remove value from cache store with key: " + key, e); - } - finally { - end(ses, tx); - } - } - - /** {@inheritDoc} */ - @Override public void loadCache(IgniteBiInClosure<Long, Person> clo, Object... args) { - if (args == null || args.length == 0 || args[0] == null) - throw new CacheLoaderException("Expected entry count parameter is not provided."); - - final int entryCnt = (Integer)args[0]; - - Session ses = session(null); - - try { - int cnt = 0; - - List res = ses.createCriteria(Person.class).list(); - - if (res != null) { - Iterator iter = res.iterator(); - - while (cnt < entryCnt && iter.hasNext()) { - Person person = (Person)iter.next(); - - clo.apply(person.getId(), person); - - cnt++; - } - } - - System.out.println(">>> Loaded " + cnt + " values into cache."); - } - catch (HibernateException e) { - throw new CacheLoaderException("Failed to load values from cache store.", e); - } - finally { - end(ses, null); - } - } - - /** - * Rolls back hibernate session. - * - * @param ses Hibernate session. - * @param tx Cache ongoing transaction. - */ - private void rollback(Session ses, Transaction tx) { - // Rollback only if there is no cache transaction, - // otherwise txEnd() will do all required work. - if (tx == null) { - org.hibernate.Transaction hTx = ses.getTransaction(); - - if (hTx != null && hTx.isActive()) - hTx.rollback(); - } - } - - /** - * Ends hibernate session. - * - * @param ses Hibernate session. - * @param tx Cache ongoing transaction. - */ - private void end(Session ses, @Nullable Transaction tx) { - // Commit only if there is no cache transaction, - // otherwise txEnd() will do all required work. - if (tx == null) { - org.hibernate.Transaction hTx = ses.getTransaction(); - - if (hTx != null && hTx.isActive()) - hTx.commit(); - - ses.close(); - } - } - - /** {@inheritDoc} */ - @Override public void txEnd(boolean commit) { - CacheStoreSession storeSes = session(); - - Transaction tx = storeSes.transaction(); - - Map<String, Session> props = storeSes.properties(); - - Session ses = props.remove(ATTR_SES); - - if (ses != null) { - org.hibernate.Transaction hTx = ses.getTransaction(); - - if (hTx != null) { - try { - if (commit) { - ses.flush(); - - hTx.commit(); - } - else - hTx.rollback(); - - System.out.println("Transaction ended [xid=" + tx.xid() + ", commit=" + commit + ']'); - } - catch (HibernateException e) { - throw new CacheWriterException("Failed to end transaction [xid=" + tx.xid() + - ", commit=" + commit + ']', e); - } - finally { - ses.close(); - } - } - } - } - - /** - * Gets Hibernate session. - * - * @param tx Cache transaction. - * @return Session. - */ - private Session session(@Nullable Transaction tx) { - Session ses; - - if (tx != null) { - Map<String, Session> props = session().properties(); - - ses = props.get(ATTR_SES); - - if (ses == null) { - ses = sesFactory.openSession(); - - ses.beginTransaction(); - - // Store session in session properties, so it can be accessed - // for other operations on the same transaction. - props.put(ATTR_SES, ses); - - System.out.println("Hibernate session open [ses=" + ses + ", tx=" + tx.xid() + "]"); - } - } - else { - ses = sesFactory.openSession(); - - ses.beginTransaction(); - } - - return ses; - } - - /** - * @return Current transaction. - */ - @Nullable private Transaction transaction() { - CacheStoreSession ses = session(); - - return ses != null ? ses.transaction() : null; - } - - /** - * @return Store session. - */ - private CacheStoreSession session() { - return ses; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/be0e755b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/hibernate/Person.hbm.xml ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/hibernate/Person.hbm.xml b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/hibernate/Person.hbm.xml deleted file mode 100644 index 7474d77..0000000 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/hibernate/Person.hbm.xml +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<!-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> - - -<!DOCTYPE hibernate-mapping PUBLIC - "-//Hibernate/Hibernate Mapping DTD 3.0//EN" - "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> - -<hibernate-mapping default-access="field"> - <class name="org.apache.ignite.examples.datagrid.store.model.Person" table="PERSONS"> - <!-- ID. --> - <id name="id"/> - - <!-- We only map data we are interested in. --> - <property name="firstName"/> - <property name="lastName"/> - </class> -</hibernate-mapping> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/be0e755b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/hibernate/hibernate.cfg.xml ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/hibernate/hibernate.cfg.xml b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/hibernate/hibernate.cfg.xml deleted file mode 100644 index 80a43e7..0000000 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/hibernate/hibernate.cfg.xml +++ /dev/null @@ -1,41 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> - -<!DOCTYPE hibernate-configuration PUBLIC - "-//Hibernate/Hibernate Configuration DTD 3.0//EN" - "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> - -<!-- - Hibernate configuration. ---> -<hibernate-configuration> - <session-factory> - <!-- Database connection settings (private in-memory database). --> - <property name="connection.url">jdbc:h2:mem:example;DB_CLOSE_DELAY=-1</property> - - <!-- Only validate the database schema on startup in production mode. --> - <property name="hbm2ddl.auto">update</property> - - <!-- Do not output SQL. --> - <property name="show_sql">false</property> - - <!-- Mappings. --> - <mapping resource="org/apache/ignite/examples/datagrid/store/hibernate/Person.hbm.xml"/> - </session-factory> -</hibernate-configuration> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/be0e755b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/hibernate/package-info.java ---------------------------------------------------------------------- diff --git a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/hibernate/package-info.java b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/hibernate/package-info.java deleted file mode 100644 index 7a6d6de..0000000 --- a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/hibernate/package-info.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * <!-- Package description. --> - * Contains Hibernate-based cache store implementation. - */ -package org.apache.ignite.examples.datagrid.store.hibernate; \ No newline at end of file