Like GemFire 7 , GemFireXD now includes Pulse. GemFire XD Pulse
is a Web Application that provides a graphical dashboard for monitoring
vital, real-time health and performance of GemFire XD clusters,
members, and tables.
Use Pulse
to examine total memory, CPU, and disk space used by members, uptime
statistics, client connections, WAN connections, query statistics, and
critical notifications. Pulse
communicates with a GemFire XD JMX manager to provide a complete view
of your GemFire XD deployment. You can drill down from a high-level
cluster view to examine individual members and tables within a member.
By default, GemFire XD Pulse runs in a Tomcat server container that is embedded in a GemFire XD JMX manager node which you can enable by starting your locator as follows.
sqlf locator start -peer-discovery-address=localhost -peer-discovery-port=41111 -jmx-manager-start=true -jmx-manager-http-port=7075 -conserve-sockets=false -client-bind-address=localhost -client-port=1527 -dir=locator -sync=false
Then you just need to start a browser, point to http://locator-ip:7075/pulse and login as "admin/admin".
Screen Shot Below.
Search This Blog
Friday, 20 December 2013
Thursday, 19 December 2013
User Defined Types (UTS's) in Pivotal GemFireXD
The CREATE TYPE statement creates a user-defined type (UDT). A UDT is
a serializable Java class whose instances are stored in columns. The class must
implement the
java.io.Serializable interface. In this example below we create a TYPE with just one string property to highlight how it's done and then how we can create a FUNCTION to allow us to insert the TYPE using sqlf command line.
1. Create 2 Java classes as shown below. One is our UDT class while the other is used to create an instance of it and expose it as a FUNCTION
SqlfireString.java
SqlfireStringFactory.java
2. Create TYPE as shown below
3. Create FUNCTION to enable us to use TYPE
4. Create TABLE using TYPE and insert data
Note: When using JDBC you would use a PreparedStatement and setObject method to add the TYPE column as shown below.
More Information
http://gemfirexd-05.run.pivotal.io/index.jsp?topic=/com.pivotal.gemfirexd.0.5/reference/language_ref/rrefsqljcreatetype.html
1. Create 2 Java classes as shown below. One is our UDT class while the other is used to create an instance of it and expose it as a FUNCTION
SqlfireString.java
package pas.au.apples.sqlfire.types; public class SqlfireString implements java.io.Serializable { public String value; public SqlfireString() { } public SqlfireString(String value) { this.value = value; } @Override public String toString() { return value; } }
SqlfireStringFactory.java
package pas.au.apples.sqlfire.types; public class SqlfireStringFactory { public static SqlfireString newInstance (String s) { return new SqlfireString(s); } }
2. Create TYPE as shown below
CREATE TYPE LARGE_STRING EXTERNAL NAME 'pas.au.apples.sqlfire.types.SqlfireString' LANGUAGE JAVA;
3. Create FUNCTION to enable us to use TYPE
CREATE FUNCTION udt_large_string(VARCHAR(32672)) RETURNS LARGE_STRING LANGUAGE JAVA PARAMETER STYLE JAVA NO SQL EXTERNAL NAME 'pas.au.apples.sqlfire.types.SqlfireStringFactory.newInstance';
4. Create TABLE using TYPE and insert data
create table udt_table (id int, text LARGE_STRING); insert into udt_table values (1, udt_large_string('pas'));
Note: When using JDBC you would use a PreparedStatement and setObject method to add the TYPE column as shown below.
SqlfireString udtLargeString = new SqlfireString("pas"); pstmt.setObject(1, udtLargeString);
More Information
http://gemfirexd-05.run.pivotal.io/index.jsp?topic=/com.pivotal.gemfirexd.0.5/reference/language_ref/rrefsqljcreatetype.html
Saturday, 7 December 2013
Spring HikariCP with Pivotal GemFireXD
Previously I blogged about using the HikariCP with Pivotal GemFireXD as per the post below.
http://theblasfrompas.blogspot.com.au/2013/12/hikaricp-connection-pool-with-pivotal.html
In this example I show how you would use this Connection Pool with Spring.
1. Ensure your using version 1.2.1 of HikariCP as it provides the setDataSourceProperties() setter to HikariConfig to allow easier configuration though Spring. Example below is for Maven.
2. Create a spring configuration XML file as shown below.
3. Create a datasource.properties as shown below.
portNumber=1527
serverName=192.168.1.6
user=app
password=app
4. Finally access with code as follows
ApplicationContextHolder.java
Accessing as follows
http://theblasfrompas.blogspot.com.au/2013/12/hikaricp-connection-pool-with-pivotal.html
In this example I show how you would use this Connection Pool with Spring.
1. Ensure your using version 1.2.1 of HikariCP as it provides the setDataSourceProperties() setter to HikariConfig to allow easier configuration though Spring. Example below is for Maven.
<dependencies> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>1.2.1</version> <scope>compile</scope> </dependency>
2. Create a spring configuration XML file as shown below.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd"> <bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig"> <property name="maximumPoolSize" value="10" /> <property name="minimumPoolSize" value="2" /> <property name="dataSourceClassName" value="com.vmware.sqlfire.internal.jdbc.ClientDataSource" /> <property name="dataSourceProperties" ref="props" /> <property name="poolName" value="springHikariCP" /> </bean> <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"> <constructor-arg ref="hikariConfig" /> </bean> <util:properties id="props" location="classpath:datasource.properties"/> </beans>
3. Create a datasource.properties as shown below.
portNumber=1527
serverName=192.168.1.6
user=app
password=app
4. Finally access with code as follows
ApplicationContextHolder.java
package pivotal.au.gemfirexd.demos.connectionpool.spring; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class ApplicationContextHolder { private static ClassPathXmlApplicationContext applicationContext; public static ClassPathXmlApplicationContext getInstance() { if(applicationContext == null) { applicationContext = new ClassPathXmlApplicationContext("classpath:application-context.xml"); } return applicationContext; } public static ApplicationContext getInstance(String contextLocation) { if(applicationContext == null) { applicationContext = new ClassPathXmlApplicationContext(contextLocation); } return applicationContext; } }
Accessing as follows
package pivotal.au.gemfirexd.demos.connectionpool.spring; import com.zaxxer.hikari.HikariDataSource; import org.springframework.context.ApplicationContext; import java.sql.Connection; import java.sql.SQLException; import java.util.logging.Level; import java.util.logging.Logger; import java.sql.*; public class TestHikariCPSpring { private ApplicationContext context; private Logger logger = Logger.getLogger(this.getClass().getSimpleName()); public void run() throws SQLException { context = getContext(); HikariDataSource ds = (HikariDataSource) context.getBean("dataSource"); Connection conn = ds.getConnection(); .....
Thursday, 5 December 2013
HikariCP (Connection Pool) with Pivotal GemFireXD
I decided to try out the HikariCP as per the link below it says it's the fastest Connection Pool and the most lightweight. It probably is so I thought I would set it up for GemFireXD.
Quote: There is nothing faster.1 There is nothing more correct. HikariCP is a "zero-overhead" production-quality connection pool. Coming in at roughly 50Kb, the library is extremely light.
https://github.com/brettwooldridge/HikariCP
Example Below.
1. Create a Pool class as follows
3. Run Test class and verify output as follows
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Dept[10, ACCOUNTING, NEW YORK]
Dept[20, RESEARCH, DALLAS]
Dept[30, SALES, CHICAGO]
Dept[40, OPERATIONS, BRISBANE]
Dept[50, MARKETING, ADELAIDE]
Dept[60, DEV, PERTH]
Dept[70, SUPPORT, SYDNEY]
Quote: There is nothing faster.1 There is nothing more correct. HikariCP is a "zero-overhead" production-quality connection pool. Coming in at roughly 50Kb, the library is extremely light.
https://github.com/brettwooldridge/HikariCP
Example Below.
1. Create a Pool class as follows
package pivotal.au.gemfirexd.demos.connectionpool; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import java.sql.Connection; import java.sql.SQLException; public class HikariGFXDPool { private static HikariGFXDPool instance = null; private HikariDataSource ds = null; static { try { instance = new HikariGFXDPool(); } catch (Exception e) { throw new RuntimeException(e.getMessage(), e); } } private HikariGFXDPool() { HikariConfig config = new HikariConfig(); config.setMaximumPoolSize(10); config.setMinimumPoolSize(2); config.setDataSourceClassName("com.vmware.sqlfire.internal.jdbc.ClientDataSource"); config.addDataSourceProperty("portNumber", 1527); config.addDataSourceProperty("serverName", "192.168.1.6"); config.addDataSourceProperty("user", "app"); config.addDataSourceProperty("password", "app"); ds = new HikariDataSource(config); } public static HikariGFXDPool getInstance () { return instance; } public Connection getConnection() throws SQLException { return ds.getConnection(); } }2. Create a Test Class as follows
package pivotal.au.gemfirexd.demos.connectionpool; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.logging.Level; import java.util.logging.Logger; public class TestPool { private Logger logger = Logger.getLogger(this.getClass().getSimpleName()); public void run () throws SQLException { Statement stmt = null; ResultSet rset = null; Connection conn = null; HikariGFXDPool pool = HikariGFXDPool.getInstance(); try { conn = pool.getConnection(); stmt = conn.createStatement(); rset = stmt.executeQuery("select * from dept order by 1"); while (rset.next()) { System.out.println(String.format("Dept[%s, %s, %s]", rset.getInt(1), rset.getString(2), rset.getString(3))); } } catch (SQLException se) { logger.log(Level.SEVERE, se.getMessage()); } finally { if (stmt != null) { stmt.close(); } if (rset != null) { rset.close(); } if (conn != null) { conn.close(); } } } public static void main(String[] args) throws SQLException { TestPool test = new TestPool(); test.run(); } }
3. Run Test class and verify output as follows
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Dept[10, ACCOUNTING, NEW YORK]
Dept[20, RESEARCH, DALLAS]
Dept[30, SALES, CHICAGO]
Dept[40, OPERATIONS, BRISBANE]
Dept[50, MARKETING, ADELAIDE]
Dept[60, DEV, PERTH]
Dept[70, SUPPORT, SYDNEY]
Subscribe to:
Posts (Atom)