Pregunta

Sé que todavía no es muy popular, ya que la especificación fue lanzado hace sólo unos meses.

No he "instalado" de soldadura sin embargo, sólo estoy leyendo, y por esta pregunta que desee asegurarse de que he entendido este importante punto correcto:

es la resolución de los granos que se encuentran en frascos de 3 ª parte logrados por la que se declara como <alternatives> en su beans.xml?

Si no es así, cómo utilizar los granos de bibliotecas 3 ª parte que no tienen beans.xml?

Poner el frasco en la ruta de clase no funcionará a menos que haya beans.xml en su META-INF, que no se puede hacer cierto para los frascos de 3 ª parte. (Ver post Gavin King sobre el tema )

¿Fue útil?

Solución

¿por qué pensar tan complicado?

Simplemente hacer una producerMethod para las clases de 3 ª parte.

Supongamos que usted tiene una biblioteca de 3 ª parte que toma automáticamente los archivos PDF y los envía por faximile, y que le gusta usar algo como

private @Inject PdfFaxService faxService;

en su código, entonces se podría simplemente proporcionar esto con un método de productor. El PdfFaxService funciona sin estado, por lo que podemos asumir con seguridad que podemos hacerlo @ApplicationScoped:

public @Produces @ApplicationScoped PdfFaxService createFaxService() {
  return new PdfFaxService(initparameters);
}

en alguna parte.

HTH.

Otros consejos

Mi comprensión de un alternativa es que es una alternativa a alguna otra implementación de una interfaz que se puede utilizar en un entorno de despliegue diferente (por ejemplo, un entorno de pruebas). Un alternativa de frijol se declara anotando con @Alternative.

Para usar una alternativa en un escenario de implementación dada, lo selecciona en el elemento <alternatives> de la CDI META-INF/beans.xml descriptor de despliegue. Esto permitirá a los granos que son @Alternative desactiva por defecto.

Cuando se activa, si el contenedor se encuentra una dependencia ambigua para un determinado punto de inyección, que se verá en alternativas que podrían ser inyectados y, si hay exactamente una, recoger esta alternativa.

En otras palabras, alternativas son una buena manera de reemplazar un aplicación existente con otro durante el despliegue. Si no hay nada que sustituya, que no necesita alternativas, sólo hay que poner el tarro en la ruta de clase. No estoy seguro que era exactamente su pregunta, sin embargo, tengo una duda sobre el concepto de frascos de 3 ª parte.

2.1.4. Alternativas , 4.6. Alternativas y 4.7. La fijación de dependencias insatisfechas y ambiguas (pero supongo que esto es lo que está leyendo).

Actualización:. Para responder a su pregunta adicional

  

Si no es así, cómo utilizar los granos de las bibliotecas 3 ª parte que no tienen beans.xml

Esto no puede suceder, un archivo bean debe tener un bean.xml (ya sea vacío) como se detalla en la sección 15.6. Empaquetado e implementación de la documentación:

  

CDI no define ningún daño especial   archivo de implementación. Puede empaquetar   frijoles en los JAR, EJB-JAR o WAR-ningún   ubicación de implementación de la aplicación   ruta de clase. Sin embargo, el archivo debe   ser un "archivo de frijol". Esto significa que cada   Archivo que contiene los granos deben   incluir un archivo llamado en el beans.xml   META-INF directorio de la ruta de clases o   WEB-INF directorio de la raíz del servidor web (por   archivos WAR). El archivo puede estar vacío.   Frijoles desplegados en archivos que no lo hacen   tener un archivo beans.xml no será   disponibles para su uso en la aplicación.

A continuación, para fijar una dependencia insatisfecho y ambiguo, consulte la sección 4.7 mencionada anteriormente.

Actualización 2: Parece que el uso de BeforeBeanDiscovery.addAnnotatedType() es posible añadir otras clases que se deben tomar en consideración durante el descubrimiento de frijol. (BeforeBeanDiscovery es un evento)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top