02-21-2006 11:14 AM
09:48:57,825 ERROR [org.alfresco.web.ui.common.Utils] Unable to check out Content Node due to system error:null
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:787)
at java.util.HashMap$ValueIterator.next(HashMap.java:817)
at org.alfresco.repo.search.impl.lucene.LuceneIndexerAndSearcherFactory.prepare(LuceneIndexerAndSearcherFactory.java:684)
at org.alfresco.repo.transaction.AlfrescoTransactionSupport$TransactionSynchronizationImpl.beforeCommit(AlfrescoTransactionSupport.java:581)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit(AbstractPlatformTransactionManager.java:657)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:482)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:469)
at org.springframework.transaction.interceptor.TransactionAspectSupport.doCommitTransactionAfterReturning(TransactionAspectSupport.java:266)
at org.alfresco.util.transaction.SpringAwareUserTransaction.commit(SpringAwareUserTransaction.java:376)
at org.alfresco.web.bean.CheckinCheckoutBean.checkoutFile(CheckinCheckoutBean.java:456)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:129)
at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:63)
at javax.faces.component.UICommand.broadcast(UICommand.java:106)
at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:90)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:164)
at org.apache.myfaces.lifecycle.LifecycleImpl.invokeApplication(LifecycleImpl.java:316)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:86)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:106)
at org.alfresco.web.app.servlet.AlfrescoFacesServlet.service(AlfrescoFacesServlet.java:49)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.alfresco.web.app.servlet.AuthenticationFilter.doFilter(AuthenticationFilter.java:73)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:667)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
02-21-2006 02:44 PM
public class AuditTrailAspect implements TransactionListener, ContentServicePolicies.OnContentReadPolicy, ContentServicePolicies.OnContentUpdatePolicy
{
// Members
private AuthenticationService authenticationService;
private PolicyComponent policyComponent;
private AuditTrailService auditTrailService;
private static final String AUDIT_TRAIL_ITEMS = "AuditTrailAspect.auditTrailItems";
public void init()
{
this.policyComponent.bindClassBehaviour(
ContentServicePolicies.ON_CONTENT_READ,
ContentModel.ASPECT_AUDITTRAIL,
new JavaBehaviour(this, "onContentRead"));
this.policyComponent.bindClassBehaviour(
ContentServicePolicies.ON_CONTENT_UPDATE,
ContentModel.ASPECT_AUDITTRAIL,
new JavaBehaviour(this, "onContentUpdate"));
}
public void onContentRead(NodeRef nodeRef)
{
AlfrescoTransactionSupport.bindListener(this);
String currentUser = this.authenticationService.getCurrentUserName();
Date now = Calendar.getInstance().getTime();
Map<QName, Serializable> auditItemProps = new HashMap<QName, Serializable>();
auditItemProps.put(ContentModel.PROP_AUDITEVENT, AuditTrailEvents.AUDIT_EVENT_READ);
auditItemProps.put(ContentModel.PROP_AUDITUSER, currentUser);
auditItemProps.put(ContentModel.PROP_AUDITTIMESTAMP, now);
Map<NodeRef, Map<QName, Serializable>> auditItems = getTransactionAuditItems();
auditItems.put(nodeRef, auditItemProps);
}
public void onContentUpdate(NodeRef nodeRef)
{
AlfrescoTransactionSupport.bindListener(this);
String currentUser = this.authenticationService.getCurrentUserName();
Date now = Calendar.getInstance().getTime();
Map<QName, Serializable> auditItemProps = new HashMap<QName, Serializable>();
auditItemProps.put(ContentModel.PROP_AUDITEVENT, AuditTrailEvents.AUDIT_EVENT_UPDATE);
auditItemProps.put(ContentModel.PROP_AUDITUSER, currentUser);
auditItemProps.put(ContentModel.PROP_AUDITTIMESTAMP, now);
Map<NodeRef, Map<QName, Serializable>> auditItems = getTransactionAuditItems();
auditItems.put(nodeRef, auditItemProps);
}
/**
* @param policyComponent the policy component
*/
public void setPolicyComponent(PolicyComponent policyComponent)
{
this.policyComponent = policyComponent;
}
/**
* @param authenticationService the authentication service
*/
public void setAuthenticationService(AuthenticationService authenticationService)
{
this.authenticationService = authenticationService;
}
public void setAuditTrailService(AuditTrailService auditTrailService)
{
this.auditTrailService = auditTrailService;
}
public void flush()
{
//NO OP
}
public void beforeCommit(boolean readOnly)
{
//NO OP
}
public void beforeCompletion()
{
//NO OP
}
public void afterCommit()
{
Map<NodeRef, Map<QName, Serializable>> auditItems = getTransactionAuditItems();
for(NodeRef ref : auditItems.keySet())
{
Map<QName, Serializable> props = auditItems.get(ref);
this.auditTrailService.createAuditTrailEntry(ref, props);
}
AlfrescoTransactionSupport.unbindResource(AUDIT_TRAIL_ITEMS);
}
public void afterRollback()
{
//NO OP
}
private Map<NodeRef, Map<QName, Serializable>> getTransactionAuditItems()
{
Map<NodeRef, Map<QName, Serializable>> auditItems = (Map<NodeRef, Map<QName, Serializable>>)AlfrescoTransactionSupport.getResource(AUDIT_TRAIL_ITEMS);
if(auditItems == null)
{
auditItems = new HashMap<NodeRef, Map<QName, Serializable>>();
AlfrescoTransactionSupport.bindResource(AUDIT_TRAIL_ITEMS, auditItems);
}
return auditItems;
}
}
public NodeRef createAuditTrailEntry(NodeRef auditedItem, Map<QName, Serializable> auditTrailProps)
{
NodeRef auditTrailItem = null;
try
{
// get the content id
String contentId = (String)this.nodeService.getProperty(auditedItem, ContentModel.PROP_NODE_UUID);
// add the content id to the properties
auditTrailProps.put(ContentModel.PROP_AUDITEDNODEID, contentId);
// create the audit trail item
auditTrailItem = this.nodeService.createNode(
getAuditTrailContainer(), ContentModel.ASSOC_CHILDREN,
ContentModel.TYPE_AUDITTRAILITEM, ContentModel.TYPE_AUDITTRAILITEM,
auditTrailProps).getChildRef();
}
catch(Exception e)
{
System.out.println(e);
}
return auditTrailItem;
}
Tags
Find what you came for
We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.