Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] ¿Cuál es la mejor manera para compartir funcionalidad o código?

Estas en el tema de ¿Cuál es la mejor manera para compartir funcionalidad o código? en el foro de Java en Foros del Web. Buenas tardes a todos los foristas: Quisiera escuchar sus opiniones acerca de cuál es la mejor manera de acuerdo a su experiencia, de compartir alguna ...
  #1 (permalink)  
Antiguo 10/04/2013, 07:26
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
¿Cuál es la mejor manera para compartir funcionalidad o código?

Buenas tardes a todos los foristas:

Quisiera escuchar sus opiniones acerca de cuál es la mejor manera de acuerdo a su experiencia, de compartir alguna funcionalidad o código. Me gustaría plantear el escenario en el que me encuentro y escuchar sus opiniones.

Actualmente en la empresa donde trabajamos, tenemos distintas aplicaciones web y muchas más que vienen en camino. Hemos ideado un modelo de BD para la autenticación de los usuarios que pretendemos que sea genérica para todas las aplicaciones. Tenemos desarrollado un módulo en JSP-JAVA-PrimeFaces-Hibernate para el proceso de autenticación que nos gustaría "extraer" y ponerlo como servicio, de tal manera que cualquier aplicación pueda utilizarlo y así reutilizar el código ya desarrollado.

Un usuario podrá acceder a distintos proyectos, y con distintos perfiles. La pantalla principal solicita usuario/contraseña, el módulo verifica en la BD si el usuario tiene acesso a uno o más proyectos, si son varios entonces presenta una pantalla con la lista de todos los proyectos disponibles para que seleccione aquel al que quiere acceder (Si solo tiene acceso a uno, pues no presentaría esta pantalla). Si el usuario tiene varios perfiles asociados al proyecto al que quiere acceder, entonces presenta otra pantalla con la lista de los perfiles que tiene asociados para que el usuario elija uno. Una vez echo esto, el módulo envía de regreso el usuario, el perfil, el proyecto y una cadena de verificación a la aplicación que lo invoque.

Ahora bien, tenemos pensado varias alternativas para poder compartir esta funcionalidad, pero quisiera que me dieran sus puntos de vista.

La primera sería como una librería de JAVA (JAR) la cual se distribuiría a todas las aplicaciones. El inconveniente que pensamos que puede tener es que si hacemos alguna modificación al módulo tendríamos que volver a distribuir la librería entre cada aplicación.

La segunda opción que pensamos sería mediante un Web Service, donde se regrese como respuesta un arreglo con todas las aplicaciones y perfiles asociados a cada usuario. Las pantallas de selección serían responsabilidad entonces de la aplicación que la invoca, no del modulo en si.

La tercera opción es pensarlo como una aplicación embebida, es decir, que mediante una URL se cargué la parte de la autenticación (en un Iframe por ejemplo), pero donde las aplicaciones puedan estar en contenedores distintos.

No sé si ustedes tienen alguna otra alternativa o cuál consideren que es la mejor opción para hacer algo como lo que queremos.

Cualquier aportación será de mucha ayuda.

Saludos
Leo.
  #2 (permalink)  
Antiguo 10/04/2013, 08:16
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 7 meses
Puntos: 188
Respuesta: ¿Cuál es la mejor manera para compartir funcionalidad o código?

Cita:
La primera sería como una librería de JAVA (JAR) la cual se distribuiría a todas las aplicaciones. El inconveniente que pensamos que puede tener es que si hacemos alguna modificación al módulo tendríamos que volver a distribuir la librería entre cada aplicación.
Si usais maven podeis tenerla centralizada en un repositorio propio. Cuando hagais una nueva versión sólo habría que cambiar en los pom la version de la librería y al hacer un maven install ya la descargaría automáticamente.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #3 (permalink)  
Antiguo 10/04/2013, 09:04
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: ¿Cuál es la mejor manera para compartir funcionalidad o código?

Muchas Gracias Fuzzylog:

Lamentablemente no tengo mucha experiencia en Java, ya que tengo un buen rato desarrollando en .NET, pero recién hace algunos meses me cambiaron de departamento. Voy a investigar más acerca de de Maven y cómo funciona.

Algún otro comentario???

De antemano gracias por el apoyo

Saludos
Leo.
  #4 (permalink)  
Antiguo 10/04/2013, 09:42
Avatar de hades87  
Fecha de Ingreso: diciembre-2007
Ubicación: Barcelona - España
Mensajes: 3.194
Antigüedad: 16 años, 4 meses
Puntos: 68
Respuesta: ¿Cuál es la mejor manera para compartir funcionalidad o código?

No tengo excesiva experienia desarrollando en java, pero lo del WEbService no lo veo mala idea, de esta forma podrías escoger que métodos tienen acceso las aplicaciones y poderle pasar argumetnos y demás, sería como tener una función añadida.
__________________
No diseñes usando tablas.
  #5 (permalink)  
