2012-10-05 15 views
5

Tenemos una función eclipse que tiene licencia y la licencia es manejada por nuestro propio código. El usuario puede ingresar a nuestro sitio de actualizaciones y actualizar su función. El problema que enfrentamos es cuando la licencia del usuario necesita ser actualizada antes de que pueda usar la nueva actualización.Cómo validar una actualización antes de la instalación

Lo que quiero hacer es validar la versión de la característica contra la licencia de los usuarios y advertir al usuario que su licencia necesita ser actualizada antes de la instalación.

Pensé que haría esto usando un eclipse personalizado p2 touchPoint action validateLicense.

Ejemplo:

Mi código se llama, en el que validar la versión contra la licencia del usuario. Si falla, advierto al usuario y él puede cancelar la instalación.

Así que mi primera pregunta es:

  • Cómo llego este derecho, o se trata de alguna otra manera de hacer esto?

Mi segunda pregunta es bastante básico:

  • ¿Dónde digo Eclipse para ejecutar mi código? He buscado here at eclipse help donde explican qué es. Pero no entiendo dónde poner la información para ejecutar mi código? Está en el feature.xml.

Por último:

  • ¿Hay un ejemplo de cómo crear y touchPonts uso p2?

Respuesta

1

Implementé una acción personalizada como se muestra en here y tengo un sistema que parece funcionar. Dejé la extensión de "punto de contacto" ya que no es necesario en mi caso, pero el resto es el mismo.

Mi acción se ejecuta durante la fase de instalación de mi función (instructions.install) pero quizás la configuración de la fase también podría funcionar. La fase de recopilación no funcionó.

La acción se ejecuta durante el proceso de instalación, después de que la descarga ya se haya realizado. Idealmente sería antes de la descarga, pero no es un gran problema para mí. Devolver un estado de error de la acción cancela la instalación.Deja algunos archivos descargados, pero no se activan y es probable que el recolector de basura de p2 los elimine más adelante.

También me las arreglé para hacer algunas cosas más interesantes. El plugin Mis acciones tiene una dependencia (opcional y no codiciosa) en mi complemento principal. Por lo que la obra de instalación de esta manera:

  • acciones complemento se descarga
  • de acción personalizada se ejecuta
  • La acción detecta si mi principal plug-in ya está instalado y si es así, se llama en él para recuperar la información de licencias. El complemento principal tiene que exponer una API para la acción. La acción también verifica la versión del complemento principal para detectar si la API está allí o no.
  • La acción ahora puede decidir si continuar o cancelar la instalación. Incluso puede interactuar con el usuario usando Display # syncExec (esto es lo que hace el código en la fase checkTrust, así que creo que es seguro). Si es necesario, la acción también podría detectar si la instalación no tiene cabeza.

también algunas precauciones:

  • acción en sí debe ser versionado. Es la versión que declaras en los archivos plugin.xml y p2.inf y es diferente de la versión del complemento. Simplemente reemplazo 1.0.0 con la misma versión que tiene mi complemento. De esta forma, la última versión del complemento de acción siempre se descarga antes de ejecutarse. Esto es genial porque ahora cualquier cambio de problema en las reglas de licencia puede implementarse en el plugin de acciones.
  • La API de acciones ha cambiado entre Eclipse 3.5 y 3.6. Probablemente dejaré de admitir 3.5 porque es bastante viejo de todos modos.
  • El complemento de acciones probablemente debería estar firmado. Es el caso en mi caso. El sistema parece casi demasiado poderoso para mí, ya que al solo señalar Eclipse a un sitio de actualización lo hace ejecutar el código descargado.

Todavía necesito probar cómo funciona esto con diferentes versiones de Eclipse y otros IDEs. Vi un error extraño (sin bloqueo) con 3.6. Sin embargo, los resultados son prometedores y parece que el sistema podría funcionar.

+0

¡Esto fue realmente genial! Gracias – giZm0

1

Los puntos de contacto se ejecutan en el momento de la instalación, lo que significa que la resolución (validación) ya se ha realizado. No estoy seguro de que me ayuden. ¿Qué pasa con la creación de una Unidad Instalable (IU) (o Función Eclipse) que representa la licencia que el usuario ha instalado? Luego, pondría una dependencia de su producto a esa licencia.

Por ejemplo, crea una IU llamada com.mycompany.license (1.0.0). Debería crear otro llamado com.mycompany.license (2.0.0). Cuando instaló una licencia, la IU apropiada se agregaría al perfil.

Ahora, cuando vaya a instalar su producto, la nueva versión del producto requeriría la versión de licencia 2.0.0. Si esta licencia no se instaló, la resolución fallaría.

¿Tiene esto sentido? ¿Crees que esto ayudaría?

+0

Es una idea interesante, pero ¿esto me permitirá ejecutar código? No importa si ocurre antes o después de la instalación, solo ocurre alrededor de la instalación. ¿Hay alguna buena documentación sobre este tema que conozcas? – giZm0

+0

¿Por qué quieres ejecutar el código? Si necesita ejecutar código arbitrario, entonces sí, necesitará un punto de contacto. Pero un punto de contacto no puede hacer que la instalación falle (bueno, supongo que podría lanzar una excepción e intentar recuperar todo, pero ese no es realmente su trabajo). Si quiere validar que la licencia es realmente correcta, lo haría en tiempo de ejecución (no en el tiempo de instalación), y solo usaría el truco IU para asegurarme de que el usuario no se encuentre en un estado no válido. En cuanto a los documentos, hay un poco aquí http://wiki.eclipse.org/Equinox/p2/Customizing_Metadata. – irbull

+0

La validación debe ejecutar algún código para poder validar. Es decir, consultar con un servidor o, en algunos casos, solo verificar el "almacén de claves". La idea de lanzar una excepción o simplemente devolver un resultado falso durante un control, como si te faltara una dependencia, fue lo que quise hacer. Pero simplemente no puedo hacer que funcione. Voy a echarle un vistazo más de cerca a la IU, pero a primera vista no parece realmente ayudarme. ¡Gracias! – giZm0

Cuestiones relacionadas