Newer Version Available

This content describes an older version of this product. View Latest

Step 4: Use the Connector with Username and Password Login

Now that you’ve downloaded and built the EMP connector, use it to connect to CometD and subscribe to the PushTopic.
Let’s run an example that uses username and password login.
  1. In the /src/main/java/com/salesforce/emp/connector/example folder, open the LoginExample.java Java source file.
    1/* 
    2 * Copyright (c) 2016, salesforce.com, inc.
    3 * All rights reserved.
    4 * Licensed under the BSD 3-Clause license. 
    5 * For full license text, see LICENSE.TXT file in the repo root  or https://opensource.org/licenses/BSD-3-Clause
    6 */
    7package com.salesforce.emp.connector.example;
    8
    9import static com.salesforce.emp.connector.LoginHelper.login;
    10
    11import java.net.URL;
    12import java.util.Map;
    13import java.util.concurrent.TimeUnit;
    14import java.util.function.Consumer;
    15
    16import com.salesforce.emp.connector.BayeuxParameters;
    17import com.salesforce.emp.connector.EmpConnector;
    18import com.salesforce.emp.connector.LoginHelper;
    19import com.salesforce.emp.connector.TopicSubscription;
    20
    21/**
    22 * An example of using the EMP connector using login credentials
    23 */
    24public class LoginExample {
    25    public static void main(String[] argv) throws Exception {
    26        if (argv.length < 3 || argv.length > 4) {
    27            System.err.println(
    28                "Usage: LoginExample username password topic [replayFrom]");
    29            System.exit(1);
    30        }
    31        long replayFrom = EmpConnector.REPLAY_FROM_EARLIEST;
    32        if (argv.length == 4) {
    33            replayFrom = Long.parseLong(argv[3]);
    34        }
    35
    36        BearerTokenProvider tokenProvider = new BearerTokenProvider(() -> {
    37            try {
    38                return login(argv[0], argv[1]);
    39            } catch (Exception e) {
    40                e.printStackTrace(System.err);
    41                System.exit(1);
    42                throw new RuntimeException(e);
    43            }
    44        });
    45
    46        BayeuxParameters params = tokenProvider.login();
    47
    48        Consumer<Map<String, Object>> consumer = event -> 
    49            System.out.println(String.format("Received:\n%s", event));
    50
    51        EmpConnector connector = new EmpConnector(params);
    52
    53        connector.setBearerTokenProvider(tokenProvider);
    54
    55        connector.start().get(5, TimeUnit.SECONDS);
    56
    57        TopicSubscription subscription = connector.subscribe(
    58            argv[2], replayFrom, consumer).get(5, TimeUnit.SECONDS);
    59
    60        System.out.println(String.format("Subscribed: %s", subscription));
    61    }
    62}
  2. Run the LoginExample class, and provide the following argument values.
    Argument Value
    username Username of the logged-in user
    password Password for the username (or logged-in user)
    topic /topic/InvoiceStatementUpdates
    The sample fetches the earliest saved events within the past 24 hours. Optionally, to receive different events, you can include a replay ID as the last argument. Valid values are:
    • –1—Get all new events sent after subscription.
    • –2—Get all new events sent after subscription and all past events within the past 24 hours.
    • Specific number—Get all events that occurred after the event with the specified replay ID.
  3. In a browser window, create or modify an invoice statement. After you create or change data that corresponds to the query in your PushTopic, the output looks similar to the following.
    1Subscribed: Subscription [/topic/InvoiceStatementUpdates:-2]
    2Received:
    3{event={createdDate=2016-12-12T22:31:48.035Z, replayId=1, type=created}, sobject={Status__c=Open, Id=a070P00000pn0hyQAA, Name=INV-0001, Description__c=blah}}
    4Received:
    5{event={createdDate=2016-12-12T22:32:06.440Z, replayId=2, type=updated}, sobject={Status__c=Negotiating, Id=a070P00000pn0hyQAA, Name=INV-0001, Description__c=blah}}
    6Received:
    7{event={createdDate=2016-12-12T22:32:57.404Z, replayId=3, type=created}, sobject={Status__c=Open, Id=a070P00000pn0lfQAA, Name=INV-0002, Description__c=Laptops and accessories.}}
Generally, do not handle usernames and passwords of others when running code in production. In a production environment, delegate the login to OAuth. The next step connects to Streaming API with OAuth.