2010-11-16 2 views
26

Ho scritto un JCA resource adapter before.Un ResourceAdapter JCA 1.6 richiede un ManagedConnectionFactory?

Tuttavia, ora mi trovo nella posizione di doverne scrivere uno solo per ottenere l'accesso allo BootstrapContext e al relativo WorkManager associato, e in modo efficace per nessun altro motivo.

Se sto leggendo le specifiche correttamente - e questo è la mia domanda - sembra che se voglio qualcuno che sia in grado di uso il mio adattatore di risorse in un modo spec-compliant, ho ancora bisogno di implementare ManagedConnectionFactory , perché sembrerebbe che solo le fabbriche di connessione utente vendute dalle implementazioni ManagedConnectionFactory siano idonee per l'iniezione tramite l'annotazione @Resource.

Vai avanti, rileggilo; Aspetterò. :-)

In un mondo perfetto, mi piacerebbe scrivere il mio ResourceAdapter implementazione, annotare con @Connector, specificare tutti i @ConfigProperty bit, imballare in su in un file .rar, e da fare con esso.

Tuttavia, mi sembra che le specifiche impongano effettivamente che tutte le comunicazioni tra il consumatore (un EJB stateless nel mio caso) e il modulo dell'adattatore di risorse vengano eseguite tramite una factory di connessione utente.

Ad esempio, la sezione 6.10.1 dice:

Un adattatore di risorse deve fornire implementazioni delle seguenti interfacce:

  • javax.resource.spi.ManagedConnectionFactory
  • javax.resource. spi.ManagedConnection
  • javax.resource.spi.ManagedConnectionMetaData

Ma la sezione 18 - la sezione sulle annotazioni - non sembra fornire un rafforzamento in alcun modo significativo.

È davvero così? Suppongo che debba essere, ma sarei curioso di sapere da persone che hanno assemblato un adattatore di risorse 1.6.

+0

era molto tempo fa, 2004, quando ho dovuto implementare un ResourceAdapter, era necessaria la ManagedConnectionFactory, credo che non sia cambiato nulla da allora. – bestsss

risposta

3

"Questa sezione delinea i requisiti per il contratto di gestione delle connessioni."

È legale, utilizzando solo annotazioni JCA 1.6, definire semplicemente un'implementazione di ResourceAdapter con - fondamentalmente - nient'altro nel modulo?

Sì. questo va bene.

La specifica indica nella sezione 19.2 che un adattatore di risorse in uscita (che sarebbe) deve {handwave handwave} usufruire della gestione delle connessioni,

contratti di gestione delle transazioni e la gestione della sicurezza.In tutti e tre i casi, voglio solo indicare - preferibilmente omettendo annotazioni e/o codice - che non lo sono

Se non sono necessarie funzionalità di comunicazione in uscita, non c'è bisogno per definirli (collegamento in fabbrica, gestita-connection-fabbrica, ecc,)

è sufficiente semplicemente costruire un POJO che implementa ResourceAdapter, annotare con @Connector, e passare da lì?

Sì.

Posso quindi inserire un POJO nel mio EJB utilizzando l'annotazione @Resource?

Non credo che Java Bean "ResourceAdapter" possa essere iniettato usando l'annotazione @Resource. Ogni volta che l'adattatore risorse viene distribuito/abilitato/server viene avviato,

GlassFish eseguirà il bootstrap dell'adattatore risorse.

+3

OK, ma la domanda sopra non chiede se sia possibile costruire un ResourceAdapter senza connessione. Dalla tua risposta (e da altri) vedo che puoi farlo, ma se vuoi che i tuoi utenti finali possano usarlo, allora la mia domanda è: è necessario fornire una fabbrica di connessioni? –

+0

Cosa intendi con usarlo? Devi attivarlo dall'AS. Il meccanismo più ovvio per fare questo è iniettare ConnectionFactory in un EJB '@Startup @ Stateless'. Ora ottieni la certezza che il tuo bootstrap JCA venga invocato con la distribuzione. Per la comunicazione forse AdministeredObject è un altro meccanismo per controllarlo, se la nozione di "messaggio" non si adatta bene a te. –