Antiguo 10/04/2013, 10:25
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: ¿Cuál es la mejor manera para compartir funcionalidad o código?

Hola hades87:

El problema que veo con el WebService sería la parte de interacción con el usuario, es decir, no tengo tampoco mucha experiencia en ese campo, pero los WebServices con los que he trabajado solamente reciben parámetros y regresan una respuesta... Al plantearle esta solución a mi jefe no quedó muy convencido, pues las pantallas de selección del proyecto y del perfil pasarían a ser responsabilidad de cada una de las aplicaciones que invoquen el WS, lo que implicaría volver a repetir código...

La idea de mi jefe es reutilizar al máximo lo que ya está hecho, de tal manera que no se tenga que duplicar código.

En este sentido creo que la parte de hacer la Aplicación Embebida (es decir, que se invoque mediante una URL a la que se le pasen parámetros y envié una respuesta de regreso) sería la mejor opción, pero tengo mis dudas en cuanto a cómo poder realizar justamente este pase de parámetros entre las aplicaciones.

El pase de parámetros por URL lo descarto, hace tiempo vi una implementación con JSON, donde se envía por URL una cadena encriptada, pero que al desencriptarla puede "ligarse" a un objeto de JAVA... esta es la opción que estoy considerando, pero insisto que me gustaría conocer sus puntos de vista.

Gracias por el aporte.

Saludos
Leo.
  #6 (permalink)  
Antiguo 10/04/2013, 11:03
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: ¿Cuál es la mejor manera para compartir funcionalidad o código?

Lo que quieres hacer es que todas las aplicaciones compartan código, eso ya está inventado, todas las librerías y frameworks de java funcionan así.

Tienes dos opciones,

1. Creáis un proyecto base que tenga ese código y a partir de ahí montáis los nuevos proyectos.

2. Hacéis un jar que contenga toda la lógica, de forma que en cada proyecto importáis ese jar y añadís sólo la parte de interfaz.

Para gestionar esto de forma cómoda sólo necesitáis usar un repositorio de forma que el código base esté centralizado, bien con un svn/cvs o añadiendo además maven como ha dicho Fuzzylog.

También podríais echarle un vistazo a los portlet, aunque como nunca he trabajado con ellos no sé si se adaptan exactamente a lo que necesitas.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #7 (permalink)  
Antiguo 10/04/2013, 12:08
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: ¿Cuál es la mejor manera para compartir funcionalidad o código?

Hola Xerelo:

Muchas gracias por tu comentario, te hago algunas acotaciones:

Cita:
1. Creáis un proyecto base que tenga ese código y a partir de ahí montáis los nuevos proyectos.
Esta es la manera en que estamos trabajando... Tenemos un proyecto Base en donde sólo se incluye la funcionalidad de autenticación, a partir de este proyecto base vamos agregando la lógica y elementos de la nueva aplicación. Pero esto implica que en cada proyecto se está repitiendo el código.

Te repito que la idea es tener centralizado todo el acceso a las aplicaciones. Es por eso que se ideó un modelo de BD en ORACLE el cual es común para todos los proyectos, es decir aislamos esa parte de las propias BD de cada proyecto... así por ejemplo Podemos tener un modelo de BD para Contabilidad en SQL Server, un modelo de BD para Inventarios en MySQL, un Modelo de BD para Recursos Humanos en Postgres, pero mantener el modelo de Autentificación para cada proyecto en ORACLE...

sé que suena rebuscado y lo es, pero así es como los jefes quieren que trabajo.

Si se aplica un cambio en el Modulo de Autenticación a nivel aplicación o a nivel de BD, estos cambios se tendrían que replicar en todas las aplicaciones...

Cita:
2. Hacéis un jar que contenga toda la lógica, de forma que en cada proyecto importáis ese jar y añadís sólo la parte de interfaz.
Aplicaría el mismo detalle que el anterior... si a nivel de lógica o de BD hacemos cambios en el modulo de autenticación, entonces tendríamos que distribuir nuevamente el jar a todas las aplicaciones, que es una de las cosas que se quieren evita.

Pensamos que si lo hacemos a modo de aplicación embebida, cualquier cambio sería transparente para todas los proyectos que lo invocan.

Voy a investigar acerca de Fuzzylog y los los portlet, para ver si me puede aportar algo extra.

Saludos y muchas gracias por los comentarios.
Leo.
  #8 (permalink)  
Antiguo 10/04/2013, 12:47
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: ¿Cuál es la mejor manera para compartir funcionalidad o código?

Hola Leonardo

Mi opinión al igual que Fuzzylog es manejar el proyecto con maven.

