OK... I am getting very weird things with 3.2.4sp1. It really appears that the error catching/reporting is problematic.
My Named SQL query:
Code:
<sql-query name="getAvailableOutdialAgentLogin">
<return class="com.connectfirst.intelliqueue.model.AgentLogin"/>
SELECT l.*
FROM intelliqueue_globalcatalog.tbl_vpd_dial_group_members m
INNER JOIN tbl_acd_agent_logins l ON (m.agent_id = l.agent_id)
INNER JOIN tbl_acd_agent_offhook_sessions s ON (l.agent_login_id = s.agent_login_id AND s.archive = 0)
WHERE l.login_dial_group_id = ?
AND l.agent_state = 'AVAILABLE'
AND l.pending_disposition <> 1
AND (
l.agent_login_type = 'OUTBOUND' OR (
l.agent_login_type = 'BLENDED' AND (
SELECT COUNT(uii)
FROM tbl_acd_active_calls
WHERE call_state IN ('QUEUED','DEQUEUING-PHASE1')
AND unix_timestamp(now())-unix_timestamp(enqueue_time) > 30
AND archive <> 1
AND gate_id IN (
SELECT gate_id
FROM tbl_acd_agent_login_gates
WHERE agent_login_id = l.agent_login_id
)) = 0
)
)
ORDER BY l.last_call_dts ASC
LIMIT 1
FOR UPDATE
</sql-query>
My Calling Code:
Code:
public synchronized AgentLogin getAvailableOutdialAgentLogin(Integer dialGroupId){
/** get a session and make sure we have a started transaction */
Session sess = HibernateUtil.getSession();
AgentLogin login = null;
try{
HibernateUtil.beginTransaction();
org.hibernate.Query query = sess.getNamedQuery("getAvailableOutdialAgentLogin");
query.setInteger(0,dialGroupId);
login = (AgentLogin)query.uniqueResult();
if(login != null){
login.setAndTrackAgentState(AgentLogin.AGENT_TRANS);
sess.update(login);
}
HibernateUtil.commitTransaction();
}catch(org.hibernate.exception.LockAcquisitionException e){
log.warn(e,e);
}catch(Exception e){
log.error(e,e);
}finally{
return(login);
}
}
And last but not least... the error message:
Code:
2007-06-20 15:26:26,656 ERROR [pool-3-thread-1] (AgentDAO.java:449) - java.lang.IllegalArgumentException: No positional parameters in query: SELECT l.*
FROM intelliqueue_globalcatalog.tbl_vpd_dial_group_members m
INNER JOIN tbl_acd_agent_logins l ON (m.agent_id = l.agent_id)
INNER JOIN tbl_acd_agent_offhook_sessions s ON (l.agent_login_id = s.agent_login_id AND s.archive = 0)
WHERE l.login_dial_group_id = ?
AND l.agent_state = 'AVAILABLE'
AND l.pending_disposition <> 1
AND (
l.agent_login_type = 'OUTBOUND' OR (
l.agent_login_type = 'BLENDED' AND (
SELECT COUNT(uii)
FROM tbl_acd_active_calls
WHERE call_state IN ('QUEUED','DEQUEUING-PHASE1')
AND unix_timestamp(now())-unix_timestamp(enqueue_time) > 30
AND archive <> 1
AND gate_id IN (
SELECT gate_id
FROM tbl_acd_agent_login_gates
WHERE agent_login_id = l.agent_login_id
)) = 0
)
)
ORDER BY l.last_call_dts ASC
LIMIT 1
FOR UPDATE
java.lang.IllegalArgumentException: No positional parameters in query: SELECT l.*
FROM intelliqueue_globalcatalog.tbl_vpd_dial_group_members m
INNER JOIN tbl_acd_agent_logins l ON (m.agent_id = l.agent_id)
INNER JOIN tbl_acd_agent_offhook_sessions s ON (l.agent_login_id = s.agent_login_id AND s.archive = 0)
WHERE l.login_dial_group_id = ?
AND l.agent_state = 'AVAILABLE'
AND l.pending_disposition <> 1
AND (
l.agent_login_type = 'OUTBOUND' OR (
l.agent_login_type = 'BLENDED' AND (
SELECT COUNT(uii)
FROM tbl_acd_active_calls
WHERE call_state IN ('QUEUED','DEQUEUING-PHASE1')
AND unix_timestamp(now())-unix_timestamp(enqueue_time) > 30
AND archive <> 1
AND gate_id IN (
SELECT gate_id
FROM tbl_acd_agent_login_gates
WHERE agent_login_id = l.agent_login_id
)) = 0
)
)
ORDER BY l.last_call_dts ASC
LIMIT 1
FOR UPDATE
at org.hibernate.impl.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:332)
at org.hibernate.impl.AbstractQueryImpl.setInteger(AbstractQueryImpl.java:484)
at com.connectfirst.intelliqueue.dao.AgentDAO.getAvailableOutdialAgentLogin(AgentDAO.java:439)
at com.connectfirst.intelliqueue.dialer.handlers.PredictiveResponseHandler.handleResponse(PredictiveResponseHandler.java:143)
at com.connectfirst.intelliqueue.telephony.inbound.TelephonyResultOutdial.processRequest(TelephonyResultOutdial.java:69)
at com.connectfirst.intelliqueue.telephony.TelephonyMessageHandler.run(TelephonyMessageHandler.java:63)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
As far as I can tell, I am doing everything right... anyone have a clue here?