I am a newbie to Alfresco. Probably my writing will not introduce any news for experienced users. If this is the case, I would propose that this findings would be included in the Alfresco documentation, just to keep new users on the right track and to keep their expectations down to Earth.
As far as my tests with Alfresco Community 4.0.d have shown, you have to be really conservative on the options you offer your users. If you mount the resource over CIFS or WebDAV, quite a lot depends on the implementation of the programs that are used to manipulate your files.
Example 1:
- resource is mounted over CIFS as a network drive on the Windows client
- PDF document is opened with SumatraPDF (which is really only a reader and does not support annotations)
- document _is not_ locked
Example 2:
- resource is mounted over CIFS as a network drive on the Windows client
- PDF document is opened with PDF-XChange Viewer which supports annotations
- document _is_ locked (even if user has permissions set to read-only)
You can argue that this is expected behavior. But, while the document is locked over the CIFS interface (you can not overwrite the file until it is closed), you can overwrite the file if you use Share web interface (Safari, drag and drop). Additionally, the file is refreshed (new version of file is opened when double-clicked) in CIFS only when I change to some other folder and then back. If I try to upload a new version of the file through Share web interface with the "Upload New Version" link, it fails - even after I close all open files (I did not investigate why this happens, jet).
Example 3:
- resource is mounted over WebDAV as a network drive on the Windows client (using Total Commander)
- PDF document is opened with PDF-XChange Viewer which supports annotations
- document _is not_ locked (compare with Example 2)
Example 4:
- resource is mounted over WebDAV as a network drive on the Windows client (using Total Commander)
- PDF document is overwritten with a new version
- a document receives a new minor version as expected
Example 5:
- resource is mounted over WebDAV using MAC OS X Lion Finder
- PDF document is overwritten with a new version
- a _new_ document with the same name is found in the repository (older versions are lost, if you refresh document page in Share web interface it reports "The item cannot be found. Either it has been removed or it has never existed.")
Again, you can argue that this is expected behavior, since it seams that Finder's implementation first deletes the file and then copies a new file with the same name in its location. This is not an Alfresco issue, one might say. I do agree, but that does not change the fact that you loose (documents are in Trashcan) versioning control over your documents. Users of Alfresco should be aware of this, and this is, in my opinion, an Alfresco issue - this should be stressed in documentation.
Conclusions:
1. It seems that I will use WebDAV only for read-only resources.
2. CIFS will be used in non-locking setup
3. When concurrent editing is an option, CIFS users will have to use checkinout.exe
Problem:
I am not able to configure non-locking CIFS. I have read the documentation, searched the forums, fought with Wiki pages for other versions of Alfresco, but not succeeded, so far. I have changed AVMLockingAwareService to AVMService in alfresco-4.0.d/tomcat/webapps/alfresco/WEB-INF/classes/alfresco/subsystems/fileServers/default/network-protocol-context.xml on my Linux server, but to no avail - locking is still in place. Here is the complete avmDiskDriver config from network-protocol-context.xml:
<!– WCM/AVM Filesystem Interface –>
<bean id="avmDiskDriver" class="org.alfresco.filesys.avm.AVMDiskDriver">
<property name="avmService"><ref bean="AVMService"/></property>
<property name="transactionService"><ref bean="transactionService"/></property>
<property name="authenticationComponent"><ref bean="authenticationComponent"/></property>
<property name="authenticationService"><ref bean="authenticationService"/></property>
<property name="mimetypeService"><ref bean="mimetypeService"/></property>
<property name="serviceRegistry"><ref bean="ServiceRegistry"/></property>
<property name="nodeService"><ref bean="NodeService"/></property>
<property name="createStoreListener"><ref bean="createStoreTxnListener"/></property>
<property name="purgeStoreListener"><ref bean="purgeStoreTxnListener"/></property>
<property name="createVersionListener"><ref bean="createVersionTxnListener"/></property>
<property name="purgeVersionListener"><ref bean="purgeVersionTxnListener"/></property>
</bean>
Any hints would be much apprechiated.