See these community articles:
https://helpx.adobe.com/experience-manager/using/programmatically-accessing-cq-content-using.html
you use:
//Create a connection to the CQ repository running on local host
Repository repository = JcrUtils.getRepository("http://localhost:4503/crx/server");
//Create a Session
javax.jcr.Session session = repository.login( new SimpleCredentials("admin", "admin".toCharArray()));
when you are using an external Java app. For example - a Java Swing app.
If you are using the JCR API from within an OSGi bundle - you can use:
ResourceResolver lResourceResolver = pResolverFactory.getAdministrativeResourceResolver(null);
Session lSession = lResourceResolver.adaptTo(Session.class);
This article shows you how to do this:
http://scottsdigitalcommunity.blogspot.ca/2013/02/querying-adobe-experience-manager-data.html
But some ppl do not like using getAdministrativeResourceResolver().
Instead - they recommend that you create a dedicated user account, specify permissions using ACL, and use sling mapping.
Map<String, Object> param = new HashMap<String, Object>();
param.put(ResourceResolverFactory.SUBSERVICE, "datawrite");
ResourceResolver resolver = null;
try {
//Invoke the adaptTo method to create a Session used to create a QueryManager
resolver = resolverFactory.getServiceResourceResolver(param);
session = resolver.adaptTo(Session.class);
This article shows you how to do this:
http://scottsdigitalcommunity.blogspot.ca/2014/12/querying-adobe-experience-manager-6.html
When you close your session and you modified the JCR - use these methods:
session.save();
session.logout();