JaarMedlem sedan juli 2001434 inlägg Har precis skapat en datasource till min oracle databas i Tomcat som jag börjat använda.
Tidigare så registrerade jag drivern i koden och hämtade en connection:
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
return DriverManager.getConnection "jdbc:oracle:thin:@IP:1521:ORCL","USER","PASS");
Nu när jag kör JNDI så funkar inte ett anrop till en store procedure. Proceduren tar en Cursor som inparameter som jag sedan försöker läsa ut:
rs = ((OracleCallableStatement) cstmt).getCursor(1);
Felet som sker är java.lang.ClassCastException, dvs att den inte klarar att konvertera pekaren. Dock har den lyckats med det tidigare och det ska inte vara några problem med koden. Antar att det är någon inställning eller att JNDI funkarp å något annorlunda sätt.
JaarMedlem sedan juli 2001434 inlägg Tänkte ta upp o jobba med det här problemet igen.
Det visade sig att det varså att man inte fick oracles klass, utan en "vanlig klass".
Skapar connection så här:
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");
Connection conn = ds.getConnection();
och så här ser server.xml ut (satt upp med admingränssnittet)
<Resource auth="Container" description="DB Connection" name="jdbc/DEVELOP" scope="Shareable" type="javax.sql.DataSource"/>
<Resource auth="Container" name="jdbc/myoracle" scope="Shareable" type="javax.sql.DataSource"/>
<Resource auth="Container" description="DB Connection" name="DEVELOP" scope="Shareable" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/myoracle">
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@127.0.0.1:1521:ORCL</value>
</parameter>
<parameter>
<name>validationQuery</name>
<value>select count(*) from usr.table</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>
<parameter>
<name>username</name>
<value>usr</value>
</parameter>
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>password</name>
<value>pwd</value>
</parameter>
</ResourceParams>
Connection är av typen :
org.apache.commons.dbcp.PoolableConnection (det är den som senare spottar ut sig callable statementet som inte går att använda).
Någon som har något tips av något slag?
Testa att köra detta istället:
rs = (ResultSet) cstmt.getObject( 1 );
JaarMedlem sedan juli 2001434 inlägg Tack ska du ha, det verkar som om det fungera! *bockar o tackar*