CiklumJavaSat_15112011:Alex Kruk VMForce

35
WELCOME!

Transcript of CiklumJavaSat_15112011:Alex Kruk VMForce

Page 1: CiklumJavaSat_15112011:Alex Kruk VMForce

WELCOME!

Page 2: CiklumJavaSat_15112011:Alex Kruk VMForce

Introduction in VMForce

by Alex KrukSkype: alexandrkrukEmail: [email protected]

Page 3: CiklumJavaSat_15112011:Alex Kruk VMForce

PARX – Zurich

Page 4: CiklumJavaSat_15112011:Alex Kruk VMForce

PARX – ABOUT US

Leading Google Enterprise and Salesforce.com consulting partner in German-speaking Europe

• comprehensive Cloud Computing Services from a single source

• services across the entire value chain: consulting, conception, specifications, development, implementation, training, support, project management

• offices in Zurich, Munich, Dusseldorf and Vienna

• founded in 1998

Page 5: CiklumJavaSat_15112011:Alex Kruk VMForce

PARX – ABOUT US

Strategic alliances

• Google Enterprise Partner

• Salesforce.com Consultuing Partner

• Amazon Web Services, Box.net, GoodData & Signavio

• PARX was among the first salesforce.com, Google Enterprise, and Amazon Web Services partners in Europe

Page 6: CiklumJavaSat_15112011:Alex Kruk VMForce

PARX – PORTFOLIO

Page 7: CiklumJavaSat_15112011:Alex Kruk VMForce

PROGRESS... JOIN US

1960sMainframe

1980sOn-PremiseClient/server

TodayEnterprise Cloud

Computing

Page 8: CiklumJavaSat_15112011:Alex Kruk VMForce

THE CLOUD COMPUTING MODEL

Multi-tenant

Automatic Upgrades

Pay-as-you-go

Real-time

5x Faster

Page 9: CiklumJavaSat_15112011:Alex Kruk VMForce

SALESFORCE.COM

Page 10: CiklumJavaSat_15112011:Alex Kruk VMForce

FORCE.COM - PAAS

Page 11: CiklumJavaSat_15112011:Alex Kruk VMForce

FORCE.COM COMPONENTS

Page 12: CiklumJavaSat_15112011:Alex Kruk VMForce

VMFORCE IS COMING?

Page 13: CiklumJavaSat_15112011:Alex Kruk VMForce

DATABASE.COM SDK

• Use Database.com to store your application data

• Interact with data already written to Database.com

• Leverage the Database.com user security model to manage data access for your application

• Extend existing Force.com applications with Java logic

Page 14: CiklumJavaSat_15112011:Alex Kruk VMForce

DATABASE.COM SDK COMPONENTS

• API Connector

• JPA Provider

• OAuth Authentication and Authorization

• Spring Security Plugin

• Spring MVC Project Template

• Code Generation Plugin

Page 15: CiklumJavaSat_15112011:Alex Kruk VMForce

JPA PROVIDER

• Implements a subset of the JPA 2.0 specification

• Based on DataNucleus platform

• Supports most of DN annotations + some custom.

• Supports additional functionality (SOQL, etc.)

• Based on Web Services API and Metadata API

Page 16: CiklumJavaSat_15112011:Alex Kruk VMForce

API CONNECTOR

<persistence-unit name="forceDatabase"> <provider>com.force.sdk.jpa.PersistenceProviderImpl</provider> <properties> <property name="datanucleus.storeManagerType" value="force" /> <property name="datanucleus.connectionURL" value="${CONN_URL}" /> <property name="datanucleus.autoCreateSchema" value="true" /> <property name="datanucleus.validateTables" value="false" /> <property name="datanucleus.validateConstraints" value="false" /> <property name="datanucleus.Optimistic" value="false" /> <property name="datanucleus.datastoreTransactionDelayOperations" value="true" /> <property name="datanucleus.jpa.addClassTransformer" value="false" /> <property name="datanucleus.cache.level2.type" value="none" /> <property name="datanucleus.detachAllOnCommit" value="true" /> <property name="datanucleus.copyOnAttach" value="false" /> </properties> </persistence-unit>

Page 17: CiklumJavaSat_15112011:Alex Kruk VMForce

JPA PROVIDER

• Data types. Standard + custom (Phone, URL, etc.)

• Primary Keys. String, GenerationType.IDENTITY, non-composit.

• Relationships. @ManyToOne and @OneToMany

• Standard/Custom annotations

• Transactions

• Queries

• Limits

Page 18: CiklumJavaSat_15112011:Alex Kruk VMForce

STANDARD/CUSTOM ANNOTATIONS

• Standard JPA annotations

• Custom JPA annotations

• @CustomObject (enableFeeds, readOnlySchema )

• @CustomField (childRelationshipName, description,

label, precision, scale, type, etc…)

• @PicklistValue

