På den här sidan kan du utöka funktionerna i Multi Site Manager:
Den här sidan bör läsas tillsammans med Återanvända innehåll: Multi Site Manager.
Följande avsnitt av Omstrukturering av anläggningstillgångar kan också vara av intresse:
Multi Site Manager och dess API används vid utvecklingen av en webbplats, så de är bara avsedda att användas i en författarmiljö.
Hantering av flera platser består av följande paket:
De huvudsakliga MSM API-objekten interagerar på följande sätt (se även Villkor):
Blueprint
A Blueprint
(som i konfiguration av utkast) anger de sidor från vilka en live-kopia kan ärva innehåll.
Användning av en ritningskonfiguration ( Blueprint
) är valfritt, men:
LiveRelationship
The LiveRelationship
Anger anslutningen (relationen) mellan en resurs i livekopiegrenen och dess ekvivalenta käll-/planresurs.
Relationerna används vid arv och utrullning.
LiveRelationship
objekt ger åtkomst (referenser) till utrullningskonfigurationer ( RolloutConfig
), LiveCopy
och LiveStatus
objekt som är relaterade till relationen.
En live-kopia skapas till exempel i /content/copy/us
från källan/ritningen på /content/we-retail/language-masters
. Resurserna /content/we.retail/language-masters/en/jcr:content
och /content/copy/us/en/jcr:content
skapa en relation.
LiveCopy
LiveCopy
innehåller konfigurationsinformation för relationerna ( LiveRelationship
) mellan de aktiva kopieringsresurserna och deras käll-/ritresurser.
Använd LiveCopy
-klass för att komma åt sidans sökväg, sökvägen till käll-/ritningssidan, rollout-konfigurationerna och om underordnade sidor också inkluderas i LiveCopy
.
A LiveCopy
noden skapas varje gång Skapa webbplats eller Skapa Live Copy används.
LiveStatus
LiveStatus
objekt ger åtkomst till körningsstatus för en LiveRelationship
. Används för att fråga synkroniseringsstatusen för en live-kopia.
LiveAction
A LiveAction
är en åtgärd som utförs på varje resurs som ingår i utrullningen.
LiveActionFactory
Skapar LiveAction
objekt som LiveAction
konfiguration. Konfigurationer lagras som resurser i databasen.
RolloutConfig
The RolloutConfig
innehåller en lista med LiveActions
, som ska användas när den aktiveras. The LiveCopy
ärver RolloutConfig
och resultatet finns i LiveRelationship
.
Skapa anpassade synkroniseringsåtgärder som du kan använda med dina utrullningskonfigurationer. Skapa en synkroniseringsåtgärd när installerade åtgärder uppfyller inte dina specifika programkrav. Skapa då två klasser:
com.day.cq.wcm.msm.api.LiveAction
gränssnitt som utför åtgärden.com.day.cq.wcm.msm.api.LiveActionFactory
-gränssnittet och skapar instanser av LiveAction
klassen.The LiveActionFactory
skapar instanser av LiveAction
klass för en viss konfiguration:
LiveAction
-klasser innehåller följande metoder:
getName
: Returnerar namnet på åtgärden Namnet används för att referera till åtgärden, till exempel i utrullningskonfigurationer.execute
: Utför åtgärderna.LiveActionFactory
-klasserna innehåller följande medlemmar:
LIVE_ACTION_NAME
: Ett fält som innehåller namnet på det associerade LiveAction
. Namnet måste sammanfalla med värdet som returneras av getName
metoden LiveAction
klassen.
createAction
: Skapar en instans av LiveAction
. Valfritt Resource
-parametern kan användas för att tillhandahålla konfigurationsinformation.
createsAction
: Returnerar namnet på associerad LiveAction
.
Använd LiveAction
konfigurationsnoden i databasen för att lagra information som påverkar körningsbeteendet för LiveAction
-instans. Noden i databasen som lagrar LiveAction
konfigurationen är tillgänglig för LiveActionFactory
objekt vid körning. Därför kan du lägga till egenskaper i konfigurationsnoden och använda dem i LiveActionFactory
implementering efter behov.
Till exempel en LiveAction
måste lagra namnet på den som skapat ritningen. En egenskap för konfigurationsnoden innehåller egenskapsnamnet för den planeringssida som lagrar informationen. Vid körning visas LiveAction
hämtar egenskapsnamnet från konfigurationen och hämtar sedan egenskapsvärdet.
Parametern för LiveActionFactory.createAction
metoden är en Resource
-objekt. Detta Resource
objektet representerar cq:LiveSyncAction
nod för denna live-åtgärd i utrullningskonfigurationen, se Skapa en utrullningskonfiguration. Som vanligt när du använder en konfigurationsnod bör du anpassa den till en ValueMap
objekt:
public LiveAction createAction(Resource resource) throws WCMException {
ValueMap config;
if (resource == null || resource.adaptTo(ValueMap.class) == null) {
config = new ValueMapDecorator(Collections.<String, Object>emptyMap());
} else {
config = resource.adaptTo(ValueMap.class);
}
return new MyLiveAction(config, this);
}
Följande objekt anges som parametrar för execute
metoden LiveAction
objekt:
A Resource
som representerar källan till Live Copy.
A Resource
som representerar målet för Live Copy.
The LiveRelationship
objekt för live-kopian.
The autoSave
värdet anger om LiveAction
bör spara ändringar som görs i databasen.
Återställningsvärdet anger återställningsläget för utrullning.
Från dessa objekt kan du hämta all information om LiveCopy
. Du kan också använda Resource
objekt att hämta ResourceResolver
, Session
och Node
objekt. De här objekten är användbara för att hantera databasinnehåll:
I den första raden i följande kod är källan Resource
källsidans objekt:
ResourceResolver resolver = source.getResourceResolver();
Session session = resolver.adaptTo(javax.jcr.Session.class);
Node sourcenode = source.adaptTo(javax.jcr.Node.class);
The Resource
argument kan null
eller Resources
objekt som inte anpassar sig till Node
objekt, som NonExistingResource
objekt.
Skapa en utrullningskonfiguration när de installerade utrullningskonfigurationerna inte uppfyller dina programkrav:
Den nya utrullningskonfigurationen är sedan tillgänglig för dig när du ställer in utrullningskonfigurationer på en ritnings- eller Live copy-sida.
Så här skapar du en ny utrullningskonfiguration:
Öppna CRXDE Lite, till exempel:
http://localhost:4502/crx/de
Navigera till :
/apps/msm/<your-project>/rolloutconfigs
Det här är projektets anpassade version av:
/libs/msm/wcm/rolloutconfigs
Om det här är din första konfiguration /libs
gren måste användas som mall för att skapa den nya grenen under /apps
.
Du får inte ändra något i /libs
bana.
Detta beror på innehållet i /libs
skrivs över nästa gång du uppgraderar din instans (och kan mycket väl skrivas över när du använder en snabbkorrigering eller ett funktionspaket).
Den rekommenderade metoden för konfiguration och andra ändringar är:
/libs
) under /apps
/apps
Under Skapa en nod med följande egenskaper:
contentCopy
eller workflow
.cq:RolloutConfig
Lägg till följande egenskaper i den här noden:
Namn: jcr:title
Typ: String
Värde: En identifierande titel som visas i användargränssnittet.
Namn: jcr:description
Typ: String
Värde: En valfri beskrivning.
Namn: cq:trigger
Typ: String
Värde: The Utlösare för utrullning som ska användas. Välj från:
rollout
modification
publish
deactivate
Klicka Spara alla.
Utrullningskonfigurationer lagras under konfigurationsnod för utrullning som du har skapat under /apps/msm/<your-project>/rolloutconfigs
nod.
Lägg till underordnade noder av typen cq:LiveSyncAction
för att lägga till synkroniseringsåtgärder i utrullningskonfigurationen. Ordningen på synkroniseringsåtgärdsnoderna avgör i vilken ordning åtgärderna utförs.
Fortfarande i CRXDE Lite väljer du Konfiguration av utrullning nod.
Till exempel:
/apps/msm/myproject/rolloutconfigs/myrolloutconfig
Skapa en nod med följande nodegenskaper:
contentCopy
eller workflow
.cq:LiveSyncAction
Lägg till och konfigurera så många noder för synkroniseringsåtgärder som du behöver. Ordna om åtgärdsnoderna så att ordningen matchar den ordning i vilken du vill att de ska visas. Den översta åtgärdsnoden inträffar först.
Följ anvisningarna i det här avsnittet för att utveckla en LiveActionFactory
och använda den i en utrullningskonfiguration. Processerna använder Maven och Eclipse för att utveckla och driftsätta LiveActionFactory
:
LiveActionFactory
inteface och driftsätta OSGi-paketet.Maven-projektet och Java-klassens källkod är tillgängliga i det offentliga Git-arkivet.
KOD PÅ GITHUB
Koden för den här sidan finns på GitHub
Följande procedur kräver att du har lagt till adobe-public-profilen i Maven-inställningsfilen.
Öppna en terminal- eller kommandoradssession och ändra katalogen så att den pekar på den plats där projektet ska skapas.
Ange följande kommando:
mvn archetype:generate -DarchetypeGroupId=com.day.jcr.vault -DarchetypeArtifactId=multimodule-content-package-archetype -DarchetypeVersion=1.0.0 -DarchetypeRepository=adobe-public-releases
Ange följande värden vid en interaktiv fråga:
groupId
: com.adobe.example.msm
artifactId
: MyLiveActionFactory
version
: 1.0-SNAPSHOT
package
: MyPackage
appsFolderName
: myapp
artifactName
: MyLiveActionFactory package
packageGroup
: myPackages
Starta Eclipse och importera projektet Maven.
Lägg till beroenden så att Eclipse-kompilatorn kan referera till klasserna som används i LiveActionFactory
kod.
Öppna filen i Eclipse Project Explorer:
MyLiveActionFactory/pom.xml
Klicka på pom.xml
och leta upp project/dependencyManagement/dependencies
-avsnitt.
Lägg till följande XML i dependencyManagement
och spara sedan filen.
<dependency>
<groupId>com.day.cq.wcm</groupId>
<artifactId>cq-msm-api</artifactId>
<version>5.6.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.api</artifactId>
<version>2.4.3-R1488084</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.day.cq.wcm</groupId>
<artifactId>cq-wcm-api</artifactId>
<version>5.6.6</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.commons.json</artifactId>
<version>2.0.6</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.day.cq</groupId>
<artifactId>cq-commons</artifactId>
<version>5.6.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.jcr.jcr-wrapper</artifactId>
<version>2.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.day.cq</groupId>
<artifactId>cq-commons</artifactId>
<version>5.6.4</version>
<scope>provided</scope>
</dependency>
Öppna POM-filen för paketet från Projektutforskaren på MyLiveActionFactory-bundle/pom.xml
.
Klicka på pom.xml
och leta upp avsnittet Projekt/beroenden. Lägg till följande XML i beroendeelementet och spara sedan filen:
<dependency>
<groupId>com.day.cq.wcm</groupId>
<artifactId>cq-msm-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.api</artifactId>
</dependency>
<dependency>
<groupId>com.day.cq.wcm</groupId>
<artifactId>cq-wcm-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.commons.json</artifactId>
</dependency>
<dependency>
<groupId>com.day.cq</groupId>
<artifactId>cq-commons</artifactId>
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.jcr.jcr-wrapper</artifactId>
</dependency>
<dependency>
<groupId>com.day.cq</groupId>
<artifactId>cq-commons</artifactId>
</dependency>
Följande LiveActionFactory
class implements a LiveAction
som loggar meddelanden om käll- och målsidor och kopierar cq:lastModifiedBy
från källnoden till målnoden. Den aktiva åtgärdens namn är exampleLiveAction
.
Högerklicka på knappen MyLiveActionFactory-bundle/src/main/java/com.adobe.example.msm
paketera och klicka på Nytt > Klass. För Namn, ange ExampleLiveActionFactory
och sedan klicka Slutför.
Öppna ExampleLiveActionFactory.java
, ersätter innehållet med följande kod och sparar filen.
package com.adobe.example.msm;
import java.util.Collections;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.api.wrappers.ValueMapDecorator;
import org.apache.sling.commons.json.io.JSONWriter;
import org.apache.sling.commons.json.JSONException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import com.day.cq.wcm.msm.api.ActionConfig;
import com.day.cq.wcm.msm.api.LiveAction;
import com.day.cq.wcm.msm.api.LiveActionFactory;
import com.day.cq.wcm.msm.api.LiveRelationship;
import com.day.cq.wcm.api.WCMException;
@Component(metatype = false)
@Service
public class ExampleLiveActionFactory implements LiveActionFactory<LiveAction> {
@Property(value="exampleLiveAction")
static final String actionname = LiveActionFactory.LIVE_ACTION_NAME;
public LiveAction createAction(Resource config) {
ValueMap configs;
/* Adapt the config resource to a ValueMap */
if (config == null || config.adaptTo(ValueMap.class) == null) {
configs = new ValueMapDecorator(Collections.<String, Object>emptyMap());
} else {
configs = config.adaptTo(ValueMap.class);
}
return new ExampleLiveAction(actionname, configs);
}
public String createsAction() {
return actionname;
}
/************* LiveAction ****************/
private static class ExampleLiveAction implements LiveAction {
private String name;
private ValueMap configs;
private static final Logger log = LoggerFactory.getLogger(ExampleLiveAction.class);
public ExampleLiveAction(String nm, ValueMap config){
name = nm;
configs = config;
}
public void execute(Resource source, Resource target,
LiveRelationship liverel, boolean autoSave, boolean isResetRollout)
throws WCMException {
String lastMod = null;
log.info(" *** Executing ExampleLiveAction *** ");
/* Determine if the LiveAction is configured to copy the cq:lastModifiedBy property */
if ((Boolean) configs.get("repLastModBy")){
/* get the source's cq:lastModifiedBy property */
if (source != null && source.adaptTo(Node.class) != null){
ValueMap sourcevm = source.adaptTo(ValueMap.class);
lastMod = sourcevm.get(com.day.cq.wcm.msm.api.MSMNameConstants.PN_PAGE_LAST_MOD_BY, String.class);
}
/* set the target node's la-lastModifiedBy property */
Session session = null;
if (target != null && target.adaptTo(Node.class) != null){
ResourceResolver resolver = target.getResourceResolver();
session = resolver.adaptTo(javax.jcr.Session.class);
Node targetNode;
try{
targetNode=target.adaptTo(javax.jcr.Node.class);
targetNode.setProperty("la-lastModifiedBy", lastMod);
log.info(" *** Target node lastModifiedBy property updated: {} ***",lastMod);
}catch(Exception e){
log.error(e.getMessage());
}
}
if(autoSave){
try {
session.save();
} catch (Exception e) {
try {
session.refresh(true);
} catch (RepositoryException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
}
}
}
public String getName() {
return name;
}
/************* Deprecated *************/
@Deprecated
public void execute(ResourceResolver arg0, LiveRelationship arg1,
ActionConfig arg2, boolean arg3) throws WCMException {
}
@Deprecated
public void execute(ResourceResolver arg0, LiveRelationship arg1,
ActionConfig arg2, boolean arg3, boolean arg4)
throws WCMException {
}
@Deprecated
public String getParameterName() {
return null;
}
@Deprecated
public String[] getPropertiesNames() {
return null;
}
@Deprecated
public int getRank() {
return 0;
}
@Deprecated
public String getTitle() {
return null;
}
@Deprecated
public void write(JSONWriter arg0) throws JSONException {
}
}
}
Ändra katalogen till MyLiveActionFactory
katalogen (Maven project directory). Ange sedan följande kommando:
mvn -PautoInstallPackage clean install
AEM error.log
filen ska ange att paketet har startats.
Till exempel: https://localhost:4502/system/console/status-slinglogs.
13.08.2013 14:34:55.450 *INFO* [OsgiInstallerImpl] com.adobe.example.msm.MyLiveActionFactory-bundle BundleEvent RESOLVED
13.08.2013 14:34:55.451 *INFO* [OsgiInstallerImpl] com.adobe.example.msm.MyLiveActionFactory-bundle BundleEvent STARTING
13.08.2013 14:34:55.451 *INFO* [OsgiInstallerImpl] com.adobe.example.msm.MyLiveActionFactory-bundle BundleEvent STARTED
13.08.2013 14:34:55.453 *INFO* [OsgiInstallerImpl] com.adobe.example.msm.MyLiveActionFactory-bundle Service [com.adobe.example.msm.ExampleLiveActionFactory,2188] ServiceEvent REGISTERED
13.08.2013 14:34:55.454 *INFO* [OsgiInstallerImpl] org.apache.sling.audit.osgi.installer Started bundle com.adobe.example.msm.MyLiveActionFactory-bundle [316]
Skapa den MSM-utrullningskonfiguration som använder LiveActionFactory
som du har skapat:
Skapa och konfigurera en Konfiguration av utrullning med standardproceduren - och använda egenskaperna:
publish
Konfigurera den utrullningskonfiguration som du skapade i föregående procedur så att den använder ExampleLiveActionFactory
klassen.
Öppna CRXDE Lite, till exempel https://localhost:4502/crx/de.
Skapa följande nod under /apps/msm/rolloutconfigs/examplerolloutconfig/jcr:content
:
exampleLiveAction
cq:LiveSyncAction
Klicka Spara alla.
Välj exampleLiveAction
nod och lägg till följande egenskap:
repLastModBy
Boolean
true
Den här egenskapen indikerar för ExampleLiveAction
klassen som cq:LastModifiedBy
ska replikeras från källan till målnoden.
Klicka Spara alla.
Skapa en live-kopia på engelska/Products-grenen på referenswebbplatsen för webb.Retail med din rollout-konfiguration:
Källa: /content/we-retail/language-masters/en/products
Konfiguration av utrullning: Exempelkonfiguration
Aktivera Produkter (på engelska) sidan av källgrenen och observera loggmeddelandena som LiveAction
klassen genererar:
16.08.2013 10:53:33.055 *INFO* [Thread-444535] com.adobe.example.msm.ExampleLiveActionFactory$ExampleLiveAction ***ExampleLiveAction has been executed.***
16.08.2013 10:53:33.055 *INFO* [Thread-444535] com.adobe.example.msm.ExampleLiveActionFactory$ExampleLiveAction ***Target node lastModifiedBy property updated: admin ***
AEM använder en standarduppsättning med språk- och landskoder.
MSM använder en lagrad lista med språk- och landskoder för att fastställa namnet på landet som är associerat med namnet på språkversionen av sidan. Du kan ändra följande aspekter av listan om det behövs:
en
, de
, bland annat)Språklistan sparas under /libs/wcm/core/resources/languages
nod. Varje underordnad nod representerar ett språk eller ett språkområde:
Nodnamnet är språkkoden (till exempel en
eller de
) eller koden för språk_land (till exempel en_us
eller de_ch
).
The language
-egenskapen för noden lagrar det fullständiga namnet på kodspråket.
The country
-egenskapen för noden lagrar det fullständiga namnet på landet för koden.
När nodnamnet bara består av en språkkod (till exempel en
), egenskapen country är *
och ytterligare defaultCountry
-egenskapen lagrar koden för det land som ska anges.
Så här ändrar du språk:
Öppna CRXDE Lite i webbläsaren; till exempel https://localhost:4502/crx/de
Välj /apps
mapp och klicka på Skapa sedan Skapa mapp.
Namnge den nya mappen wcm
.
Upprepa föregående steg för att skapa /apps/wcm/core
mappträd. Skapa en nod av typen sling:Folder
in core
anropad resources
.
Högerklicka på /libs/wcm/core/resources/languages
nod och klicka Kopiera.
Högerklicka på /apps/wcm/core/resources
mapp och klicka på Klistra in. Ändra de underordnade noderna efter behov.
Klicka Spara alla.
Klicka verktyg, Operationer sedan Webbkonsol. Klicka på OSGi sedan Konfiguration.
Leta reda på och klicka Day CQ WCM Language Manager och ändra värdet för Språklista till /apps/wcm/core/resources/languages
och sedan klicka Spara.
När du skapar en anpassad sidegenskap kan du behöva fundera på om den nya egenskapen ska kunna rullas ut till alla live-kopior.
Om till exempel två nya sidegenskaper läggs till:
E-postadress:
Visuell huvudstil:
Då måste du se till att:
E-postadress:
är utesluten från de utrullade egenskaperna, se Exkludera egenskaper och nodtyper från synkronisering.
Visuell huvudstil:
Se till att du inte får redigera den här egenskapen i det beröringsaktiverade användargränssnittet om inte arvet avbryts, och att du sedan kan återinstallera arvet; Detta styrs genom att klicka på kedjelänkarna/brutna kedjor som växlar för att ange anslutningsstatus.
Anger om en sidegenskap ska rullas ut och därför styrs arvet av egenskapen dialog, under förutsättning att arvet avbryts/återställs vid redigering:
cq-msm-lockable
Typ: String
Värde: innehåller namnet på den aktuella egendomen (och är jämförbart med värdet på egendomen) name
; se
/libs/foundation/components/page/cq:dialog/content/items/tabs/items/basic/items/column/items/title/items/title
När cq-msm-lockable
har definierats, om kedjan bryts/stängs kommer den att interagera med MSM på följande sätt:
om värdet för cq-msm-lockable
är:
Relativ (t.ex. myProperty
eller ./myProperty
)
cq:propertyInheritanceCancelled
.Absolut (t.ex. /image
)
om du bryter kedjan avbryts arvet genom att lägga till cq:LiveSyncCancelled
blanda till ./image
och inställning cq:isCancelledForChildren
till true
.
Om du stänger kedjan återställs arvet.
cq-msm-lockable
används på den första underordnade nivån för resursen som ska redigeras och den fungerar inte på något djupare nivåöverordnat objekt, oavsett om värdet är definierat som absolut eller relativ.
När du återaktiverar arv synkroniseras inte egenskapen för live-kopieringssidan automatiskt med egenskapen source. Du kan begära en synkronisering manuellt om det behövs.