PDA

View Full Version : JBOSS aiuto!!!!


stebertoz
14-03-2011, 16:49
Ciao,
vorrei sapere se tra di voi c'è un guru di programmazione EJB 3 su server JBOSS.

Il succo del problema è che questo:
creo su Eclipse un progetto EJB con un bean semplice e relative interfacce + un client java ( da vari brevi tutorial presi sul web ), esporto il tutto come jar nel path ..../jboss/server/default/deploy ( la console del server dice che ha caricato il pacchetto ); ora lancio il client come java application: subito ho problemi con il jndi quando inizializzo un contesto e faccio ctx.lookup(mybean).

Ora se qualcuno mi sa aiutare posso fornire maggiori dettagli sul problema.

Grazie

gokan
14-03-2011, 20:29
Ciao, non ho esperienze di utilizzo di un ejb3 fuori da un Application Server, però credo che non puoi lanciare un ejb da un classicissimo main..a meno che di utilizzare un application cliente container (ACC).
Tu hai provato questa soluzione?

Se può esserti utile
http://download.oracle.com/docs/cd/B32110_01/web.1013/b28958/appclient.htm#DAFHJFBF

stebertoz
14-03-2011, 22:02
Ciao, non ho esperienze di utilizzo di un ejb3 fuori da un Application Server, però credo che non puoi lanciare un ejb da un classicissimo main..a meno che di utilizzare un application cliente container (ACC).
Tu hai provato questa soluzione?

Se può esserti utile
http://download.oracle.com/docs/cd/B32110_01/web.1013/b28958/appclient.htm#DAFHJFBF

in realtà credo di sì, molti esempi lo fanno; crei la tua applicazione con il bean e relativa ( se necessaria ) interfaccia. impacchetti e metti nel server.
poi o sullo stesso progetto o su uno nuovo crei un file class con dentro un main e da lì cerchi il jndi name del bean con ctx.lookup. questo semplice client si lancia come java application e non "run on server".

però....
a parte il fatto che ho visto tanti modi di richiamare il nome, soprattutto nella stringa passata al ctx.lookup ( ed ho una gran confusione ); ottengo sempre il runtime error NoInitialContext ( anche con il server spento me lo da... ). Cercando sul web ho visto questo: "Solution: Set the Context.INITIAL_CONTEXT_FACTORY environment property to the class name of the initial context implementation that you are using". Solo che non saprei come impostare la cosa perchè non ho ben chiaro il tutto ( parla nello specifico anche di settaggi della JVM ).

infine....
ho letto che le EJB 3.1 hanno un nuovo metodo di jndi globale che dovrebbe permettere ricerche più ampie ecc...; la cosa però non funziona bene ( segnalazione bug aperta in febbraio 2011 sul sito di jboss ).


Quindi mi chiedo se il problema sia dovuto alle EJB3.1 e relativo bug, errore mio ( ma mi sembra impossibile perchè ho replicato vari codici di tutorial ed ottengo sempre la stessa cosa ), oppure qualche configurazione particolare di Eclipse o Jboss 6.0.0 final o JVM ( uso la JDK ) o altro.

:mc:

Sarettah89
15-03-2011, 10:06
Hai impostato il file mysql-ds.xml ??
devi metterci dentro una cosa del tipo

<jndi-name>MySqlDS</jndi-name>

Prova a dare un'occhiata su google ricordo che era un casino XD

consiglio mio è di prendere la cartella di JBOSS e fare Canc e svuotare subito il cestino!!! Usa glassfish e netbeans che va tutto alla perfezione!!

stebertoz
15-03-2011, 11:22
Hai impostato il file mysql-ds.xml ??
devi metterci dentro una cosa del tipo

<jndi-name>MySqlDS</jndi-name>

Prova a dare un'occhiata su google ricordo che era un casino XD

consiglio mio è di prendere la cartella di JBOSS e fare Canc e svuotare subito il cestino!!! Usa glassfish e netbeans che va tutto alla perfezione!!


essendo un progetto universitario devo obbligatoriamente usare JBOSS.
eclipse è stata una scelta fatta vedendo che altri lo hanno usato ( inoltre su web si dice sia più completo anche se più ostico ).

Ho cmq risolto aggiungendo questo:

Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
env.put(Context.PROVIDER_URL, "localhost:1099");
env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming.client");
InitialContext ctx = new InitialContext(env);
Object obj = ctx.lookup("CalculatorBean/remote");
calculator = (CalculatorRemote) obj;

quando prima, come scritto in tutti gli esempi, non trattavo la parte riguardante l'env.
Ora ho capito che queste cose servono per chiamare il costruttore di InitialContext con dei parametri.
Mi chiedo però perchè a me serve dare queste info mentre nei tutorial no ( ho letto che queste info sono le stesse del file jndi.properties; però io di questi file ne ho trovati solo all'interno dei server e contengono solo ciò:

# DO NOT EDIT THIS FILE UNLESS YOU KNOW WHAT YOU ARE DOING
#
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

?????


Ora vorrei sapere anche una cosa.
Spiego prima però la struct del mio progetto ( creato come EJB project, scelto per assonanza con quello che devo fare io, ovvero un progetto EJB3.0, anche se non so la differenza dalle altre tipologie ):

MioProgetto->Cartella EJB Modules->package Calculator->CalculatorBean & Remote
MioProgetto->Cartella EJB Modules->package CalculatorClient->Client


se sposto il client in un progetto diverso, tipo MioProgettoClient subito mi viene indicato che i nomi non sono più risolvibili. Questo probabilmente perchè il lookup necessita di un nome diverso, ma non so come.


Grazie

stebertoz
17-03-2011, 22:35
nessuno sa aiutarmi?

carter100
18-03-2011, 14:36
consiglio mio è di prendere la cartella di JBOSS e fare Canc e svuotare subito il cestino!!! Usa glassfish e netbeans che va tutto alla perfezione!!

Si, funziona tutto in automatico. Ti legge nel pensiero...
Forse era meglio non commentare se non devi argomentare.

nessuno sa aiutarmi?

ma che devi fare? 2 progetti distinti? Allora dal client tasto destro, proprietà, java build path e in projects importi quello ejb così ti vede la classe. Altrimenti non Ho capito, ed è anche probabile dato il sonno...