cancel
Showing results for 
Search instead for 
Did you mean: 

Configurazione contentstore selector

daqwerty
Champ in-the-making
Champ in-the-making
Ciao,

sto provando la versione di prova di Alfresco One,vorrei implementare la funzionalità Contentstore Selector, in modo da sfruttare più filesystem per salvare i documenti in posti diversi e non nella solita cartella alf_data/contentstore.

Ho seguito la documentazione presente in questa pagina:

docs.alfresco.com/5.0/concepts/store-config-fullexample.html

1) Ho creato il file sample-config-store-selector-context.xml è l'ho salvato nella directory /opt/alfresco-5.0.1/tomcat/shared/classes/alfresco/extension.

2) Ho aggiunto al file share-config-custom-xml che si trova in /opt/alfresco-5.0.1/tomcat/shared/classes/alfresco/web-extension il codice presente nell'esempio che ho linkato (prima del tag di chiusura gia presente).

Dopodichè ho provato a loggare in Alfresco share ma non riesco a trovare le funzionalità aggiuntive, vi ringrazio se qualcuno sarebbe in grado di aiutarmi per i prossimi step.

Ho allegato i file, qualora voleste provarli togliete .log dal nome.
5 REPLIES 5

davidciamberlan
Elite Collaborator
Elite Collaborator
Ciao,

non mi è mai capitato di usare il content store selector… quindi sorry ma non posso aiutarti.

Volevo però avvisarti che la feature è stata rimossa dalla versione community (dalla 4.2.x se non sbaglio).
Tu stai utilizzando la versione enterprise di Alfresco?

Se già eri a conoscenza della cosa ignora pure questa risposta Smiley Wink


daqwerty
Champ in-the-making
Champ in-the-making
Ti ringrazio per l'interessamento,

si ne sono al corrente, il fatto è che al momento sto provando la versione trial di Alfresco One, per vedere come si comporta prima di un eventuale acquisto.
Infatti vorrei salvare i dati su più dischi in rete e per fare ciò ho bisogno di più contentstore.

Ho trovato la funzionalità ContentStore Selector e penso sia ciò che mi serve, non credo che nella versione community ci sia qualcosa in grado di fare qualcosa di simile.

In ogni caso sono riuscito ad avanzare nella configurazione, magari può essere d'aiuto ad altri, in pratica si tratta, tramite il web client Alfresco Share, di aggiungere l'aspetto aspect.cmSmiley FrustratedtoreSelector (che viene attivato dai file xml presenti nel primo post) attraverso le impostazioni presenti per ogni singola cartella (Manage Aspects).

Una volta fatto ciò ho creato una regola (sempre attraverso il menu della cartella -> Manage Rules) che dice:


When:
    Items are created or enter this folder

If all criteria are met:
    All Items


Perform Action:
    Set property value
    ProprietàSmiley Frustratedtore NameValore:storeB

In questo modo i file vengono salvati nello storeB, ma sorge un altro problema poichè vengono duplicati anche nella directory contentstore di default (anche se Alfresco Share ne mostra uno).

Se ci saranno ulteriori sviluppi aggiornerò il topic

Ciao,

grazie intanto per aver condiviso la tua soluzione!

Il problema del duplicato è probabilmente dovuto alla gestiorne del content store di Alfresco. I file in esso infatti non vengono eliminati immediatamente ma seguono un certo ciclo di vita.

Per eliminare subito il file potresti aggiungere la proprietà
system.content.eagerOrphanCleanup = true
all'alfresco-global.properties. (Non posso garantirti che funzioni dato che, come ti ho detto, non ho mi sono mai trovato nella tua situazione…).

Se invece vuoi che il file venga creato direttamente nello storeB senza arrivare in quello di default, devi intercettare l'evento di creazione prima che esso accada… e questo lo puoi fare realizando un behaviour custom di Alfresco.

daqwerty
Champ in-the-making
Champ in-the-making
Il primo metodo l'avevo provato ma non risolveva la situazione.

Per il custom behavior ho provato a documentarmi, ma sinceramente non ho capito molto bene come funzionano e come implementarli, non è che sapresti indirizzarmi verso della documentazione o qualcosa che mi possa aiutare in questo senso?

Ciao,

hai provato anche a settare opportunamente system.content.orphanProtectDays?

Per il behaviour in rete non mi sembra che ci siano molte risorse utili… L'argomento spaventa molti ma alla fin fine non è niente di trascendentale. Non posso non consigliarti la solita guida di Jeff Potts

Ti riporto qui sotto del codice di esempio che ho scritto qualche tempo fa. Ti può essere utile come base:

Questo è il codice java di un behaviour che intercetta l'evento onCreate. Penso che tu debba intercettare BeforeCreateNode.



public class TestBehaviour implements NodeServicePolicies.OnCreateNodePolicy {

    private Behaviour onCreateNode;
    private PolicyComponent policyComponent;
    private NodeService nodeService;

    private Log log = LogFactory.getLog(TestBehaviour.class);

    public void setPolicyComponent(PolicyComponent policyComponent) {
        this.policyComponent = policyComponent;
    }

    public void setNodeService(NodeService nodeService) {
        this.nodeService = nodeService;
    }

    public void init() {
        this.onCreateNode = new JavaBehaviour(this, "onCreateNode", Behaviour.NotificationFrequency.TRANSACTION_COMMIT);

        this.policyComponent.bindClassBehaviour(
                QNAME.createQName(NamespaceService.ALFRESCO_URI, "onCreateNode"),
                "cm:content",
                this.onCreateNode);
    }

    @Override
    public void onCreateNode(ChildAssociationRef childAssociationRef) {
        NodeRef nodeRef = childAssociationRef.getParentRef();

        QName titleProperty = QNAME.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "description");

        log.warn(titleProperty.toString());
        log.warn(nodeRef.getId());

        try {
            nodeService.setProperty(childAssociationRef.getChildRef(), titleProperty, "Test Behaviour");
            log.warn("onCreateNode OK");
        }
        catch (InvalidNodeRefException _e) {
            log.error("ERRORE onCreateNode");
        }
    }
}




Per la configurazione di spring potresti usare una cosa del genere:



    <bean id="testBehaviour" class="local.lab.TestBehaviour" init-method="init">
        <property name="policyComponent">
            <ref bean="policyComponent" />
        </property>
        <property name="nodeService">
            <ref bean="NodeService"/>
        </property>
    </bean>