-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 9 posts ] 
Author Message
 Post subject: need a help in HQL
PostPosted: Mon Sep 25, 2006 5:06 am 
Newbie

Joined: Mon Jul 31, 2006 1:47 am
Posts: 6
hi all this my HQL code


select distinct g.gpName from EmpGroupVO eg inner join GroupVO g g.gpId = eg.gpId where g.gpId not in (select gpId from EmpGroupVO where emp_id = :id)

but i'm getting error when i try to retreive anyone plz help me
the error is

Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: = near line 1, column 107 [select distinct g.gpName from com.tt.notification.vo.EmpGroupVO eg inner join GroupVO g inner join g.gpId = eg.gpId where g.gpId not in (select gpId from com.tt.notification.vo.EmpGroupVO where emp_id = :id)]
at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:59)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:244)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:155)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:109)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:75)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1583)
at com.tt.notification.dao.EmpGroupDAO.LoadGroup(EmpGroupDAO.java:120)
... 7 more
Caused by: line 1:107: unexpected token: =
at org.hibernate.hql.antlr.HqlBaseParser.fromJoin(HqlBaseParser.java:1735)
at org.hibernate.hql.antlr.HqlBaseParser.fromClause(HqlBaseParser.java:1420)
at org.hibernate.hql.antlr.HqlBaseParser.selectFrom(HqlBaseParser.java:1130)
at org.hibernate.hql.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:702)
at org.hibernate.hql.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:296)
at org.hibernate.hql.antlr.HqlBaseParser.statement(HqlBaseParser.java:159)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:238)
... 16 more

thanx in advance


Top
 Profile  
 
 Post subject:
PostPosted: Mon Sep 25, 2006 8:59 am 
Beginner
Beginner

Joined: Thu Aug 24, 2006 6:01 am
Posts: 49
Location: sophia-antipolis, France
Hi,

it's hard to tell without your class and mapping files, but I would guess that emp_id is a column name and not a property name. You need to change it to the property (don't use any column (or table) names in your HQL).

kim


Top
 Profile  
 
 Post subject: Re: need a help in HQL
PostPosted: Mon Sep 25, 2006 9:11 am 
Senior
Senior

Joined: Tue Aug 23, 2005 8:52 am
Posts: 181
sharaf31 wrote:
hi all this my HQL code


select distinct g.gpName from EmpGroupVO eg inner join GroupVO g g.gpId = eg.gpId where g.gpId not in (select gpId from EmpGroupVO where emp_id = :id)


That looks like plain SQL not HQL. When you do a inner join, you associate two entities through a mapping and innerjoin will automatically map the keys that match the two entities. Refer to http://www.hibernate.org/hib_docs/refer ... ryhql.html and checkout the section on Associations.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Sep 25, 2006 11:41 pm 
Newbie

Joined: Mon Jul 31, 2006 1:47 am
Posts: 6
well now my HQL code is this.. but yet i dont know how to correct it..

"select distinct g.gpName from EmpGroupVO eg inner join GroupVO g g.gpId = eg.gpId where g.gpId not in (select empg.gpId from EmpGroupVO empg where emp_id = 1)"



Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: g near line 1, column 89 [select distinct g.gpName from com.tt.notification.vo.EmpGroupVO eg inner join GroupVO g g.gpId = eg.gpId where g.gpId not in (select empg.gpId from com.tt.notification.vo.EmpGroupVO empg where emp_id = 1)]
at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:59)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:244)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:155)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:109)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:75)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1583)
at com.tt.notification.dao.EmpGroupDAO.LoadGroup(EmpGroupDAO.java:121)
... 7 more
Caused by: line 1:89: unexpected token: g
at org.hibernate.hql.antlr.HqlBaseParser.fromJoin(HqlBaseParser.java:1765)
at org.hibernate.hql.antlr.HqlBaseParser.fromClause(HqlBaseParser.java:1420)
at org.hibernate.hql.antlr.HqlBaseParser.selectFrom(HqlBaseParser.java:1130)
at org.hibernate.hql.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:702)
at org.hibernate.hql.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:296)
at org.hibernate.hql.antlr.HqlBaseParser.statement(HqlBaseParser.java:159)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:238)