• @JoinFilter (alias="w", value="w.name LIKE 'Chateau

%'")

Page 19: CiklumJavaSat_15112011:Alex Kruk VMForce

CREATING, UPDATING, AND DELETING DATA

EntityManagerFactory factory = Persistence.createEntityManagerFactory(persistenceUnitName);EntityManager em = factory.createEntityManager();

Albom anAlbom = new Albom();anAlbom.setName("ABC");

EntityTransaction tx = em.getTransaction();tx.begin();em.persist(anAlbom);tx.commit();

Page 20: CiklumJavaSat_15112011:Alex Kruk VMForce

QUERYING WITH JPQL

EntityManagerFactory aFactory = Persistence.createEntityManagerFactory(persistenceUnitName);EntityManager em = aFactory.createEntityManager();

String aQuerySt = "SELECT acc FROM Account acc WHERE u.Name = :fName";

Query aQuery = em.createQuery(aQuerySt);aQuery.setParameter("fName", "noname");

List<Account> results = (List) aQuery .getResultList();

Page 21: CiklumJavaSat_15112011:Alex Kruk VMForce

QUERYING WITH JPQL

• Bulk Delete and Queries

• JPQL Date (Temporal) Functions

• JPQL Joins• Implicit Joins• Explicit Joins (SELECT p FROM Parent p JOIN p.childs c WHERE c.name =

‘examp’)• IN Joins (SELECT p FROM Parent p IN (o.childs) c WHERE c.name = 'sample1')• Semi-Joins and Anti-Joins • Child-Map Joins• Relationship Joins (SELECT c FROM Child c WHERE c.Parent.name in

('Parent1', 'Parent2'))• MEMBER OF Comparison Operator

Page 22: CiklumJavaSat_15112011:Alex Kruk VMForce

QUERYING WITH SOQL

Returning SObject Records

String aQS = "SELECT Email, Phone FROM Account WHERE Name = ‘Apple'";Query aQ = em.createNativeQuery(soqlQuery);List<SObject> results = q.getResultList();

Query aQuery = em.createNativeQuery(soqlQuery, User.class);List<User> results = aQuery.getResultList();

String aQS = "SELECT id, name, (SELECT id, Name FROM Parent_Childs__r)” + + “FROM Parent__c";

Query aQuery = em.createNativeQuery(aQS, Parent.class);List<SObject> results = aQuery.getResultList();ArrayList<ChildEntity> childs = (ArrayList<Child>) results.get(0).getChilds();

Returning Typed-Object Records

Relationship Queries

Page 23: CiklumJavaSat_15112011:Alex Kruk VMForce

OAUTH AUTHENTICATION

<filter> <filter-name>AuthFilter</filter-name> <filter-class>com.force.sdk.oauth.AuthFilter</filter-class> <init-param> <param-name>url</param-name> <param-value>URL or a ${Java system property} or ${environment variable}</param-value> </init-param></filter><filter-mapping> <filter-name>AuthFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping>

Page 24: CiklumJavaSat_15112011:Alex Kruk VMForce

OAUTH AUTHENTICATION

• Filter parameters• securityContextStorageMethod• secure-key-file• storeUsername• logoutFromDatabaseDotCom• logoutUrl

• Spring Security Support

Page 25: CiklumJavaSat_15112011:Alex Kruk VMForce

OTHER

• Limits (DBDC, Force.com, SDK)

• Native connections

• Retrieving User Data

• Spring MVC Project Template

• Code Generation Plugin

Page 26: CiklumJavaSat_15112011:Alex Kruk VMForce

BYE-BYE LAPTOP

Page 27: CiklumJavaSat_15112011:Alex Kruk VMForce

HELLO WORLD

• Maven 3.0

• Get Force.com/Database.com instance.

• Open API access to user, get security token

• mvn archetype:generate -DarchetypeGroupId=com.force.sdk

-DarchetypeArtifactId=springmvc-archetype

• FORCE_FORCEDATABASE_URL=force://[email protected]^&password=mypassAndSS

• mvn tomcat:run-war

Page 28: CiklumJavaSat_15112011:Alex Kruk VMForce

HELLO WORLD

• Add oAuth

• Add Entities files.

• Use Code Generation Plugin

• Perform SOQL/JPQL queries.

• Add/modify data using Transactions

Page 29: CiklumJavaSat_15112011:Alex Kruk VMForce

• Founded in 2008,

• Initially PaaS for Ruby.

• Now supports Ruby, Node.js, Clojure, Python, and Scala.

• Since September 2011 supports Java.

Page 30: CiklumJavaSat_15112011:Alex Kruk VMForce

WHAT DO WE NEED?

• Maven 3.0

• JDK 1.6+

• Heroku account

• Installed Heroku env. (inc. Git, Foreman)

• Java application built on Maven.

Page 31: CiklumJavaSat_15112011:Alex Kruk VMForce

NEXT STEP

• Configure application using pom.xml

• Configure Procfile to declare how you want your application executed• web: java $JAVA_OPTS -jar target/dependency/jetty-runner.jar --port $PORT

target/*.war

• Run locally. “foreman start”

• “git add .”

• git commit -m “Are you sure???“

• heroku create --stack cedar

• git push heroku master

Page 32: CiklumJavaSat_15112011:Alex Kruk VMForce

HEROKU IS AWESOME

• Built-for-Deployment Applications

• Version Control is the Central Distribution Mechanism.

• No Need to Externalize Configuration From Your Code

• Deployment is a Highly Automated Pipeline Process

• How do Applications use JEE APIs Without a Container?• Servlets and JSPs by Tomcat or Jetty.• JSF and other rendering frameworks by Mojarra or MyFaces• Mail services by SendGrid.• JDBC to connect to Heroku Postgres service or Amazon RDS• Hibernate or DataNucleus JPA to provide an ORM persistence 

Page 33: CiklumJavaSat_15112011:Alex Kruk VMForce

HEROKU IS AWESOME

• Deployment “git push heroku master”

• Start/Stop/Restart “heroku restart”

• Deployment of Changes

• Clustering (scaling) “heroku scale web=2 worker=4”

• Load-balancing

• Logging

Page 34: CiklumJavaSat_15112011:Alex Kruk VMForce

SOMETHING ELSE ABOUT HEROKU

• Dyno???• Isolation by subvirtualization technologies• One request at a time• 512MB of memory• Web/worker dynos.• $0.05 per hour

• Payment• Dynos• Database• Add-ons

Page 35: CiklumJavaSat_15112011:Alex Kruk VMForce

Database.com SDKHEROKU for Java

THANK YOU!

by Alex KrukSkype: alexandrkrukEmail: [email protected]