Actualmente, el grupo de desarrollo donde trabajo se encuentran haciendo una aplicación partida en modulos. Cada desarrollador tiene un modulo como responsabilidad y cuentan con un archivo previamente configurado llamado pom.xml donde se almacenan las referencias de las librerias que se requieren para desarrollos. El funcionamiento basicamente te permite tener mayor portabilidad de codigo fuente. Ya que un nuevo desarrollador al momento de abrir el proyecto detecta en el archivo si las librerias las tiene en sus directorios locales o no. Sino las tiene las desacarga en un directorio local (.m2).
Hasta aqui, estas librerias tendrían que estar presentes en los repositorios de maven y contar con una conexion a Internet. Pero como también necesitas que librerias propias sean compartidas, requieres un componente adicional como un repositorio local. Aca en la empresa montaron nexus como gestor de repositorio local. De esta forma se puede tener multiples archivos jars, librerias externas que no se encuentran en los repositorios y en el pom hacer referencia a este repositorio configurado.

Si un modulo cambia, maven detecta los cambios en la libreria y la actualiza en el directorio del desarrollador. De esta forma se evitan estas tareas de distribución que en muchas oportunidades son jartas.

La configuración inicial de un proyecto puede ser densa, pero una vez tengas estabilidad de librerias el desarrollo es bastante agradable.

http://maven.apache.org/guides/intro...o-the-pom.html

http://www.sonatype.org/nexus/
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #9 (permalink)  
Antiguo 10/04/2013, 14:03
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: ¿Cuál es la mejor manera para compartir funcionalidad o código?

Hola huesos52:

Muchas gracias por la información... voy a leer con atención las ligas que me colocas para ver si se adecua a lo que necesitamos.

En estos momentos estamos trabajando sobre WebLogic, y veo que Maven es un proyecto de Apache, pero bueno, te repito que soy algo novato en estas cuestiones de JAVA así es que habrá que investigar.

Muchas gracias por el aporte.

Saludos y un abrazo
Leo.
  #10 (permalink)  
Antiguo 10/04/2013, 14:27
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: ¿Cuál es la mejor manera para compartir funcionalidad o código?

Cita:
Iniciado por leonardo_josue Ver Mensaje
sé que suena rebuscado y lo es, pero así es como los jefes quieren que trabajo.

Si se aplica un cambio en el Modulo de Autenticación a nivel aplicación o a nivel de BD, estos cambios se tendrían que replicar en todas las aplicaciones...
Es que lo que dices no tiene sentido, no puedes cambiar el sistema de autentificación y pretender que la aplicación cliente no varíe. Hay unos mínimos que no pueden cambiar y eso es lo que tiene que llevar el código cliente.

Por ejemplo con el webservice seguirías necesitando el código del cliente y la dirección del servicio.

Supón que tienes un servidor al que se conecten las aplicaciones, y este servidor sea el que autentifica, de esa forma si necesitas cambiar el sistema, por ejemplo pasar de BBDD a LDAP, sólo realizarías los cambios en el servidor, a los clientes les da igual.

Pero volvemos al mínimo, necesitas código que se repita para llamar al servidor, y poca diferencia habrá con respecto a conectarse directamente a la BBDD. Sinceramente muy mal planteado lo tenéis si creéis que vais a cambiar tanto la forma de hacerlo como para cambiar el cliente.

También podríais usar LDAP en vez base de datos, pero seguiríais teniendo código repetido y una dirección fija.

Todo esto suponiendo que nos refiramos a aplicaciones ya terminadas y en funcionamiento, si hablamos de desarrollo para eso están los repositorios/svn/cvs como ya se ha comentado.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #11 (permalink)  
Antiguo 11/04/2013, 04:40
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 13 años, 2 meses
Puntos: 78
Respuesta: ¿Cuál es la mejor manera para compartir funcionalidad o código?

Otra opción que se me ocurre es usar un servidor rmi donde tener los objetos remotamente. y las aplicaciones se alimentan de estos objetos del servidor.

Mira a cerca de RMI a ver si te puede interesar.
  #12 (permalink)  
Antiguo 11/04/2013, 07:44
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: ¿Cuál es la mejor manera para compartir funcionalidad o código?

Hola de nuevo,

muchas gracias por todas las aportaciones, me son de gran ayuda:

Xerelo:

Cita:
Es que lo que dices no tiene sentido, no puedes cambiar el sistema de autentificación y pretender que la aplicación cliente no varíe. Hay unos mínimos que no pueden cambiar y eso es lo que tiene que llevar el código cliente.

Por ejemplo con el webservice seguirías necesitando el código del cliente y la dirección del servicio.
La idea es justamente que los clientes no tengan que hacer ninguna modificación a su código, por mínima que sea... . En el caso del WS por ejemplo, si se hicieran modificaciones al WS, en realidad las aplicaciones clientes no variarían, es decir, una vez que se hace la invocación al WS, así queda, no cambia... Del lado del WS puedes hacer todos los cambios que quieras, cambiar de una BD a otra o cambiar por completo tu lógica de negocio, pero para el cliente sería transparente, es decir, simplemente es una caja negra que recibe parámetros y que regresa una respuesta. Lo que haga y cómo lo haga realmente no le interesa al cliente.

Sigo pensando que esta es la mejor opción, pero tengo que tener los argumentos
suficientes como para defender esta alternativa ante mis jefes.

ElAthlit:

Cita:
Mira a cerca de RMI a ver si te puede interesar.
Ayer en la tarde justamente me encontré con esta alternativa, la cual me parece bastante interesante, dejo una liga por si a alguien le puede interesa algo de este tema.

http://docs.oracle.com/javase/tutori.../overview.html

Saludos y nuevamente gracias por el apoyo.
Leo.
  #13 (permalink)  
Antiguo 11/04/2013, 12:26
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: ¿Cuál es la mejor manera para compartir funcionalidad o código?

Cita:
En el caso del WS por ejemplo, si se hicieran modificaciones al WS, en realidad las aplicaciones clientes no variarían, es decir, una vez que se hace la invocación al WS, así queda, no cambia...
Ahora mira esto

En el caso del BBDD por ejemplo, si se hicieran modificaciones a la BBDD, en realidad las aplicaciones clientes no variarían, es decir, una vez que se hace la invocación a la BBDD, así queda, no cambia...

¿No comprendes que es el mismo caso? Cualquier sistema que pongas tendrá código específico para la comunicación y un destino fijo en otra máquina.

Hacerlo directamente a una base de datos sólo tiene una pega, el que decidáis cambiar de base de datos y no os sirvan los drivers. Por lo demás llamas a un procedure que es perfectamente modificable sin que te afecte al cliente.

RMI está desfasado y es problemático, si vas a tirar por ahí usa EJB, que es a lo que me refería con usar un servidor de autentificación.

http://stackoverflow.com/questions/2...-disadvantages

De todas formas, tienes LDAP, que es un sistema pensado precisamente para eso, para autentificación.

Cita:
Habitualmente, almacena la información de autenticación (usuario y contraseña) y es utilizado para autenticarse aunque es posible almacenar otra información (datos de contacto del usuario, ubicación de diversos recursos de la red, permisos, certificados, etc). A manera de síntesis, LDAP es un protocolo de acceso unificado a un conjunto de información sobre una red.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #14 (permalink)  
Antiguo 12/04/2013, 14:54
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: ¿Cuál es la mejor manera para compartir funcionalidad o código?

Hola Xerelo:

Cita:
¿No comprendes que es el mismo caso? Cualquier sistema que pongas tendrá código específico para la comunicación y un destino fijo en otra máquina.
¡Claro que comprendo que es el mismo caso! tampoco tengo tan poco criterio como para darme cuenta de eso, la idea como dije, es presentarle a mi jefe todas las opciones posibles cada una con sus pros y sus contras para que él elija la que crea conveniente, que eso no implica que sea la mejor.

Muchas gracias por la información que me pusiste, la voy a incluir también dentro de las opciones.

Saludos
Leo.
  #15 (permalink)  
Antiguo 14/04/2013, 13:32
 
Fecha de Ingreso: marzo-2012
Ubicación: Argentina
Mensajes: 111
Antigüedad: 12 años
Puntos: 12
Respuesta: ¿Cuál es la mejor manera para compartir funcionalidad o código?

No entiendo el problema con webService..interaccion usuario-web service ?por que deberia interactuar el usuario vos a un web service debes crearle un cliente y que este lo consuma este cliente puede ser web cuando el usuario se loguea al pasar a la pagina sgte invoca el servicio y este le devuelve los datos de perfil asociados. en ningun momento existe interaccion usuario-web service las aplicaciones interactuan con web services si elegis servicios te digo que Rest es la mejor opcion es opensource y como iplementacion RestEASY de jboss es muy simple y segura.En cuanto a Maven deberian tner todo integrado con maven es muy simple y sirve de mucho te agiliza los problemas de dependencias y build automatiza los test

espero sirva.

Saludos
  #16 (permalink)  
Antiguo 17/04/2013, 09:36
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: ¿Cuál es la mejor manera para compartir funcionalidad o código?

Hola darkChild:

Antes que nada perdón por contestar hasta ahora, pero estuve fuera de la ciudad algunos días. Muchas gracias por la información... efectivamente, he estado investigando acerca de REST y MAVEN que creo que son las mejores opciones para lo que estamos intentando hacer.

Muchas gracias a todos por los comentarios y las aportaciones.

Saludos
Leo.

Etiquetas: funcionalidad, jsp, webservice
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:49.