JDBC -> ORACLE

reinholdmain
28 de Octubre del 2004
Resulta que estoy haciendo un applet de Java que se conecta por medio de JDBC a una base de datos oracle

Resumiendo mi codigo en la conexion a oracle:

Class.forName("oracle.jdbc.driver.OracleDriver"); // este es un driver que baje de oracle de jdbc para Java 1.4,
// tambien lo tengo declarado en el CLASSPATH.
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ROBOTECH","rick","robotech"); // lo conecto con el SID que es ROBOTECH
// rick es el nombre de usuario, y robotech es el password el listener esta configurado y el tnsname tambien !!!
Asta aqui anda impecable, pero al momento de hacer una consulta SQL en el codigo o al tratar de conectarse se cae y no muestra ningun resultado el applet.

ABRO LA CONSOLA DE JAVA DEL EXPLORADOR y dice ...

java.security.AccessControlException: access denied (java.util.PropertyPermission oracle.jserver.version read)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:270)
at java.security.AccessController.checkPermission(AccessController.java:401)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:542)
at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1291)
at java.lang.System.getProperty(System.java:572)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:433)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:314)
at java.sql.DriverManager.getConnection(DriverManager.java:512)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at appletP.oracle.jbInit(oracle.java:50)
at appletP.oracle.init(oracle.java:28)
at opera.PluginPanel.run(PluginPanel.java:411)
at java.lang.Thread.run(Thread.java:536)

Averiguando con la poca documentacion de esto, pense que el problema era del "java.policy", politicas de seguridad de java. Y asi hay que editar un archivo llamado java.policy, que en algunas partes dice que debe estar en el directorio $HOME/.java.policy (ejem /home/rick/.java.policy) y en otros sitios dice que esta en el $JRE_HOME/lib/security/java.policy (ejem /usr/java/j2re1.4/lib/security/java.policy).

Bueno en la segunda ruta esta ese famoso archivo java.policy, y lo edito y le pongo esto ... (tambien lo copio al directorio $HOME)

grant {
permission java.security.AllPermission;
permission java.net.SocketPermission "*:1024-65535", "connect,accept,resolve"; //siendo que el * es cualquier ip, y luego el rango del puerto
permission java.net.SocketPermission "*:80","connect";
permission java.util.PropertyPermission "oracle.jserver.version", "read"; // y esto que nose para que esta, pero me sale en el error, asi que le puse la opcion read
permission java.lang.RuntimePermission "modifyThreadGroup";
permission java.lang.RuntimePermission "modifyThread";
permission java.io.FilePermission "/html/java/-", "read"; // esto es por que en una pagina salia que pusieras la ruta de tus archivos de java que se abren
};

BUENO DESPUES DE TODO ESTO TODAVIA NO ENTIENDO COMO PODER CONECTARME A ORACLE desde un applet y JDBC, siendo que con el driver de mysql para jdbc y EL MISMO CODIGO me anduvo impecable la lectura de la base de datos.

Mi teoria es que en la base de datos hay que agregarle un permiso de java (ALGUN GRANT), y eso yo no lo se por que no tengo idea de conceptos de DBA, y si uds supieran algun datito que me sirviera para seguir buscando me ayudaria harto.


GRACIAS POR SU GRAN AYUDA !!

felipe_ug
28 de Octubre del 2004
en los ficheros a los que le das permiso pon tb en los que se encuentra el driver, y las librerias classes12 y nls_charset. Si te funciona esto por favor mandame la configuracion de los policies que yo tenia el mismo problema pero no tenia tiempo para buscar informacion acerca de eso

bea_alc
28 de Octubre del 2004
Haz una copia al archivo java.policy.
Añadele las siguientes lineas:

grant {
permission java.security.AllPermission;
};

La copia la deberas guardar en donde ejecutes tus
aplicaciones java. Por ejemplo: c:jdk1.3.1_08bin
Al ejecutar el appletviewer lo deberas hacer de la siguiente manera:

appletviewer -J-Djava.security.policy=copyJava.policy nombre_archivo.html