I have worked with the Page Manager API to test this use case.
First Lock API works.
Code that uses a System User:
import org.apache.sling.settings.SlingSettingsService;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.ConfigurationPolicy;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.metatype.annotations.Designate;
import java.util.HashMap;
import java.util.Map;
import javax.jcr.Node;
import javax.jcr.Session;
import org.apache.jackrabbit.commons.JcrUtils;
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import com.adobe.cq.sightly.WCMUsePojo;
import com.day.cq.commons.jcr.JcrConstants;
import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.api.PageManager;
import org.apache.sling.api.resource.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Component
public class PageServiceImp implements PageService {
private final Logger logger = LoggerFactory.getLogger(getClass());
private String user = "";
private Session session;
//Inject a Sling ResourceResolverFactory
@Reference
private ResourceResolverFactory resolverFactory;
public String MovePage()
{
String pagePath = "/content/MovePage64/fr";
String newPagePath ="/content/MovePage64/en" ;
String templatePath = "/apps/AEMPage/templates/page-home";
String pageTitle = "AEM home page";
Page newPage;
PageManager pageManager;
ResourceResolver resolver = null;
String newPageName = "";
Map<String, Object> param = new HashMap<String, Object>();
param.put(ResourceResolverFactory.SUBSERVICE, "datapersist");
try {
//Invoke the adaptTo method to create a Session used to create a QueryManager
resolver = resolverFactory.getServiceResourceResolver(param);
Resource res = resolver.getResource(pagePath);
//Adapts the resource to another type - in this example to a com.day.cq.wcm.api.page
Page page = res.adaptTo(Page.class);
//Lock this page
page.lock();
logger.info("The page is locked!");
// session = resolver.adaptTo(Session.class);
return ""
} catch (Exception e) {
// TODO Auto-generated catch block
logger.info("&&&&& BIG ERROR" +e.getMessage());
}
return "" ;
}
}
The result is the page is locked:

Second the UnLock API works.
Code that uses a System User:
import org.apache.sling.settings.SlingSettingsService;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.ConfigurationPolicy;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.metatype.annotations.Designate;
import java.util.HashMap;
import java.util.Map;
import javax.jcr.Node;
import javax.jcr.Session;
import org.apache.jackrabbit.commons.JcrUtils;
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import com.adobe.cq.sightly.WCMUsePojo;
import com.day.cq.commons.jcr.JcrConstants;
import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.api.PageManager;
import org.apache.sling.api.resource.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Component
public class PageServiceImp implements PageService {
private final Logger logger = LoggerFactory.getLogger(getClass());
private String user = "";
private Session session;
//Inject a Sling ResourceResolverFactory
@Reference
private ResourceResolverFactory resolverFactory;
public String MovePage()
{
String pagePath = "/content/MovePage64/fr";
String newPagePath ="/content/MovePage64/en" ;
String templatePath = "/apps/AEMPage/templates/page-home";
String pageTitle = "AEM home page";
Page newPage;
PageManager pageManager;
ResourceResolver resolver = null;
String newPageName = "";
Map<String, Object> param = new HashMap<String, Object>();
param.put(ResourceResolverFactory.SUBSERVICE, "datapersist");
try {
//Invoke the adaptTo method to create a Session used to create a QueryManager
resolver = resolverFactory.getServiceResourceResolver(param);
Resource res = resolver.getResource(pagePath);
//Adapts the resource to another type - in this example to a com.day.cq.wcm.api.page
Page page = res.adaptTo(Page.class);
//Lock this page
page.unlock();
logger.info("The page is locked!");
// session = resolver.adaptTo(Session.class);
return ""
} catch (Exception e) {
// TODO Auto-generated catch block
logger.info("&&&&& BIG ERROR" +e.getMessage());
}
return "" ;
}
}
The result is the page is unlocked - notice the lock props are gone: