[Gvsig_desarrolladores] Error de driver postgresql

Joaquin Jose del Cerro Murciano jjdelcerro en gvsig.org
Mie Mar 8 20:09:28 CET 2017


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
> @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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listserv.gva.es/pipermail/gvsig_desarrolladores/attachments/20170308/b6c9a870/attachment.html>


Más información sobre la lista de distribución gvSIG_desarrolladores