thing is i'm new to hibernate n HQL this my 1st phase on HQL for relational objects.. i need some hibernate guru to solve this problem
thanx in advance
cheers
sharaf


Top
 Profile  
 
 Post subject:
PostPosted: Tue Sep 26, 2006 3:21 am 
Beginner
Beginner

Joined: Thu Aug 24, 2006 6:01 am
Posts: 49
Location: sophia-antipolis, France
Hi,

I really cannot help much without seeing your mapping. I'm going to try another guess:

Code:
SELECT distinct eg
FROM EmpGroupVO eg
INNER JOIN eg.groupVO
WHERE eg.groupVO.id not in (
      select empg.id from EmpGroupVO empg
      where empg.empId = 1)


Since I don't know the names of your properties, I can't really give you a correct response. Also, I'm not sure how your entities are related and what the purpose of your query is.

I'm assuming that you don't really just want the name of the object, but the object entirely (maybe you don't know it yet).

If this doesn't help you, you really need to post more information if you want anyone to be able to help you.


Top
 Profile  
 
 Post subject:
PostPosted: Tue Sep 26, 2006 3:48 am 
Newbie

Joined: Mon Jul 31, 2006 1:47 am
Posts: 6
hi wykoff

thanx for the query yet i'm getting error saying

Exception in thread "main" com.tt.notification.exception.DataAccessLayerException: org.hibernate.QueryException: could not resolve property: groupVO of: com.tt.notification.vo.EmpGroupVO [SELECT distinct eg
FROM com.tt.notification.vo.EmpGroupVO eg
INNER JOIN eg.groupVO
WHERE eg.groupVO.id not in (
select empg.id from com.tt.notification.vo.EmpGroupVO empg
where empg.empId = 1) ]
at com.tt.notification.dao.EmpGroupDAO.handleException(EmpGroupDAO.java:143)
at com.tt.notification.dao.EmpGroupDAO.LoadGroup(EmpGroupDAO.java:132)
at com.tt.notification.dao.EmpGroupDAOTest.testGroup(EmpGroupDAOTest.java:53)
at com.tt.notification.dao.EmpGroupDAOTest.main(EmpGroupDAOTest.java:65)
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 com.intellij.rt.execution.application.AppMain.main(AppMain.java:86)
Caused by: org.hibernate.QueryException: could not resolve property: groupVO of: com.tt.notification.vo.EmpGroupVO [SELECT distinct eg
FROM com.tt.notification.vo.EmpGroupVO eg
INNER JOIN eg.groupVO
WHERE eg.groupVO.id not in (
select empg.id from com.tt.notification.vo.EmpGroupVO empg
where empg.empId = 1) ]
at org.hibernate.persister.entity.AbstractPropertyMapping.throwPropertyException(AbstractPropertyMapping.java:43)
at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:37)
at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1265)
at org.hibernate.hql.ast.tree.FromElementType.getPropertyType(FromElementType.java:279)
at org.hibernate.hql.ast.tree.FromElement.getPropertyType(FromElement.java:372)
at org.hibernate.hql.ast.tree.DotNode.getDataType(DotNode.java:539)
at org.hibernate.hql.ast.tree.DotNode.prepareLhs(DotNode.java:221)
at org.hibernate.hql.ast.tree.DotNode.resolve(DotNode.java:172)
at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:94)
at org.hibernate.hql.ast.HqlSqlWalker.createFromJoinElement(HqlSqlWalker.java:315)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.joinElement(HqlSqlBaseWalker.java:3268)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3060)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2938)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:218)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:158)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:109)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:75)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1583)
at com.tt.notification.dao.EmpGroupDAO.LoadGroup(EmpGroupDAO.java:122)

any how here are my mappings and my POJO's

