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:
commit
5dc04960d6
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue