2011-11-18 7 views
18

Oggi ho aggiornato il mio server Glassfish locale alla 3.1.1 in preparazione dell'aggiornamento dei server della mia azienda alla stessa versione. Sto tentando di convertire il mio progetto di servizio web per giocare bene con il nuovo server, e ho colpito un blocco stradale.Maven non riconosce EJB come dipendenza del progetto quando tenta di definire il modulo

Nel file pom del mio orecchio, in precedenza avevo sia la webapp che l'ejb elencati come dipendenze. Nel pom del webapp ho anche elencato l'ejb come dipendenza. Quando si tenta di distribuire questa configurazione di GlassFish 3.1.1, ho ricevuto questo errore:

Error occurred during deployment: Exception while deploying the app [ear] : Cannot resolve reference Local ejb-ref name=name,Local 3.x interface =interface,ejb-link=null,lookup=,mappedName=,jndi-name=,refType=Session because there are 2 ejbs in the application with interface interface. Some of the possible causes: 1. The EJB bean class was packaged in an ear lib library (or through any other library mechanism which makes the library visible to all component modules), this makes all the component modules include this bean class indirectly. 2. The EJB bean class was packaged in a component module which references the EJB, either directly or indirectly through Manifest, WEB-INF/lib. The EJB bean class should only be packaged in the declaring ejb module and not the referencing modules. The referencing modules should only include EJB interfaces.. Please see server.log fo .... msg.seeServerLog

In sostanza credo che sta dicendo che perché ho l'EJB elencato come una dipendenza in due aree diverse, Glassfish 3.1.1 doesn so a quale dipendenza guardare. Questo non era un problema in 2.1.1. Per questo motivo, ho rimosso la dipendenza dall'orecchio, visto che sarebbe ancora parte del pom efficace dell'orecchio.

Tuttavia, ora quando l'orecchio genera il file application.xml, omette tutte le informazioni ejb dal file. Ora posso distribuire l'applicazione in modo corretto, ma quando provo a eseguire qualcosa ottengo NameNotFoundExceptions riguardante l'ejbs.

ho tentato di aggiungere i moduli EJB al pom orecchio manualmente con il tag, ma quando provo a costruire il progetto che il messaggio di errore:

Artifact[ejb] is not a dependency of the project.

Questo nonostante il fatto che quando guardo il pom efficace per l'orecchio posso vedere l'ejb elencato come dipendenza.

Come posso generare correttamente il file application.xml mentre sono ancora conforme al set di regole più rigido di Glassfish 3.1.1?

Fatemi sapere se avete bisogno di ulteriori informazioni e grazie per l'aiuto!

+0

In realtà mi sono imbattuto in questo problema, e sono stato in grado di risolverlo modificando i poms. Puoi pubblicare le tue POM così posso dare un'occhiata e mostrarti cosa cambiare? Se si tratta di dati sensibili dell'azienda, cambiare i nomi dei pacchetti in qualcos'altro. – EpicOfChaos

risposta

24

La risposta è stata piuttosto semplice, e mi sto prendendo a calci un po '. Nel file di pom del webapp, ho dovuto aggiungere la linea portata alla dipendenza EJB:

<dependency> 
    <groupId>com.groupId</groupId> 
    <artifactId>webservice-service-ejbs</artifactId> 
    <version>${project.version}</version> 
    <type>ejb</type> 
    <scope>provided</scope> 
</dependency> 

Con questo, ho potuto tenere la dipendenza EJB in POM orecchio, application.xml generato correttamente e Glassfish 3.1.1 non mi sono confuso pensando che c'erano più classi di ejb con lo stesso nome.

EDIT: Ecco cosa la dipendenza ejb assomiglia nel pom orecchio

<dependency> 
    <groupId>com.groupId</groupId> 
    <artifactId>webservice-service-ejbs</artifactId> 
    <type>ejb</type> 
</dependency> 

Grazie a coloro che mi hanno aiutato.

+2

puoi fornire la dipendenza ejb dal codice ear pom. – curious

+1

certamente. scusa per la risposta in ritardo, non ho effettuato l'accesso da un po '. – lowell

Problemi correlati