Group.hbm.xml
-------------------------
<hibernate-mapping>
<class name="com.tt.notification.vo.GroupVO" table="en_group">
<id name="gpId" column= "gpId" type="int">
<generator class ="increment"/>

</id>
<many-to-one name="empGroupVO" column="GpId" class="com.tt.notification.vo.EmpGroupVO" />
<property name="gpName"/>
<property name="gpDesc"/>
</class>
</hibernate-mapping>
-------------------------------------------------

Employee.hbm.xml
-------------------------------------------------
<hibernate-mapping>
<class name="com.tt.notification.vo.EmployeeVO" table="en_employee">
<id name="empId" column= "emp_id" type="int">
<generator class ="increment"/>
</id>
<property name="empName"/>
<property name="empDOB" type="date"/>
<property name="empAddress"/>
<property name="empTel" type="int"/>
<property name="empEmail"/>
<property name="empLastName"/>
<set name="empGroupVO">
<key column="emp_id" />
<one-to-many class="com.tt.notification.vo.EmpGroupVO"/>
</set>
</class>
</hibernate-mapping>
----------------------------------------
EmpGroup.hbm.xml
-------------------------------------
<hibernate-mapping>
<class name="com.tt.notification.vo.EmpGroupVO" table="en_empGroup">
<id name="empGpId" column="empGp_id" type="int">
<generator class="increment"/>
</id>
<property name="emp_id"/>
<property name="gpId"/>
</class>
</hibernate-mapping>
---------------------------------------------------------

POJO's
=================
EmployeeVO.java
------------------------------------
public class EmployeeVO implements Serializable{


private int empId;
private String empName;
private String empLastName;
private String empEmail;
private String empAddress;
private int empTel;
private Date empDOB;
private Set<EmpGroupVO> empGroupVO;


public EmployeeVO() {
}

public String getEmpAddress() {
return empAddress;
}

public void setEmpAddress(String empAddress) {
this.empAddress = empAddress;
}

public String getEmpEmail() {
return empEmail;
}

public void setEmpEmail(String empEmail) {
this.empEmail = empEmail;
}

public String getEmpLastName() {
return empLastName;
}

public void setEmpLastName(String empLastName) {
this.empLastName = empLastName;
}


public int getEmpTel() {
return empTel;
}

public void setEmpTel(int empTel) {
this.empTel = empTel;
}

public int getEmpId() {
return empId;
}

public void setEmpId(int eventTempId) {
this.empId = eventTempId;
}

public String getEmpName() {
return empName;
}

public void setEmpName(String empName) {
this.empName = empName;
}

public Date getEmpDOB() {
return empDOB;
}

public void setEmpDOB(Date empDOB) {
this.empDOB = empDOB;
}
public Set<EmpGroupVO> getEmpGroupVO() {
return empGroupVO;
}

public void setEmpGroupVO(Set<EmpGroupVO> empGroupVO) {
this.empGroupVO = empGroupVO;
}


}
------------------------------------------------------
GroupVO.java
-----------------------------------------------------
public class GroupVO implements Serializable{

private int gpId;
private String gpName;
private String gpDesc;
private Set<EmpGroupVO> empGroupVO;

public GroupVO() {
}

public int getGpId() {
return gpId;
}

public void setGpId(int gpId) {
this.gpId = gpId;
}

public String getGpName() {
return gpName;
}

public void setGpName(String gpName) {
this.gpName = gpName;
}

public String getGpDesc() {
return gpDesc;
}

public void setGpDesc(String gpDesc) {
this.gpDesc = gpDesc;
}
public Set<EmpGroupVO> getEmpGroupVO() {
return empGroupVO;
}

public void setEmpGroupVO(Set<EmpGroupVO> empGroupVO) {
this.empGroupVO = empGroupVO;
}

}
---------------------------------------------------
EmpGroupVO.java
-----------------------------------------------------
public class EmpGroupVO implements Serializable{


private EmployeeVO employeeVO;
private GroupVO groupVO;
private int empGpId;
private int emp_id;
private int gpId;



public EmpGroupVO() {
}

public int getEmpGpId() {
return empGpId;
}

public void setEmpGpId(int empGpId) {
this.empGpId = empGpId;
}

public EmployeeVO getEmployeeVO() {
return employeeVO;
}

public void setEmployeeVO(EmployeeVO employeeVO) {
this.employeeVO = employeeVO;
}

public int getGpId() {
return gpId;
}

public void setGpId(int gpId) {
this.gpId = gpId;
}
public GroupVO getGroupVO() {
return groupVO;
}

public void setGroupVO(GroupVO groupVO) {
this.groupVO = groupVO;
}

public int getEmp_id() {
return emp_id;
}

public void setEmp_id(int emp_id) {
this.emp_id = emp_id;
}

}
-------------------------------------------
i this this can help u to solve my problem


