Foros de discusión
PrincipalThreadLocal.getName() is null
Veronica Rodriguez, modificado hace 7 años.
PrincipalThreadLocal.getName() is null
New Member Mensajes: 3 Fecha de incorporación: 31/03/17 Mensajes recientes
Hi!,
I have installed audit portly and I audit add, download, remove and update files in Documents and Media.
I am able to get value for PrincipalThreadLocal.getName(); in my controller class, where any ways i have request object, but getting null value in listener class only when audit download.
Any help regarding this?
Thanks
I have installed audit portly and I audit add, download, remove and update files in Documents and Media.
I am able to get value for PrincipalThreadLocal.getName(); in my controller class, where any ways i have request object, but getting null value in listener class only when audit download.
Any help regarding this?
Thanks
Amos Fong, modificado hace 7 años.
RE: PrincipalThreadLocal.getName() is null
Liferay Legend Mensajes: 2047 Fecha de incorporación: 7/10/08 Mensajes recientes
What kind of listener class is it? If it's asynchronous (ie new thread), then the threadLocals won't be available.
Veronica Rodriguez, modificado hace 7 años.
RE: PrincipalThreadLocal.getName() is null
New Member Mensajes: 3 Fecha de incorporación: 31/03/17 Mensajes recientes
I called DLFileEntryListener class in that extends to BaseModelListener<DLFileEntry>
But in the same class for audit add, delete or update files it works fine.
But in the same class for audit add, delete or update files it works fine.
Amos Fong, modificado hace 7 años.
RE: PrincipalThreadLocal.getName() is null
Liferay Legend Mensajes: 2047 Fecha de incorporación: 7/10/08 Mensajes recientes
It's not clear to me what's going on. Can you post some code snippets where it doesn't work?
Veronica Rodriguez, modificado hace 7 años.
RE: PrincipalThreadLocal.getName() is null
New Member Mensajes: 3 Fecha de incorporación: 31/03/17 Mensajes recientes
Ok
I have this class
and implement this method
And the problem is here,
This method is the same as when audit update file.
Sorry, but I new in Liferay :/
I have this class
public class DLFileEntryListener extends BaseModelListener<dlfileentry></dlfileentry>
and implement this method
public void onBeforeUpdate(DLFileEntry dlFileEntry) throws ModelListenerException{
_log.info("Before Update File Entry Action ready to run");
boolean trueUpdate=true;
String actionType=_UPDATE;
String additionalInfo = "Document was edited successfully";
long companyId = CompanyThreadLocal.getCompanyId();
long userId = 0;
String userName="dd";
User updater = null;
try{
DLFileEntry oldDlFileEntry = DLFileEntryLocalServiceUtil.getDLFileEntry(dlFileEntry.getFileEntryId());
//check if event corresponds to Download
if(oldDlFileEntry.getReadCount() < dlFileEntry.getReadCount()){
_log.info("Download file");
actionType=_DOWNLOAD;
additionalInfo = "Document was downloaded successfully";
}
}
catch(PortalException e){
e.printStackTrace();
}
catch(SystemException e){
e.printStackTrace();
}
//get the user that invoked the action of update
if (PrincipalThreadLocal.getName() != null) {
userId = GetterUtil.getLong(PrincipalThreadLocal.getName());
userName = Long.toString(userId);
_log.info("User ID: "+userId);
try{
userName = UserLocalServiceUtil.getUser(userId).getFullName();
// updater = UserLocalServiceUtil.getUser(userId);
// userName = updater.getFullName();
} catch(PortalException e){
e.printStackTrace();
userName = "Portail exception:"+userId;
_log.error("Failed to retrieve username with user id:"+userId);
}catch(SystemException e){
e.printStackTrace();
userName = "SystemException:"+userId;
_log.error("Failed to retrieve username with user id:"+userId);
}
}else{
AuditRequestThreadLocal auditRequestThreadLocal = AuditRequestThreadLocal.getAuditThreadLocal();
long realUserId = auditRequestThreadLocal.getRealUserId();
userName = PortalUtil.getUserName( realUserId, "idUsuario" + Long.toString(realUserId));
}
long docId = dlFileEntry.getFileEntryId();
String fileTitle = dlFileEntry.getTitle();
String fileVersion = dlFileEntry.getVersion();
_log.debug("Version: "+dlFileEntry.getVersion());
TimeZone timeZone = TimeZone.getTimeZone("UTC");
now = Calendar.getInstance(timeZone);
Date modified = now.getTime();
long modifiedTime = modified.getTime();
System.out.println("modified Time "+modifiedTime);
Date create = dlFileEntry.getCreateDate();
long createTime = create.getTime();
System.out.println("Create Time "+createTime);
long difference = java.lang.Math.abs(modifiedTime - createTime);
System.out.println("Difference is "+difference);
if (difference < MAXTime) {
trueUpdate=false;
_log.info("file entry "+dlFileEntry.getTitle()+" has just been created, no reason to log it as an update");
//Check if document is on a workflow and if not, send an e-mail
try{
DLFileVersion dlFileVersion = dlFileEntry.getFileVersion();
if(dlFileVersion !=null){
//status: 0 => no workflow exists
if (dlFileVersion.getStatus() == 0) {
//sendMail(updater, dlFileEntry);
}
}
}
catch(PortalException e){
e.printStackTrace();
}
catch(SystemException e){
e.printStackTrace();
}
}else{
_log.info("Normal update");
}
//Add AuditDoc POJO
if(trueUpdate){
try{
if(dlFileEntry.isInTrash()||dlFileEntry.isInTrashContainer()){
_log.debug("File Entry is in Trash");
additionalInfo = "Document was deleted succesfully";
actionType=_DELETE;
}
else{
_log.debug("File Entry is not in Trash");
}
AuditDoc auditDoc = AuditDocLocalServiceUtil.addAuditDoc(userName, companyId, docId, create, modified, actionType, _DOC, additionalInfo, fileTitle, fileVersion);
_log.info("AuditDoc record was added with id:"+auditDoc.getId());
}
catch(PortalException e){
e.printStackTrace();
_log.error("Failed to add an AuditDoc record");
}
catch(SystemException e){
e.printStackTrace();
_log.error("Failed to add an AuditDoc record");
}
}
}
And the problem is here,
//get the user that invoked the action of update
if (PrincipalThreadLocal.getName() != null) {
userId = GetterUtil.getLong(PrincipalThreadLocal.getName());
userName = Long.toString(userId);
_log.info("User ID: "+userId);
try{
userName = UserLocalServiceUtil.getUser(userId).getFullName();
// updater = UserLocalServiceUtil.getUser(userId);
// userName = updater.getFullName();
} catch(PortalException e){
e.printStackTrace();
userName = "Portail exception:"+userId;
_log.error("Failed to retrieve username with user id:"+userId);
}catch(SystemException e){
e.printStackTrace();
userName = "SystemException:"+userId;
_log.error("Failed to retrieve username with user id:"+userId);
}
}else{
System.out.println("PrincipalThreadLocal.getName null");
}
This method is the same as when audit update file.
Sorry, but I new in Liferay :/
Amos Fong, modificado hace 7 años.
RE: PrincipalThreadLocal.getName() is null
Liferay Legend Mensajes: 2047 Fecha de incorporación: 7/10/08 Mensajes recientes
It looks like it should work to me.
What does this mean? How is an update to DLFileEntry triggered?
only when audit download
What does this mean? How is an update to DLFileEntry triggered?
Alex Voronin, modificado hace 6 años.
RE: PrincipalThreadLocal.getName() is null
New Member Mensajes: 17 Fecha de incorporación: 7/02/13 Mensajes recientes
I ran into the same problem. In version 6.2, this code worked fine. Is there any solution?