Come posso trovare le risorse fornite da un contenitore Java EE?

1

Come posso trovare cosa "Risorse" fornisce un contenitore Java EE? Posso scoprire questo a livello di programmazione, o c'è documentazione a cui dovrei fare riferimento? (Si noti che il tutorial Java EE è vago su questo argomento.)

Ecco un esempio di ciò di cui sto parlando:

I was reading the Java EE 6 documentation for Using the Timer Service, and I noticed that it doesn't really explain what the TimerService technically is. If you read the documentation, you eventually see an example that a TimerService is obtainable using the @Resource annotation.

From this I take it that a TimerService is a Resource provided by the container. If it weren't for the example, I never would have realized this without reading a third-party blog post: at no point does the official tutorial say that "TimerService is a container-provided Resource". TimerService is very useful, so I would like to know what other Resources are available.

Per essere chiari, non sto cercando un post sul blog di terze parti, e il tutorial Java EE ufficiale è solo questo, un tutorial: non è completo. E ho controllato brevemente il JSR della piattaforma Java EE 7, ma non sono riuscito a trovare un riferimento a TimerService.

C'è un modo per trovare a livello di programmazione le risorse fornite da un contenitore, oppure esiste un elenco documentato di risorse che un contenitore Java EE deve fornire?

    
posta DavidS 12.04.2015 - 20:33
fonte

1 risposta

2

Qui hai un po 'di malinteso. Innanzitutto, separa l'annotazione @Resource da javax.ejb.TimerService . Ora leggi il seguente estratto dalla API JavaEE:

The Resource annotation marks a resource that is needed by the application. This annotation may be applied to an application component class, or to fields or methods of the component class. When the annotation is applied to a field or method, the container will inject an instance of the requested resource into the application component when the component is initialized. If the annotation is applied to the component class, the annotation declares a resource that the application will look up at runtime.

Ciò che implica è che qualsiasi cosa può essere dichiarata una risorsa, da iniettare da @Resource . L'annotazione può essere utilizzata per iniettare qualsiasi cosa, dalle primitive definizioni <env-entry/> nel web.xml, a vari gestori di connessione (Java Mail, Datasources e.t.c) e viene eseguita su richiesta

In genere, sono gli articoli idonei per l'accesso basato su JNDI, che vengono iniettati usando @Resource . Ciò significa che devi avere un nome JNDI per indirizzare una risorsa prima di andare a cercarla (il valore predefinito dell'elemento nome è il nome del campo qualificato dal nome della classe). JSR-250 , che definisce l'annotazione @Resource elenca tutti i possibili obiettivi per quell'annotazione.

Se, tuttavia, sei sicuro di voler sapere tutto ciò che il contenitore potrebbe essere in grado di iniettare, potresti provare elencando tutte le voci JNDI disponibili . Non lo consiglio.

Per quanto riguarda TimerService in particolare, un container deve fornire un'implementazione di TimerService per essere compatibile con JavaEE. Questa è una citazione da JSR 345 :

The container must provide the implementation of the TimerService, Timer, and TimerHandle interfaces.

Se osservi il sommario di JSR 345, vedrai che TimerService ottiene un capitolo a se stesso, allo stesso livello di argomenti come "Gestione della sicurezza". Questo dimostra che mentre TimerService può sembrare una classe di utilità, è probabilmente allo stesso livello di astrazione di qualsiasi altro servizio fornito dal contenitore

Se stai cercando un elenco autorevole di servizi obbligatori forniti dai container, le specifiche sono il posto dove cercare. Sapere quali specifiche guardare può essere complicato, ma poiché TimerService si trova nel pacchetto javax.ejb , la specifica EJB è una buona ipotesi.

    
risposta data 13.04.2015 - 03:52
fonte

Leggi altre domande sui tag