[teiid-issues] [JBoss JIRA] Created: (TEIID-1627) within execution factory: hanging while executing query against same teiid instance
Mark Addleman (JIRA)
jira-events at lists.jboss.org
Wed Jun 8 17:05:59 EDT 2011
within execution factory: hanging while executing query against same teiid instance
------------------------------------------------------------------------------------
Key: TEIID-1627
URL: https://issues.jboss.org/browse/TEIID-1627
Project: Teiid
Issue Type: Bug
Components: Query Engine
Affects Versions: 7.4
Reporter: Mark Addleman
Assignee: Steven Hawkins
I have an execution factory that derives from TeiidExecutionFactory. Its job is to connect to the same Teiid instance, and execute a rewritten query. We use this to support dynamic view definitions. Below is the createResultSetExecution method:
@Override
public ResultSetExecution createResultSetExecution(final QueryExpression command,
final ExecutionContext executionContext,
final RuntimeMetadata metadata,
final Connection conn) throws TranslatorException
{
// TODO: This is not correct; this should be only called once for
// connection creation
obtainedConnection(conn);
return new ResultSetExecution()
{
private final List<Tuple> gatherResults = new ArrayList<Tuple>();
int i = 0;
@Override
public void execute() throws TranslatorException
{
try
{
ViewExecutionFactory.this.logger.info("execute() start");
ViewExecutionFactory.this.logger.info("before prepareStatement");
final PreparedStatement prepareStatement =
conn.prepareStatement("SELECT alert_id, alert_msg, lpar_id FROM demoalertdata.chorus.public.demo_alert");
ViewExecutionFactory.this.logger.info("beofre executeQuery");
final ResultSet resultSet = prepareStatement.executeQuery();
while (resultSet.next())
{
this.gatherResults.add(new Tuple(resultSet));
}
ViewExecutionFactory.this.logger.info("before reuslt set close");
resultSet.close();
ViewExecutionFactory.this.logger.info("before prepare statement close");
prepareStatement.close();
} catch (final Exception e)
{
ViewExecutionFactory.this.logger.error("Error during execute", e);
throw new TranslatorException(e);
} finally
{
ViewExecutionFactory.this.logger.info("execute() end");
}
}
@Override
public void close()
{
//
}
@Override
public void cancel() throws TranslatorException
{
//
}
@Override
public List<?> next() throws TranslatorException, DataNotAvailableException
{
if (this.i < this.gatherResults.size())
{
final List<?> asList = this.gatherResults.get(this.i++).asList();
ViewExecutionFactory.this.logger.info("RESULT " + asList);
return asList;
}
else
{
return null;
}
}
};
}
Under 7.4, when we issue a query against this translator, the thread hangs during the executeQuery() method. It works under 7.3.
Not sure if it's relevant but we connect to the local Teiid instance in the getConnection() method:
@Override
synchronized final public Connection getConnection(final DataSource ds) throws TranslatorException
{
if (this.metadataInitialized)
{
final TeiidDataSource teiidDataSource = new TeiidDataSource();
teiidDataSource.setDatabaseName("Chorus");
teiidDataSource.setUser("admin");
teiidDataSource.setPassword("teiid");
try
{
return teiidDataSource.getConnection();
} catch (final SQLException e)
{
throw new TranslatorException(e);
}
}
else
{
return null;
}
}
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the teiid-issues
mailing list