我在 spring / jsf组合方面相当新,作为初学者,我遇到了很多问题。首先是不那么大的文档,直到现在我已经设法通过试错方法超越了一些问题但现在我变得非常恼火。我使用MyEclipse创建了一个新的 Web项目,并使用了Scaffolding Spring CRUD功能,该功能可生成4层,域对象层,dao,服务和组件层。我有 2个表,用户和角色。 Users表有一个role_id列,它引用了Roles表的role_id。设置普通列的值并不是什么大问题,问题是设置role_id的值,该值是角色表的外键。我通过调用UsersComponent.users.roles.sid设置角色Id,然后尝试通过调用UsersComponent.saveUsers(UsersComponent.users)来保存用户,但它将我的role_id保存为1.在意思是时间我看到日志是将role_id设置为2,3或4。 我创建了一个page1.xhtml,它应该在数据库中添加一个新用户。
Users.java
@Entity
@NamedQueries({
@NamedQuery(name = "findAllUserss", query = "select myUsers from Users myUsers"),
@NamedQuery(name = "findUsersByFname", query = "select myUsers from Users myUsers where myUsers.fname = ?1"),
@NamedQuery(name = "findUsersByFnameContaining", query = "select myUsers from Users myUsers where myUsers.fname like ?1"),
@NamedQuery(name = "findUsersByIsActive", query = "select myUsers from Users myUsers where myUsers.isActive = ?1"),
@NamedQuery(name = "findUsersByLname", query = "select myUsers from Users myUsers where myUsers.lname = ?1"),
@NamedQuery(name = "findUsersByLnameContaining", query = "select myUsers from Users myUsers where myUsers.lname like ?1"),
@NamedQuery(name = "findUsersByPasswd", query = "select myUsers from Users myUsers where myUsers.passwd = ?1"),
@NamedQuery(name = "findUsersByPasswdContaining", query = "select myUsers from Users myUsers where myUsers.passwd like ?1"),
@NamedQuery(name = "findUsersByPrimaryKey", query = "select myUsers from Users myUsers where myUsers.sid = ?1"),
@NamedQuery(name = "findUsersBySid", query = "select myUsers from Users myUsers where myUsers.sid = ?1"),
@NamedQuery(name = "findUsersByUname", query = "select myUsers from Users myUsers where myUsers.uname = ?1"),
//@NamedQuery(name = "findRoleByUname", query = "select myUsers from Users myUsers where myUsers.roleId = ?1"),
@NamedQuery(name = "findUsersByUnameContaining", query = "select myUsers from Users myUsers where myUsers.uname like ?1") })
@Table(catalog = "alphacrm", schema = "LUT", name = "USERS")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(namespace = "Durandal/al/durandal/com/domain", name = "Users")
public class Users implements Serializable {
private static final long serialVersionUID = 1L;
private static Logger logger =Logger.getLogger(UsersComponentImpl.class.getName());
/**
*/
@Column(name = "SID", nullable = false)
@Basic(fetch = FetchType.EAGER)
@Id
@XmlElement
Integer sid;
/**
*/
@Column(name = "UNAME", length = 140, nullable = false)
@Basic(fetch = FetchType.EAGER)
@XmlElement
String uname;
/**
*/
@Column(name = "PASSWD", length = 256)
@Basic(fetch = FetchType.EAGER)
@XmlElement
String passwd;
/**
*/
@Column(name = "FNAME", length = 140)
@Basic(fetch = FetchType.EAGER)
@XmlElement
String fname;
/**
*/
@Column(name = "LNAME", length = 140)
@Basic(fetch = FetchType.EAGER)
@XmlElement
String lname;
/**
*/
@Column(name = "IS_ACTIVE")
@Basic(fetch = FetchType.EAGER)
@XmlElement
Integer isActive;
/**
*/
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({ @JoinColumn(name = "ROLE_ID", referencedColumnName = "SID") })
@XmlTransient
Roles roles;
/*
@Column(name = "ROLE_ID")
@Basic(fetch = FetchType.EAGER)
@XmlElement
Integer roleId;
*/
/**
*/
public void setSid(Integer sid) {
this.sid = sid;
}
/**
*/
public Integer getSid() {
return this.sid;
}
/**
*/
public void setUname(String uname) {
this.uname = uname;
}
/**
*/
public String getUname() {
return this.uname;
}
/**
*/
public void setPasswd(String passwd) {
this.passwd = passwd;
}
/**
*/
public String getPasswd() {
return this.passwd;
}
/**
*/
public void setFname(String fname) {
this.fname = fname;
}
/**
*/
public String getFname() {
return this.fname;
}
/**
*/
public void setLname(String lname) {
this.lname = lname;
}
/**
*/
public String getLname() {
return this.lname;
}
/**
*/
public void setIsActive(Integer isActive) {
this.isActive = isActive;
}
/**
*/
public Integer getIsActive() {
return this.isActive;
}
/**
*/
public void setRoles(Roles roles) {
logger.info("Entered->setRoles");
logger.info(roles.toString());
this.roles = roles;
}
/*
public void RolesId(int a) {
this.roles.sid = a;
}
*/
public Integer getRolesId() {
return roles.sid;
}
/**
*/
public Roles getRoles() {
logger.info("Entered->getRoles");
logger.info(roles.toString());
return roles;
}
/*
public int getRolesId() {
return roles.getSid();
}
*/
/**
*/
public Users() {
}
/**
* Copies the contents of the specified bean into this bean.
*
*/
public void copy(Users that) {
setSid(that.getSid());
setUname(that.getUname());
setPasswd(that.getPasswd());
setFname(that.getFname());
setLname(that.getLname());
setIsActive(that.getIsActive());
setRoles(that.getRoles());
}
/**
* Returns a textual representation of a bean.
*
*/
public String toString() {
StringBuilder buffer = new StringBuilder();
buffer.append("sid=[").append(sid).append("] ");
buffer.append("uname=[").append(uname).append("] ");
buffer.append("passwd=[").append(passwd).append("] ");
buffer.append("fname=[").append(fname).append("] ");
buffer.append("lname=[").append(lname).append("] ");
buffer.append("isActive=[").append(isActive).append("] ");
return buffer.toString();
}
/**
*/
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = (int) (prime * result + ((sid == null) ? 0 : sid.hashCode()));
return result;
}
/**
*/
public boolean equals(Object obj) {
if (obj == this)
return true;
if (!(obj instanceof Users))
return false;
Users equalCheck = (Users) obj;
if ((sid == null && equalCheck.sid != null) || (sid != null && equalCheck.sid == null))
return false;
if (sid != null && !sid.equals(equalCheck.sid))
return false;
return true;
}
}
Roles.java
@Entity
@NamedQueries({
@NamedQuery(name = "findAllRoless", query = "select myRoles from Roles myRoles"),
@NamedQuery(name = "findRolesByPrimaryKey", query = "select myRoles from Roles myRoles where myRoles.sid = ?1") })
@Table(catalog = "alphacrm", schema = "LUT", name = "ROLES")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(namespace = "Durandal/al/durandal/com/domain", name = "Roles")
@XmlRootElement(namespace = "Durandal/al/durandal/com/domain")
public class Roles implements Serializable {
private static final long serialVersionUID = 1L;
/**
*/
@Column(name = "SID", nullable = false)
@Basic(fetch = FetchType.EAGER)
@Id
@XmlElement
Integer sid;
/**
*/
@Column(name = "ROLE_NAME", length = 140, nullable = false)
@Basic(fetch = FetchType.EAGER)
@XmlElement
String roleName;
/**
*/
@Column(name = "DESCRIPTION", length = 140)
@Basic(fetch = FetchType.EAGER)
@XmlElement
String description;
/**
*/
@OneToMany(mappedBy = "roles", cascade = { CascadeType.REMOVE }, fetch = FetchType.LAZY)
@XmlElement(name = "", namespace = "")
java.util.Set<al.durandal.com.domain.Users> userses;
/**
*/
public void setSid(Integer sid) {
this.sid = sid;
}
/**
*/
public Integer getSid() {
return this.sid;
}
/**
*/
public void setRoleName(String roleName) {
this.roleName = roleName;
}
/**
*/
public String getRoleName() {
return this.roleName;
}
/**
*/
public void setDescription(String description) {
this.description = description;
}
/**
*/
public String getDescription() {
return this.description;
}
/**
*/
public void setUserses(Set<Users> userses) {
this.userses = userses;
}
/**
*/
public Set<Users> getUserses() {
if (userses == null) {
userses = new java.util.LinkedHashSet<al.durandal.com.domain.Users>();
}
return userses;
}
/**
*/
public Roles() {
}
/**
* Copies the contents of the specified bean into this bean.
*
*/
public void copy(Roles that) {
setSid(that.getSid());
setRoleName(that.getRoleName());
setDescription(that.getDescription());
setUserses(new java.util.LinkedHashSet<al.durandal.com.domain.Users>(that.getUserses()));
}
/**
* Returns a textual representation of a bean.
*
*/
public String toString() {
StringBuilder buffer = new StringBuilder();
buffer.append("sid=[").append(sid).append("] ");
buffer.append("roleName=[").append(roleName).append("] ");
buffer.append("description=[").append(description).append("] ");
return buffer.toString();
}
/**
*/
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = (int) (prime * result + ((sid == null) ? 0 : sid.hashCode()));
return result;
}
/**
*/
public boolean equals(Object obj) {
if (obj == this)
return true;
if (!(obj instanceof Roles))
return false;
Roles equalCheck = (Roles) obj;
if ((sid == null && equalCheck.sid != null) || (sid != null && equalCheck.sid == null))
return false;
if (sid != null && !sid.equals(equalCheck.sid))
return false;
return true;
}
}
UsersServiceImpl.java
/**
* Spring service that handles CRUD requests for Users entities
*
*/
@Service("UsersService")
@Transactional
public class UsersServiceImpl implements UsersService {
private static Logger logger =Logger.getLogger(UsersComponentImpl.class.getName());
/**
* DAO injected by Spring that manages Roles entities
*
*/
@Autowired
private RolesDAO rolesDAO;
/**
* DAO injected by Spring that manages Users entities
*
*/
@Autowired
private UsersDAO usersDAO;
/**
* Instantiates a new UsersServiceImpl.
*
*/
public UsersServiceImpl() {
}
/**
* Return a count of all Users entity
*
*/
@Transactional
public Integer countUserss() {
return ((Long) usersDAO.createQuerySingleResult("select count(o) from Users o").getSingleResult()).intValue();
}
/**
* Delete an existing Users entity
*
*/
@Transactional
public void deleteUsers(Users users) {
usersDAO.remove(users);
usersDAO.flush();
}
/**
*/
@Transactional
public Users findUsersByPrimaryKey(Integer sid) {
return usersDAO.findUsersByPrimaryKey(sid);
}
/**
*/
@Transactional
public int findUserByNameAndPassword(String uname,String passw) {
//return usersDAO.findUsersByPrimaryKey(sid);
Set<Users> usersFound = usersDAO.findUsersByUname(uname);
if (usersFound.size()>0)
//return "Exist";
return 1;
else
return 2;
/*
*
*
* Users existingUsers = usersDAO.findUsersByPrimaryKey(users.getSid());
if (existingUsers != null) {
if (existingUsers != users) {
existingUsers.setSid(users.getSid());
existingUsers.setUname(users.getUname());
existingUsers.setPasswd(users.getPasswd());
existingUsers.setFname(users.getFname());
existingUsers.setLname(users.getLname());
existingUsers.setIsActive(users.getIsActive());
*/
}
public Integer countUsersPass(String uname,String passwd) {
//return 3;
return ((Long) usersDAO.createQuerySingleResult("select count(o) from Users o where o.uname= ? and o.passwd= ? ",uname,passwd).getSingleResult()).intValue();
}
public Users loadThisUser (String uname){
// usersDAO.
logger.info("Just Entered in loadThisUSer 1");
Set<Users> users = usersDAO.findUsersByUname(uname);
Users f= new Users() ;
for (Iterator<Users> it = users.iterator(); it.hasNext(); ) {
logger.info("Just Entered in loadThisUSer 2");
f = it.next();
return f;
}
logger.info("Just Entered in loadThisUSer 3");
return f;
}
/*
public Integer findRoleIdByUname(String uname) {
//return 3;
//Roles roleHere = new Roles();
return usersDAO.findRoleByUname(uname);
//createQuerySingleResult("select count(o) from Users o where o.uname= ? and o.passwd= ? ",uname,passwd).getSingleResult()).intValue();
//return ((Long) usersDAO.createQuerySingleResult("select o.roles from Users o where o.uname= ? ",uname).getSingleResult()).intValue();
//return 2;
}
*/
/**
* Save an existing Roles entity
*
*/
@Transactional
public Users saveUsersRoles(Integer sid, Roles related_roles) {
Users users = usersDAO.findUsersByPrimaryKey(sid, -1, -1);
Roles existingroles = rolesDAO.findRolesByPrimaryKey(related_roles.getSid());
// copy into the existing record to preserve existing relationships
if (existingroles != null) {
existingroles.setSid(related_roles.getSid());
existingroles.setRoleName(related_roles.getRoleName());
existingroles.setDescription(related_roles.getDescription());
related_roles = existingroles;
} else {
related_roles = rolesDAO.store(related_roles);
rolesDAO.flush();
}
users.setRoles(related_roles);
related_roles.getUserses().add(users);
users = usersDAO.store(users);
usersDAO.flush();
related_roles = rolesDAO.store(related_roles);
rolesDAO.flush();
return users;
}
/**
* Save an existing Users entity
*
*/
@Transactional
public void saveUsers(Users users) {
Users existingUsers = usersDAO.findUsersByPrimaryKey(users.getSid());
if (existingUsers != null) {
if (existingUsers != users) {
existingUsers.setSid(users.getSid());
existingUsers.setUname(users.getUname());
existingUsers.setPasswd(users.getPasswd());
existingUsers.setFname(users.getFname());
existingUsers.setLname(users.getLname());
existingUsers.setIsActive(users.getIsActive());
logger.info("Just Entered in saveUsers >>"+users.getRoles().toString());
//existingUsers.setRoles(users.getRoles());
}
users = usersDAO.store(existingUsers);
logger.info("existingUsers --> "+existingUsers.toString());
} else {
//users.setRoles(users.getRoles());
users = usersDAO.store(users);
logger.info("users --> "+users.toString());
}
usersDAO.flush();
}
/**
* Return all Users entity
*
*/
@Transactional
public List<Users> findAllUserss(Integer startResult, Integer maxRows) {
return new java.util.ArrayList<Users>(usersDAO.findAllUserss(startResult, maxRows));
}
/**
* Load an existing Users entity
*
*/
@Transactional
public Set<Users> loadUserss() {
return usersDAO.findAllUserss();
}
/**
* Delete an existing Roles entity
*
*/
@Transactional
public Users deleteUsersRoles(Integer users_sid, Integer related_roles_sid) {
Users users = usersDAO.findUsersByPrimaryKey(users_sid, -1, -1);
Roles related_roles = rolesDAO.findRolesByPrimaryKey(related_roles_sid, -1, -1);
users.setRoles(null);
related_roles.getUserses().remove(users);
users = usersDAO.store(users);
usersDAO.flush();
related_roles = rolesDAO.store(related_roles);
rolesDAO.flush();
rolesDAO.remove(related_roles);
rolesDAO.flush();
return users;
}
}
UsersComponentImpl
/**
* Spring Component that handles CRUD requests for Users entities
*
*/
@Scope("session")
@Component("UsersComponent")
public class UsersComponentImpl implements UsersComponent {
/**
* Data type variable that provides CRUD operations for Users entities
*
*/
private Users users;
private Roles roles;
/**
* DAO injected by Spring that manages Users entities
*
*/
@Autowired
private UsersDAO usersDAO;
/**
* Service injected by Spring that provides CRUD operations for Users entities
*
*/
@Autowired
private UsersService usersService;
/**
*/
public UsersComponentImpl() {
}
/**
* Select an existing Users entity
*
*/
@Transactional
public String selectUsers(Integer sidKey) {
users = usersDAO.findUsersByPrimaryKey(sidKey);
return "/jsf/users/viewUsers.xhtml";
}
/**
* Create a new Users entity
*
*/
@Transactional
public String newUsers() {
users = new Users();
return "/jsf/users/createUsers.xhtml";
}
/**
* Edit an existing Users entity
*
*/
@Transactional
public String editUsers(Integer sidKey) {
users = usersDAO.findUsersByPrimaryKey(sidKey);
return "/jsf/users/editUsers.xhtml";
}
/**
* Getter for variable Users
*
*/
@Transactional
public Users getUsers() {
return users;
}
/**
* Show all Users entities
*
*/
@Transactional
public List<Users> listUserss() {
return new java.util.ArrayList<Users>(usersService.loadUserss());
}
public String returnUserPassw(String uname,String passw){
int userFound;
Users userNow= new Users();
//userFound=usersService.findUserByNameAndPassword(uname, passw);
//countUsersPass();
userFound=usersService.countUsersPass(uname, passw);
if (userFound==1)
{
//usersLoaded=usersService.loadThisUser(uname);
userNow =usersService.loadThisUser(uname);
//users.setFname(userNow.getFname());
users.copy(userNow);
//FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Info", "Username and password is correct !"));
//goHome();
return "/pages/page1.xhtml";
}
else
{
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Fatal!", "Username or password are not correct !!!"));
return "/pages/login.xhtml";
}
//if (userFound==0)
//FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Info", "Unedefined Action !!! "+userFound));
}
/**
* Find RoleId by Uname
*/
public void findRoleIdByUname(String uname){
//usersService.findRoleIdByUname(uname);
}
/**
* Select the Users entity for display allowing the user to confirm that they would like to delete the entity
*
*/
@Transactional
public String confirmDeleteUsers(Integer sidKey) {
users = usersDAO.findUsersByPrimaryKey(sidKey);
return "/jsf/users/deleteUsers.xhtml";
}
public String logout(){
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
return "/pages/login.xhtml";
}
/**
* Save an existing Users entity
* @return
*
*/
@Transactional
public void saveUsers(Users users) {
usersService.saveUsers(users);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Info", "User was added succesfully !!!"));
//return "/jsf/users/listUserss.xhtml";
}
/**
* Delete an existing Users entity
*
*/
@Transactional
public String deleteUsers(Integer sidKey) {
Users users = usersDAO.findUsersByPrimaryKey(sidKey);
usersService.deleteUsers(users);
return "/jsf/users/listUserss.xhtml";
}
@PostConstruct
public void init() {
users = new Users();
roles = new Roles();
//roles = new Roles();
//users.setSid(3);
}
}
page1.xhtml
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core"
template="/templates/template.xhtml">
<ui:define name="metadata">
</ui:define>
<ui:define name="content">
<h:form prependId="false">
<!--
<p:button value="#{usersmsgs['navigation.back']}" >
<f:param value="#{usersmsgs['navigation.back']}" action="/jsf/users/listUserss.xhtml" name="backButton"/>
</p:button>
-->
<p:panel header="#{usersmsgs['users.title']} Details" style="width:50%">
<h:panelGrid id="detail" columns="2" styleClass="grid" columnClasses="label,value">
<h:outputText value="#{usersmsgs['users.sid.title']}:*" />
<p:inputText id="users_sid" value="#{UsersComponent.users.sid}" required="true" label="users_sid" />
<h:outputText value="#{usersmsgs['users.uname.title']}:" />
<p:inputText id="users_uname" value="#{UsersComponent.users.uname}" required="false" label="users_uname" />
<h:outputText value="#{usersmsgs['users.passwd.title']}:" />
<p:password id="password" value="#{UsersComponent.users.passwd}" required="false" label="users_passwd" />
<h:outputText value="#{usersmsgs['users.fname.title']}:" />
<p:inputText id="users_fname" value="#{UsersComponent.users.fname}" required="false" label="users_fname" />
<h:outputText value="#{usersmsgs['users.lname.title']}:" />
<p:inputText id="users_lname" value="#{UsersComponent.users.lname}" required="false" label="users_lname" />
<h:outputText value="#{usersmsgs['users.isactive.title']}:" />
<p:inputText id="users_isactive" value="#{UsersComponent.users.isActive}" required="false" label="users_isactive" />
<h:outputText value="#{usersmsgs['users.roles.title']}:" />
<p:inputText id="users_roles" value="#{UsersComponent.users.roles.sid}" required="false" label="users_roles" />
<h:panelGroup>
<p:commandButton ajax="true" style="margin-right:20px;" value="#{usersmsgs['navigation.save']}" action="#{UsersComponent.saveUsers(UsersComponent.users)}"/>
</h:panelGroup>
</h:panelGrid>
</p:panel>
</h:form>
<ui:debug hotkey="y"> </ui:debug>
</ui:define>
</ui:composition>
的console.log
INFO: Entered->getRoles
Mar 16, 2015 11:27:27 AM al.durandal.com.domain.Users getRoles
INFO: sid=[4] roleName=[Administrator] description=[Administrator of the system]
Mar 16, 2015 11:27:27 AM al.durandal.com.domain.Users getRoles
INFO: Entered->getRoles
Mar 16, 2015 11:27:27 AM al.durandal.com.domain.Users getRoles
INFO: sid=[4] roleName=[Administrator] description=[Administrator of the system]
Mar 16, 2015 11:27:28 AM al.durandal.com.service.UsersServiceImpl saveUsers
INFO: users --> sid=[2124] uname=[panddwi3ed] passwd=[] fname=[fnamed] lname=[lnamed] isActive=[1]
Mar 16, 2015 11:27:28 AM al.durandal.com.domain.Users getRoles
INFO: Entered->getRoles
Mar 16, 2015 11:27:28 AM al.durandal.com.domain.Users getRoles
INFO: sid=[3] roleName=[Administrator] description=[Administrator of the system]
Mar 16, 2015 11:27:28 AM al.durandal.com.domain.Users getRoles
INFO: Entered->getRoles
Mar 16, 2015 11:27:28 AM al.durandal.com.domain.Users getRoles
INFO: sid=[3] roleName=[Administrator] description=[Administrator of the system]
Mar 16, 2015 11:27:28 AM al.durandal.com.domain.Users getRoles
INFO: Entered->getRoles
Mar 16, 2015 11:27:28 AM al.durandal.com.domain.Users getRoles
INFO: sid=[3] roleName=[Administrator] description=[Administrator of the system]
Mar 16, 2015 11:27:28 AM al.durandal.com.domain.Users getRoles
INFO: Entered->getRoles
Mar 16, 2015 11:27:28 AM al.durandal.com.domain.Users getRoles
INFO: sid=[3] roleName=[Administrator] description=[Administrator of the system]
Mar 16, 2015 11:27:28 AM al.durandal.com.domain.Users getRoles
INFO: Entered->getRoles
Mar 16, 2015 11:27:28 AM al.durandal.com.domain.Users getRoles
INFO: sid=[3] roleName=[Administrator] description=[Administrator of the system]
Mar 16, 2015 11:27:28 AM al.durandal.com.domain.Users getRoles
INFO: Entered->getRoles
Mar 16, 2015 11:27:28 AM al.durandal.com.domain.Users getRoles
INFO: sid=[3] roleName=[Administrator] description=[Administrator of the system]
Mar 16, 2015 11:27:28 AM al.durandal.com.domain.Users getRoles
INFO: Entered->getRoles
Mar 16, 2015 11:27:28 AM al.durandal.com.domain.Users getRoles
INFO: sid=[3] roleName=[Administrator] description=[Administrator of the system]
Mar 16, 2015 11:27:28 AM al.durandal.com.domain.Users getRoles
INFO: Entered->getRoles
Mar 16, 2015 11:27:28 AM al.durandal.com.domain.Users getRoles
INFO: sid=[3] roleName=[Administrator] description=[Administrator of the system]
Mar 16, 2015 11:27:28 AM al.durandal.com.domain.Users getRoles
INFO: Entered->getRoles
Mar 16, 2015 11:27:28 AM al.durandal.com.domain.Users getRoles
INFO: sid=[3] roleName=[Administrator] description=[Administrator of the system]