public MembershipRequest addMembershipRequest(long userId, long groupId, String comments)
      throws PortalException, SystemException {

    User user = userPersistence.findByPrimaryKey(userId);
    Date now = new Date();

    validate(comments);

    long membershipRequestId = counterLocalService.increment();

    MembershipRequest membershipRequest = membershipRequestPersistence.create(membershipRequestId);

    membershipRequest.setCompanyId(user.getCompanyId());
    membershipRequest.setUserId(userId);
    membershipRequest.setCreateDate(now);
    membershipRequest.setGroupId(groupId);
    membershipRequest.setComments(comments);
    membershipRequest.setStatusId(MembershipRequestConstants.STATUS_PENDING);

    membershipRequestPersistence.update(membershipRequest, false);

    try {
      notifyCommunityAdministrators(membershipRequest);
    } catch (IOException ioe) {
      throw new SystemException(ioe);
    }

    return membershipRequest;
  }