[Gvsig_desarrolladores] Error de driver postgresql
Alex Irmel Oviedo Solis
alleinerwolf en gmail.com
Mie Mar 8 20:35:15 CET 2017
Gracias Joaquin, probe la opción 2 y funciona bien, muchas gracias :-)
El mié., 8 de mar. de 2017 a la(s) 14:11, Joaquin Jose del Cerro Murciano <
jjdelcerro en gvsig.org> escribió:
> El 8 de marzo de 2017, 17:01, Alex Irmel Oviedo Solis <
> alleinerwolf en gmail.com> escribió:
>
> Buenos dias a todos, estoy modificando el ejemplo de Control de acceso y
> estoy intentando modificarlo para autenticar con postgresql, el codigo que
> estoy usando es el siguiente:
> ------
> String url = "jdbc:postgresql://" + prop.getProperty("db.host") + ":5432/"
> + prop.getProperty("db.name");
> Class.forName("org.postgresql.Driver");
>
> Connection connection = DriverManager.getConnection(url,
> conprops);
> String query = "SELECT * FROM public.\"Usuario\" WHERE
> usuario='" + id + "'";
> PreparedStatement ps = connection.prepareStatement(query);
> ResultSet rs = ps.executeQuery();
> rs.next();
>
> this.properties = new HashMap<>();
> this.properties.put("username", rs.getString("usuario"));
> this.properties.put("password", rs.getString("clave"));
> this.properties.put("fullname", rs.getString("nombres"));
>
> connection.close();
> ------
>
> Y tengo este mensaje de error:
> --------
> INFO main org.gvsig.tools.locator.AbstractLocator - Created and stored the
> instance of org.gvsig.tools.identity.manager in the singleton table
> (org.guamanpoma.identitymanagement.impl.DefaultDatabaseIdentityManager/org.guamanpoma.identitymanagement.impl.DefaultDatabaseIdentityManager en 7a344b65
> ).
> ERROR AWT-EventQueue-0
> org.guamanpoma.identitymanagement.impl.DefaultDatabaseIdentity - connect-db
> java.lang.ClassNotFoundException: Class org.postgresql.Driver not found
> through the plugin
> D:\gvSIG-desktop-2.3.1-2501-final-win-x86_64\gvSIG\extensiones\org.guamanpoma.identitymanagement.app.mainplugin
> --------
>
> Obviamente este problema se debe a que no se encuentra el jar de
> postgresql. Trate de resolver el problema agregando la dependencia en el
> pom.xml para que cargue el driver con el scope compile y tambien con el
> scope runtime y no se soluciono. Estoy copiando manualmente el driver en la
> carpeta lib de la extensión a cada momento y quisiera saber si hay alguna
> manera de que esta depedencia se incluya sin hacer ninguna copia manual.
>
>
>
>
> Cada plugin de gvSIG se ejecuta con su propio classloader. Esto es asi
> para evitar, en la medida de lo posible, conflicto entre los jars que
> aporte cada uno de los plugins. Tu plugin, si no has configurado nada
> especial, tendra acceso a lo que haya en la carpeta lib de la instalacion
> de gvSIG y a los jars que hayan dentro de la carpeta del propio plugin;
> pero no a los jars de otros plugins.
>
> Si necesitas acceder a los jars que hayan en otros plugins tendras que
> indicarlo de forma explicita. Ten en cuenta que si dependes de los jars que
> aporta otro plugin, no tendras ninguna garantia que estaran ahi en la
> siguiente version del plugin, o que no se habran actualizado a una version
> con la que ya no son compatibles con tu codigo. Dicho esto, concretamente
> el jar de postgreql no creo que desaparezca o cambie mucho en las proximas
> versiones, asi que en lugar de incluirlo en tu plugin no parece una mala
> idea que dependas del plugin "org.gvsig.postgresql.app.mainplugin".
>
> Respecto a lo que comentas que has añadido al pom la dependencia con el
> artefecto de postgresql, la cuestion es que una cosa son las dependencias
> que fijes en el pom, y otra que esten disponibles esas dependencias en
> tiempo de ejecucion en tu classpath.
>
> ¿ Como se haria para poder usar el jar de postgresql ?
>
> - Opcion 1, usar el que lleva gvSIG.
> Es la que te recomiendo.
> Por un lado deberas añadir en tu pom, la depdencia con
> el artefeacto maven como comentas que has hecho. Eso
> solventa el problema de compilacion, pero no el de
> ejecucion. La recomendacion ademas, es que no indiques
> la version, y que esta la coja de la declarada ya en
> el pom de "org.gvsig.desktop" del que seguramente heredaras.
> Con esto te aseguras que compilas contra la misma version
> del jar de postgresql que luego tendras en tiempo de ejecucion.
>
> El otro problema, ¿ que he de hacer para tener acceso al jar
> que hay en el plugin "org.gvsig.postgresql.app.mainplugin" ?
>
> Tendras que editar el "config.xml" de tu plugin y tocar alli
> alguna cosilla. Alli veras unas lineas algo como:
>
> ...
> <depends plugin-name="org.gvsig.app.mainplugin" />
> <resourceBundle name="text"/>
> <libraries library-dir="lib"/>
> <extensions>
> ...
>
> El tag depends indica que añada al classpath de tu plugin,
> el del plugin que indiques. Por defecto esta puesto el del
> plugin "org.gvsig.app.mainplugin" que es el plugin principal
> de gvSIG y del que normalmente dependen todos. Para lo que
> te interesa simplemente añadiremos otra linea con el tag
> depends pero pondremos el nombre del plugin de postgresql.
>
> ...
> <depends plugin-name="org.gvsig.app.mainplugin" />
> <depends plugin-name="org.gvsig.postgresql.app.mainplugin" />
> <resourceBundle name="text"/>
> <libraries library-dir="lib"/>
> <extensions>
> ...
>
> Simplemente con esto ya tendremos acceso en tiempo de ejecucion
> al jar de postgresql que esta en ese plugin.
>
> - Opcion 2, incluir el jar que necesites en tu propio plugin.
>
> En este caso yo no lo haria, pero por si acaso lo cuento.
> En maven, tenemos por un lado el pom, donde habla de dependencias,
> donde localizarlas y que versiones, pero no dice nada de como
> empaquetar tu proyecto, en este caso un plugin de gvSIG. Y por
> otro lado el "assembly" que indica como se ha de empaquetar el
> proyecto. En el caso de un plugin de gvSIG, tendras un fichero:
>
> src/main/assembly/gvsig-plugin-package.xml
>
> Ahi, entre otras cosas tendras algo como:
>
> ...
> <dependencySets>
> <dependencySet>
> <useProjectArtifact>false</useProjectArtifact>
> <useTransitiveDependencies>false</useTransitiveDependencies>
> <outputDirectory>lib</outputDirectory>
> <includes>
>
> <include>org.gvsig:org.gvsig.trivialidentitymanagement.lib.api</include>
>
> <include>org.gvsig:org.gvsig.trivialidentitymanagement.lib.impl</include>
> </includes>
> </dependencySet>
> </dependencySets>
> ...
>
> Deberas añadir una linea con el tag include. En ella se especifica que
> artefacto
> te quieres llevar en la distribucion de tu plugin, indicando el groupid,
> dos
> puntos ":" y el artifactid. Si quieres llevarte detras el jar de
> postgresql seria
> algo como:
>
> <includes>
>
> <include>org.gvsig:org.gvsig.trivialidentitymanagement.lib.api</include>
>
> <include>org.gvsig:org.gvsig.trivialidentitymanagement.lib.impl</include>
> <include>postgresql:postgresql</include>
> </includes>
>
> (para el jar de postgresql el groupid y el artifactid son iguales)
> Esto hara que en la carpeta de tu plugin se despliegue el jar de
> postgresql y
> no dependeras de que este instalado el plugin de gvSIG
> "org.gvsig.postgresql.app.mainplugin" para acceder a postgresql.
>
> Es importante que sigas incluyendo las dependencias en el pom (como
> minimo
> de runtime, ya que aunque lo añadas en el assembly, si no esta en el pom
> el
> assemble no la incluira).
>
> Espero que se entienda y resuelba tus dudas, y si no te queda claro,
> puedes preguntar
> de nuevo.
>
> Un saludo
> Joaquin
>
>
>
>
>
>
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores en listserv.gva.es
> Para ver histórico de mensajes, editar sus preferencias de usuario o darse
> de baja en esta lista, acuda a la siguiente dirección:
> https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
>
>
>
>
> --
> --------------------------------------
> Joaquin Jose del Cerro Murciano
> Development and software arquitecture manager at gvSIG Team
> jjdelcerro en gvsig.com
> jjdelcerro en gvsig.org
> gvSIG Association
> www.gvsig.com
> www.gvsig.org
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores en listserv.gva.es
> Para ver histórico de mensajes, editar sus preferencias de usuario o darse
> de baja en esta lista, acuda a la siguiente dirección:
> https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listserv.gva.es/pipermail/gvsig_desarrolladores/attachments/20170308/ba51cbca/attachment.html>
Más información sobre la lista de distribución gvSIG_desarrolladores