Merge pull request #146 from scottmarlow/master

HHH-6536, set TCCL to the Hibernate classloader to workaround antlr loading class by name
This commit is contained in:
Scott Marlow 2011-08-02 13:55:31 -07:00
commit 5dc04960d6
1 changed files with 18 additions and 5 deletions

View File

@ -23,11 +23,12 @@
*
*/
package org.hibernate.hql.internal.ast;
import java.io.InputStream;
import java.io.Reader;
import antlr.Token;
import org.hibernate.QueryException;
import org.hibernate.hql.internal.antlr.HqlBaseLexer;
import antlr.Token;
import java.io.InputStream;
import java.io.Reader;
/**
* Custom lexer for the HQL grammar. Extends the base lexer generated by ANTLR
@ -48,8 +49,20 @@ class HqlLexer extends HqlBaseLexer {
}
public void setTokenObjectClass(String cl) {
// Ignore the token class name parameter, and use a specific token class.
super.setTokenObjectClass( HqlToken.class.getName() );
Thread thread = null;
ClassLoader contextClassLoader = null;
try {
// workaround HHH-6536, by setting TCCL to the Hibernate classloader
thread = Thread.currentThread();
contextClassLoader = thread.getContextClassLoader();
thread.setContextClassLoader(HqlToken.class.getClassLoader());
// Ignore the token class name parameter, and use a specific token class.
super.setTokenObjectClass( HqlToken.class.getName() );
}
finally {
thread.setContextClassLoader( contextClassLoader );
}
}
protected void setPossibleID(boolean possibleID) {