JDBC -> ORACLE
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 !!
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 !!
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
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
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
