jdbc Query Timeout ( Is This a Bug? )
grdzeli_kaci Jan 30, 2007 8:02 AMhi all,
i have one problem whole week, and could not resolve.
enviroment :
1. AS - Jboss Application Server 4.0.4 GA or Jboss Application Server 4.04 GA (i tryed both of them)
2.ThierdParty/Database - Oracle Timesten In Memory DataBase
3.EJB 3.0.EJB3 RC7 (for JBoss 4.0.4) EJB 3.0.EJB3 RC9 Patch 1 (For JBoss 4.0.5)
4.OS - Solaris, Suse Linux, Windows XP (I tryed on all of them)
5.ThierdParty/DataBase Driver - classes14.jar (1.5.0_04 (Sun Microsystems Inc.))
task : i need use named query search from session beans
my project snipets:
1. jboss Timesten Datasource Configuration :
<datasources> <xa-datasource> <jndi-name>TimesTenXAClientDS</jndi-name> <xa-datasource-class> com.timesten.jdbc.xa.TimesTenXADataSource </xa-datasource-class> <xa-datasource-property name="Url"> jdbc:timesten:client:Test34 </xa-datasource-property> <user-name></user-name> <password></password> <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation> <!--pooling parameters--> <min-pool-size>5</min-pool-size> <max-pool-size>100</max-pool-size> <blocking-timeout-millis>5000</blocking-timeout-millis> <idle-timeout-minutes>15</idle-timeout-minutes> <prepared-statement-cache-size>32</prepared-statement-cache-size> <track-connection-by-tx/> <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml --> <metadata> <type-mapping>TimesTen</type-mapping> </metadata> </xa-datasource> </datasources>
2. Database Table :
create table "RT"."SUBSCRIBERS" ("SUBSCRIBERID" INTEGER not null,
"CHARGINGPROFILEID" INTEGER not null, "STATUSID" INTEGER not null,
"TSTAMP" BINARY(8), constraint "RT"."SUBSCRIBERS" primary key
("SUBSCRIBERID"))
3. Entity Bean :
package com.magti.businesslayer.ejb3entity.oracle;
import java.io.Serializable;
import org.apache.commons.lang.builder.ToStringBuilder;
import javax.persistence.*;
@NamedQueries
({
@NamedQuery(name="Subscriber.getSubscriber",query="select e from Subscriber e where e.subscriberid = :subsId")
})
@Entity()
@Table(name="SUBSCRIBERS", schema="RT")
public class Subscriber implements Serializable {
//default serial version id, required for serializable classes.
private static final long serialVersionUID = 1L;
private Integer subscriberid;
private int chargingprofileid;
private int statusid;
private byte [] tstamp;
public Subscriber() {
}
@Id()
@Column(name="SUBSCRIBERID", unique=true, nullable=false, precision=10)
public Integer getSubscriberid() {
return this.subscriberid;
}
public void setSubscriberid(Integer subscriberid) {
this.subscriberid = subscriberid;
}
@Basic()
@Column(name="CHARGINGPROFILEID", nullable=false, precision=10)
public int getChargingprofileid() {
return this.chargingprofileid;
}
public void setChargingprofileid(int chargingprofileid) {
this.chargingprofileid = chargingprofileid;
}
@Basic()
@Column(name="STATUSID", nullable=false, precision=10)
public int getStatusid() {
return this.statusid;
}
public void setStatusid(int statusid) {
this.statusid = statusid;
}
public String toString() {
return new ToStringBuilder(this)
.append("subscriberid", getSubscriberid())
.toString();
}
@Basic()
@Column(name="TSTAMP", nullable=true)
public byte[] getTstamp() {
return tstamp;
}
public void setTstamp(byte[] tstamp) {
this.tstamp = tstamp;
}
}
4. Remote Interface :
package com.magti.businesslayer.ejb3entity.businesslayer;
import javax.ejb.Remote;
@Remote
public interface SubscriberOperations {
public void insertSubscriber() throws Exception;
public void updateSubscriber() throws Exception;
public void getSubscriber() throws Exception;
}
4. Remote Interface Implementation (Session bean) :
package com.magti.businesslayer.ejb3entity.businesslayer;
import java.util.List;
import javax.ejb.Remote;
import javax.ejb.Stateful;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import com.magti.businesslayer.ejb3entity.businesslayer.SubscriberOperations;
import com.magti.businesslayer.ejb3entity.oracle.Subscriber;
@Remote(SubscriberOperations.class)
@Stateful
public class SubscriberOperationsBean implements SubscriberOperations {
@PersistenceContext(unitName = "Blaaaaaaaaaaaaaaaaa")
private EntityManager timeStenMan;
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void insertSubscriber() throws Exception {
try {
System.out.println("Start Persisting");
Subscriber subscriber = new Subscriber();
subscriber.setTstamp(null);
subscriber.setChargingprofileid(123123123);
subscriber.setStatusid(123123123);
timeStenMan.persist(subscriber);
System.out.println("End Of Persisting");
} catch (Exception e) {
e.printStackTrace();
}
}
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void updateSubscriber() throws Exception {
try {
System.out.println("Start Updateing");
Subscriber subscriber = new Subscriber();
subscriber.setSubscriberid(606244);
subscriber.setTstamp(null);
subscriber.setChargingprofileid(312312312);
subscriber.setStatusid(312312312);
timeStenMan.merge(subscriber);
System.out.println("End Of Updateing");
} catch (Exception e) {
e.printStackTrace();
}
}
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void getSubscriber() throws Exception {
try {
System.out.println("Start Searching");
List<Subscriber> subscribers = (List<Subscriber>) timeStenMan
.createNamedQuery("Subscriber.getSubscriber").setParameter(
"subsId", new Integer(606244)).getResultList();
System.out.println("End Of Searching");
System.out.println("List Size = " + subscribers.size());
} catch (Exception e) {
e.printStackTrace();
}
}
}
5. persistance.xml file :
<?xml version="1.0" encoding="ISO-8859-1" ?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="Blaaaaaaaaaaaaaaaaa"> <jta-data-source>java:/TimesTenXAClientDS</jta-data-source> <class>com.magti.businesslayer.ejb3entity.oracle.Subscriber</class> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect"/> <property name="hibernate.connection.driver_class" value="com.timesten.jdbc.xa.TimesTenXADataSource"/> <property name="hibernate.connection.url" value="jdbc:timesten:client:Test34"/> <property name="hibernate.connection.username" value=""/> <property name="hibernate.connection.password" value=""/> <property name="hibernate.default_schema" value="RT"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> </properties> </persistence-unit> </persistence>
6. and at last my test client :
package com.magti.businesslayer.ejb3entity.oracle;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import com.magti.businesslayer.ejb3entity.businesslayer.SubscriberOperations;
public class TestMain {
public static void main(String[] args) {
try {
Properties jndiProps = new Properties();
jndiProps.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
jndiProps.setProperty(Context.URL_PKG_PREFIXES,
"org.jboss.naming:org.jnp.interface");
jndiProps.setProperty(Context.PROVIDER_URL,
"jnp://192.168.9.136:1099");
InitialContext ctx = new InitialContext(jndiProps);
SubscriberOperations ops = (SubscriberOperations) ctx
.lookup("SubscriberOperationsBean/remote");
// Test Searching
ops.getSubscriber();
// End Of Test Searching
} catch (Exception e) {
e.printStackTrace();
}
}
}
and i get an error like this :
java.sql.SQLException: [TimesTen][TimesTen 6.0.4 CLIENT]Query Timeout must be numeric, greater than or equal to 0, and less than the Network Timeout at com.timesten.jdbc.JdbcOdbc.createSQLException(JdbcOdbc.java:7307) at com.timesten.jdbc.JdbcOdbc.standardError(JdbcOdbc.java:7440) at com.timesten.jdbc.JdbcOdbc.standardError(JdbcOdbc.java:7405) at com.timesten.jdbc.JdbcOdbc.SQLSetStmtOption(JdbcOdbc.java:6679) at com.timesten.jdbc.JdbcOdbcStatement.setStmtOption(JdbcOdbcStatement.java:1883) at com.timesten.jdbc.JdbcOdbcStatement.setQueryTimeout(JdbcOdbcStatement.java:720) at org.jboss.resource.adapter.jdbc.CachedPreparedStatement.close(CachedPreparedStatement.java:339) at org.jboss.resource.adapter.jdbc.WrappedStatement.internalClose(WrappedStatement.java:588) at org.jboss.resource.adapter.jdbc.WrappedStatement.close(WrappedStatement.java:73) at org.hibernate.jdbc.AbstractBatcher.closePreparedStatement(AbstractBatcher.java:526) at org.hibernate.jdbc.AbstractBatcher.closeStatement(AbstractBatcher.java:265) at org.hibernate.jdbc.AbstractBatcher.closeQueryStatement(AbstractBatcher.java:281) at org.hibernate.jdbc.AbstractBatcher.closeQueryStatement(AbstractBatcher.java:209) at org.hibernate.loader.Loader.doQuery(Loader.java:714) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224) at org.hibernate.loader.Loader.doList(Loader.java:2145) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029) at org.hibernate.loader.Loader.list(Loader.java:2024) at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:392) at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:333) at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172) at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1114) at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79) at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:53) at com.magti.businesslayer.ejb3Fasade.srvprov.MobileServiceFasadeBean.test(MobileServiceFasadeBean.java:1467) 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 org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112) at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166) at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.entity.ExtendedPersistenceContextPropagationInterceptor.invoke(ExtendedPersistenceContextPropagationInterceptor.java:57) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79) at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:197) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateful.StatefulInstanceInterceptor.invoke(StatefulInstanceInterceptor.java:81) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:78) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateful.StatefulContainer.dynamicInvoke(StatefulContainer.java:297) at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106) at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82) at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:828) at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:681) at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:358) at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:412) at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:239) 30 Jan 07 12:31:23, DEBUG org.apache.commons.logging.impl.Log4JLogger:debug:84 about to open ResultSet (open ResultSets: 0, globally: 0) 30 Jan 07 12:31:23, WARN org.apache.commons.logging.impl.Log4JLogger:warn:104 SQL Error: 0, SQLState: S1000 30 Jan 07 12:31:23, DEBUG org.apache.commons.logging.impl.Log4JLogger:debug:84 result row: 30 Jan 07 12:31:23, ERROR org.apache.commons.logging.impl.Log4JLogger:error:114 [TimesTen][TimesTen 6.0.4 CLIENT]Query Timeout must be numeric, greater than or equal to 0, and less than the Network Timeout 30 Jan 07 12:31:23, DEBUG org.apache.commons.logging.impl.Log4JLogger:debug:84 about to close ResultSet (open ResultSets: 1, globally: 1) 30 Jan 07 12:31:23, DEBUG org.apache.commons.logging.impl.Log4JLogger:debug:84 about to close PreparedStatement (open PreparedStatements: 1, globally: 1) 30 Jan 07 12:31:23, DEBUG org.apache.commons.logging.impl.Log4JLogger:debug:84 aggressively releasing JDBC connection 30 Jan 07 12:31:23, DEBUG org.apache.commons.logging.impl.Log4JLogger:debug:84 releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
i thougt that it mey be bug in timesten but when i tryed the same task without jboss and ejb 3 into stand alone client it works ....
is there any idea ? :(
i am nto sure but i think this bug into hibrnate or jboss.
if this is a bug can i report it in jira ?