Top
 Profile  
 
 Post subject:
PostPosted: Tue Sep 26, 2006 7:13 am 
Beginner
Beginner

Joined: Thu Aug 24, 2006 6:01 am
Posts: 49
Location: sophia-antipolis, France
I haven't had enough time to really look at your mappings and I haven't used the XML mapping before (I use annotations), but I think first of all you have a problem with your model. i think you have a many-to-many relationship between Employee and Group with a relation table like this:


Code:
                     __________________
                    |                  |     
                    | EMP_GROUP        |     
                    |__________________|     
                    |                  |     
                    | *EMP_ID          |     
                    | *GROUP_ID        |
                    |__________________|   
                             |
                             |
____________                |
|             |              |                  _____________
|EMPLOYEE     |              |                 |             | 
|_____________|              |                 | GROUP       |
|             |   *          |            *    |_____________|
| *EMP_ID     | <-------------------------->   |             |
|  FIRSTNAMR  |                                | *GROUP_ID   |
|  LASTNAME   |                                |  NAME       |
|  ADDRESS    |                                |  DESC       |
|  EMAIL      |                                |_____________|
|_____________|                                 



You shouldn't need your relation POJO (EmpGroupVO) at all. You need to look at how to map many-to-many relations in the Hibernate reference.

If I find some time, I can try to see what's wrong with your HQL/mapping as you have it now if you really want to keep your POJOs as-is.


Top
 Profile  
 
 Post subject:
PostPosted: Wed Sep 27, 2006 1:33 am 
Newbie

