2014-06-10 5 views
8

Io uso EJB all'interno dei bundle OSGi. E ora, quando ho bisogno di EJB ho tempo JNDI, ad esempio:Glassfish 4: come impostare l'applicazione o il nome del modulo per JNDI

bean = (InterfaceName) ctx.lookup("java:global/longBundleName_version/OrganizationDirBean!and.plus.path.and.InterfaceName"); 

voglio cambiare questa parte:

longBundleName_version 

Voglio dire, quando schiero fascio questa parte deve essere impostato da [glassfish-] application.xml o da [glassfish -] - ejb-jar.xml o da qualsiasi altro descrittore xml. Voglio nome JNDI per il mio EJB per essere come:

java:global/newBundleNameWithoutVersion/etc 

Il problema che non riesco a trovare quello che devo impostare in questi file. Tutti gli variants che ho trovato su Internet non sono più supportati e tutto ciò che ho provato non ha funzionato. Potresti aiutarmi?

Per favore, non offrire mappedName in quanto può essere utilizzato solo (!) Per i bean remoti. Uso fagioli che sono contemporaneamente sia locali che remoti.

Se qualcuno è coinvolto nello sviluppo del pesce vetro, potresti almeno indicare quali pacchetti devo esaminare per trovare la domanda da solo? Saró molto grato.

+1

Glassfish è open source, no? Perché non leggere il codice rilevante per scoprire se o come è possibile? – bmargulies

+0

@bmargulies Grazie per l'idea! Ci proverò, anche se penso che non sarà così facile prendere in considerazione che consiste in un sacco di codice e non ho mai lavorato con il suo codice. E a dire la verità, temo di non avere abbastanza esperienza. –

risposta

3

Si dovrebbe annotare i tuoi EJB del genere:

@Remote(value = YourInterface.class) 
@Stateless(mappedName = "java:global/fancy") 

Dopo di che, GF tronchi dice:

EJB5182:Glassfish-specific (Non-portable) JNDI names for EJB YourInterfaceImpl: [java:global/fancy, java:global/fancy!com.example.YourInterface]]] 

E almeno ero in grado di iniettare come:

<!-- language:java --> 

@EJB(lookup="java:global/fancy") 

Quindi penso che anche la ricerca manuale dovrebbe funzionare.

+0

Grazie per il tuo tempo. Il problema è che ciò che offri non è un nome JNDI portatile. E il secondo problema è che mappedName è usato solo per i bean remoti, ma ho sia locale che remoto. –

+0

Quindi probabilmente non è possibile. Se fosse possibile, e distribuirai due volte l'applicazione, quale delle risorse verrà mappata sul tuo JNDI personalizzato? –

+0

Questo è possibile. Vedi il link che ho fornito. –

Problemi correlati