È stato utile?

Soluzione 3

Ciao grazie a tutti per le tue risposte. Penso che ServicereGistry funzioni in un contenitore OSGI per istanziare un servizio ma solo all'interno dello stesso classloader. E questo è facilitato dall'uso di frammenti OSGI . Quindi, a condizione che l'implementer sia in un frammento che definisce il suo frazione-host come bundle che contiene la classe che ha il codice di ricerca Serviceristryup, allora ServicereGery funzionerà.

Ecco perché sta lavorando nel codice XDoCreport a cui ho collegato. In questo caso il codice del serviceloader è chiamato da una classe astratta in fr.opensagres.xdocreport.core (un pacchetto), che è esteso da Classe di calcestruzzo in FR.OPENENSGRES.XDOCREPORT.Document (quindi la chiamata di ServiceRegistry è in fr.OpensaGres.xdocreport.document). L'implementazione del servizio è in fr.opensagres.xdocreport.document.docx . Un frammento di cui ha definito il suo Fram-host come fr.opensagres.xdocreport.document .

Allora FR.OnsaGres.xDoCreport.document e fr.OpensaGres.xdocreport.document.docx Utilizzare lo stesso caricatore di classe ... quindi funziona!

Altri suggerimenti

Fuori dalla scatola, OSGI non supporta questo, è necessario modificare un po 'il tuo codice. Ma ci sono strumenti in giro come Aries Spi Fly e pax-swissbox quel supportovoi Usando questi servizi SPI "Servizi"

No, non lo è.Penso che scoprirà solo i servizi nel caricatore della classe di sistema, quindi è piuttosto inutile per i bundle.

Potrebbe esserci una soluzione alternativa, questo post è carinaUtile, anche se dubito se è di qualsiasi utilità al tuo problema.

Anche OSGI 5 avrà supporto per questo ("Mediatore del caricatore del servizio").L'implementazione di riferimento è SPI Fly da Apache Ariete

In XDoCorreport volevamo avere un Modular API Reporting per gestire:

    .
  • Qualsiasi tipo Document (DOCX, ODT, PPTX ...). E puoi implementare il tuo tipo di documento se lo desideri e la registrati tramite javax.imageio.spi.serviceregistryisty.
  • Qualsiasi tipo di motore modello (Freemarker, Velocity ...). E puoi implementare il tuo modello di modello se lo desideri e registralo tramite javax.imageio.spi.serviceregistryergistry.
  • Qualsiasi tipo di convertitore (DOCX-> PDF Converter con POI + ITEXT, DOCX-> XHTML Convertitore con POI, ODT-> Convertitore PDF con ODFDOM + ITEXT, ODT-> XHTML Convertitore con Odfdom ...). E puoi implementare il proprio convertitore se lo si desidera e registrarlo tramite javax.imageio.spi.serviceregistry (ex: implementazione DOCX-> PDF Converter con DOCX4J + FOP, DOCX-> PDF Convertitore con JodConverter, ecc.).

    Come hai capito, javax.image.spi.Serviceregistry.spi.ServicereGistry funziona su un contesto OSGI perché utilizziamo il frammento OSGI (condividere lo stesso classloader) e non un pacchetto OSGI. Abbiamo fatto questa scelta per gestire il contesto non OSGI e OSGI sia con lo stesso codice.

    Abbiamo deciso di utilizzare il frammento OSGI e non un pacchetto OSGI perché:

      .
    1. Se utilizziamo un pacchetto OSGI, dobbiamo sviluppare un attivatore OSGI per registrare la nostra scoperta (in questo context bundle, javax.imageo.spi.serviceregristry non funziona).
    2. Se utilizziamo Bundle OSGI, è necessario configurare il livello di avvio per ogni fasci che registrano la scoperta.

      L'unico disavanto per utilizzare il frammento OSGI è che non è possibile utilizzare nel contenitore OSGI diverse versione del modello XDoCreport, convertitore, documento. Ma è una buona caratteristica per XDoCreport?

      Non è necessario Javax.image.spi.ServicereGistry funziona con JDK5 (e JDK6). JDK6 fornisce Java.util.Serviceloader che è il nuovo class ai servizi di regsitro come javax.imageio.spi.serviceregeristry.

      In XDoCreport Desideriamo supportare JDK5 + JDK6. XDoCreport 0.9.8 Usato solo Javax.image.spi.ServicereGistry . Ma sembra che Google App Engine vieta l'uso di questa classe (vedi il nostro Problema 132 ). Quindi ho sviluppato per XDoCreport 1.0.0 jdkserviceloader da gestire con la riflessione java sia java.util.serviceloader e javax.imageo.spi .ServicereGistry per JDK5 e JDK6.

      Saluti Angelo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top