Joined: Mon Jul 31, 2006 1:47 am
Posts: 6
thanx wykoff
i really appritiate ur tiredless help.. but although i'm new to hibernate many-to-many i'm having some problem in performing CRUD operations. the associate table. since i've seperated my DAO's from my testClasses. here is a code for my test class n DAO classes which use hibernate V3 SessionFactory.Now problem is how do i perform CRUD operations from my test classes without writing DAO codes inside them????(i've given value object class code in past posting )
========================

EmpGroupDAOTest.java
---------------------------------------
public class EmpGroupDAOTest {

public void testCreate()throws NotificationException {
EmpGroupDAO empGDao = new EmpGroupDAO();
EmpGroupVO empGroupVO = new EmpGroupVO();
empGroupVO.setEmp_id(2);
empGroupVO.setGpId(3);
empGDao.create(empGroupVO);
}
public static void main(String arg[])throws NotificationException{
EmpGroupDAOTest empGroupDAOTest = new EmpGroupDAOTest();
empGroupDAOTest.testCreate();
}

}
----------------------------------------------
class EmpGroupDAO.java
--------------------------------------------------
public class EmpGroupDAO
{

private Session session;
private Transaction transaction;

public EmpGroupDAO()throws NotificationException
{
HibernateFactory.buildIfNeeded();
}

public void create(EmpGroupVO empg)throws DataAccessLayerException
{
try
{
startOperation();
session.save(empg);
transaction.commit();
log.info("created");
}
catch(HibernateException e)
{
handleException(e);
}
finally
{
HibernateFactory.close(session);
}
}

--------------------------------------------------------------

thanx again
sharaf


Top
 Profile  
 
 Post subject:
PostPosted: Wed Sep 27, 2006 8:20 am 
Beginner
Beginner

Joined: Thu Aug 24, 2006 6:01 am
Posts: 49
Location: sophia-antipolis, France
Hi again,

Here's the many-to-many mapping:

Employee.java:
Code:
public class Employee implements Serializable {
   
    private List<Group> groups;
    ...
}


Group.java:
Code:
public class Group {

    private List<Employee> employees;
    ...
}



employee.hbm.xml:
Code:
<hibernate-mapping>
    <class name="Employee" table="en_employee">
        <id name="empId" column= "empId" type="int">
            <generator class ="increment"/>
        </id>
        <property name="empName"/>
        <property name="empDOB" type="date"/>
        <property name="empAddress"/>
        <property name="empTel" type="int"/>
        <property name="empEmail"/>
        <property name="empLastName"/>
        <set name="groups" table="en_group_employee">
            <key column="empId"/>
            <many-to-many column="gpId"
                      class="Group"/>
        </set>
    </class>
   
    <query name="findAllEmployees">
          <![CDATA[
              SELECT distinct emp
              FROM Employee emp
              LEFT JOIN FETCH emp.groups
              ]]>
     </query>
</hibernate-mapping>


group.hbm.xml:
Code:
<hibernate-mapping>
    <class name="Group" table="en_group">
        <id name="gpId" column= "gpId" type="int">
            <generator class ="increment"/>
        </id>
        <set name="employees" inverse="true" table="en_group_employee">
            <key column="gpId"/>
            <many-to-many column="empId"
                      class="Employee"/>
        </set>
        <property name="gpName"/>
        <property name="gpDesc"/>
    </class>
   
    <query name="findAllGroups">
          <![CDATA[
              SELECT distinct grp
              FROM Group grp
              LEFT JOIN FETCH grp.employees
              ]]>
     </query>
</hibernate-mapping>


EmployeeDao.java:
Code:

public class EmployeeDao {
    private Session session;
    private Transaction transaction;

    public EmployeeDao() {}

    public void create(Employee emp) {
        session = HibernateUtil.getSessionFactory().getCurrentSession();
        transaction = session.beginTransaction();

        session.save(emp);
        transaction.commit();

        //session.close();

    }
    @SuppressWarnings(value="unchecked")
    public List<Employee> findAll() {
        session = HibernateUtil.getSessionFactory().getCurrentSession();
        transaction = session.beginTransaction();
        Query query = session.getNamedQuery("findAllEmployees");
        return (List<Employee>)query.list();
       
    }
}


and my test class:
Code:
public class EmployeeAndGroupTest extends TestCase {

    public void testCreateEmp() {

        Employee emp = new Employee();

        emp.setEmpName("Bugs");
        emp.setEmpLastName("Bunny");
        EmployeeDao empDao = new EmployeeDao();
        empDao.create(emp);
       
        Group engGroup = new Group();
        engGroup.setGpName("Engineering");
        List<Employee> engineers = new ArrayList<Employee>();
        engineers.add(emp);
        engGroup.setEmployees(engineers);
        GroupDao groupDao = new GroupDao();
        groupDao.create(engGroup);
        List<Employee> allEmployees = empDao.findAll();
       
        for (Employee employee: allEmployees) {
            System.out.println("Employee First Name = " + employee.getEmpName());
            System.out.println("Employee Last Name = " + employee.getEmpLastName());
            System.out.println("Employee member of Groups = " + employee.getGroups());
        }
    }
}


I didn't put GroupDao.java because it's almost exactly the same. I didn't have enough time to work it all out (I have a little problem with Hibernate), but it's not far from working. I'm used to using Annotations and Spring, so trying to get Hibernate to work all by itself it proving a little too time-consuming for me.

The mapping should be correct though. You see, you don't need to explicitly work with the relation table at all!


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 9 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.