Bonjour,
J'essaye de créer un projet "EAR" contenant les projets suivants :
- Une application cliente, démarrable en java web start, et qui ne contiendrait que les interfaces des EJB ainsi que les classes Entités.
- Une application "commons" qui regroupe des classes utilisées à la fois par la partie cliente et par la partie serveur
- Une application "EJB" qui contient les EJB et leurs interfaces Remote (EJB 3.1)
- Une application "JPA" qui contient tous les Entity Beans.
Mon problème est de faire communiquer tout cet ensemble en rendant visible par l'application cliente les ejb et les entités.
En ne faisant que le minimum sous Eclipse on a dans notre EAR le projet EJB ; et le projet Client à la racine de l'EJB, puis les projets Common ; JPA dans un sous-dossier lib.
En lançant le module Client les classes Entités ne sont pas trouvées.
Après bidouillages pour définir l'architecture telle qu'elle me semblerait correcte, j'en arrive à la structure suivante (les noms des projets ont été simplifiés) :
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
- lib
----Commons.jar
- META-INF
----Manifest.mf (pas de classpath)
- Client.jar
---- <packages>/classes
---- META-INF
-------- Manifest.mf (classpath: EJB.jar JPA.jar + Main-Class)
-------- application-client.xml
---- JPA.jar
-------- <packages>/classes
-------- META-INF
------------ Manifest.mf (pas de classpath)
------------ persistence.xml
---- EJB.jar
-------- <packages>/classes
-------- META-INF
------------ Manifest.mf (class-path: JPA.jar)
-------- JPA.jar
------------ <packages>/classes
------------ META-INF
---------------- Manifest.mf (pas de classpath)
---------------- persistence.xml
- EJB.jar
---- <packages>/classes
---- META-INF
-------- Manifest.mf (class-path: JPA.jar)
---- JPA.jar
-------- <packages>
-------- META-INF
------------ Manifest.mf (pas de classpath)
------------ persistence.xml
- JPA.jar
---- <packages>/classes
---- META-INF
-------- Manifest.mf (pas de classpath)
-------- persistence.xml |
Je ne suis pas sûr que cette structure soit correcte ; et d'ailleurs j'ai des problèmes pour déployer. En effet, le persistence Unit est configuré dans le projet JPA ; et les EJB ne trouvent pas la déinition de cette persistenceUnit.
Message d'erreur :
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
Infos: Interceptor called for ...TimeWorker
Grave: Exception while invoking class org.glassfish.persistence.jpa.JPADeployer prepare method
Grave: java.lang.RuntimeException: Impossible de résoudre une unité de persistance correspondant à persistence-context-ref-name [TimeWorkerJPA] dans l’étendue du module [TimeWorker#TimeWorkerEJB.jar]. Vérifiez votre application.
at com.sun.enterprise.deployment.BundleDescriptor.findReferencedPUViaEMRef(BundleDescriptor.java:694)
at com.sun.enterprise.deployment.BundleDescriptor.findReferencedPUsViaPCRefs(BundleDescriptor.java:682)
at com.sun.enterprise.deployment.EjbBundleDescriptor.findReferencedPUs(EjbBundleDescriptor.java:901)
at org.glassfish.persistence.jpa.JPADeployer.createEMFs(JPADeployer.java:185)
at org.glassfish.persistence.jpa.JPADeployer.prepare(JPADeployer.java:167)
at com.sun.enterprise.v3.server.ApplicationLifecycle.prepareModule(ApplicationLifecycle.java:872)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:410)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240)
at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:388)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:355)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:370)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1069)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:98)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1249)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1237)
at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:473)
at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:226)
at org.glassfish.grizzly.http.server.StaticHttpHandler.service(StaticHttpHandler.java:189)
at com.sun.enterprise.v3.server.HK2Dispatcher.dispatch(HK2Dispatcher.java:113)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:236)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:162)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:160)
at org.glassfish.grizzly.filterchain.ExecutorResolver$3.execute(ExecutorResolver.java:95)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:444)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:364)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:290)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:133)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:76)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:63)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:823)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:116)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$000(WorkerThreadIOStrategy.java:55)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$1.run(WorkerThreadIOStrategy.java:98)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:508)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:488)
at java.lang.Thread.run(Thread.java:722)
Grave: at com.sun.enterprise.deployment.BundleDescriptor.findReferencedPUViaEMRef(BundleDescriptor.java:694)
Grave: at com.sun.enterprise.deployment.BundleDescriptor.findReferencedPUsViaPCRefs(BundleDescriptor.java:682)
Grave: at com.sun.enterprise.deployment.EjbBundleDescriptor.findReferencedPUs(EjbBundleDescriptor.java:901)
Grave: at org.glassfish.persistence.jpa.JPADeployer.createEMFs(JPADeployer.java:185)
Grave: at org.glassfish.persistence.jpa.JPADeployer.prepare(JPADeployer.java:167)
Grave: at com.sun.enterprise.v3.server.ApplicationLifecycle.prepareModule(ApplicationLifecycle.java:872)
Grave: at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:410)
Grave: at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240)
Grave: at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:388)
Grave: at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:355)
Grave: at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:370)
Grave: at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1069)
Grave: at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:98)
Grave: at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1249)
Grave: at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1237)
Grave: at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:473)
Grave: at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:226)
Grave: at org.glassfish.grizzly.http.server.StaticHttpHandler.service(StaticHttpHandler.java:189)
Grave: at com.sun.enterprise.v3.server.HK2Dispatcher.dispatch(HK2Dispatcher.java:113)
Grave: at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:236)
Grave: at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:162)
Grave: at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:160)
Grave: at org.glassfish.grizzly.filterchain.ExecutorResolver$3.execute(ExecutorResolver.java:95)
Grave: at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:444)
Grave: at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:364)
Grave: at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:290)
Grave: at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:133)
Grave: at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:76)
Grave: at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:63)
Grave: at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:823)
Grave: at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
Grave: at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:116)
Grave: at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$000(WorkerThreadIOStrategy.java:55)
Grave: at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$1.run(WorkerThreadIOStrategy.java:98)
Grave: at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:508)
Grave: at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:488)
Grave: at java.lang.Thread.run(Thread.java:722)
Grave: Exception while preparing the app
Grave: Impossible de résoudre une unité de persistance correspondant à persistence-context-ref-name [TimeWorkerJPA] dans l’étendue du module [TimeWorker#TimeWorkerEJB.jar]. Vérifiez votre application.
java.lang.RuntimeException: Impossible de résoudre une unité de persistance correspondant à persistence-context-ref-name [TimeWorkerJPA] dans l’étendue du module [TimeWorker#TimeWorkerEJB.jar]. Vérifiez votre application.
at com.sun.enterprise.deployment.BundleDescriptor.findReferencedPUViaEMRef(BundleDescriptor.java:694)
at com.sun.enterprise.deployment.BundleDescriptor.findReferencedPUsViaPCRefs(BundleDescriptor.java:682)
at com.sun.enterprise.deployment.EjbBundleDescriptor.findReferencedPUs(EjbBundleDescriptor.java:901)
at org.glassfish.persistence.jpa.JPADeployer.createEMFs(JPADeployer.java:185)
at org.glassfish.persistence.jpa.JPADeployer.prepare(JPADeployer.java:167)
at com.sun.enterprise.v3.server.ApplicationLifecycle.prepareModule(ApplicationLifecycle.java:872)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:410)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240)
at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:388)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:355)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:370)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1069)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:98)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1249)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1237)
at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:473)
at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:226)
at org.glassfish.grizzly.http.server.StaticHttpHandler.service(StaticHttpHandler.java:189)
at com.sun.enterprise.v3.server.HK2Dispatcher.dispatch(HK2Dispatcher.java:113)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:236)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:162)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:160)
at org.glassfish.grizzly.filterchain.ExecutorResolver$3.execute(ExecutorResolver.java:95)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:444)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:364)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:290)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:133)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:76)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:63)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:823)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:116)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$000(WorkerThreadIOStrategy.java:55)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$1.run(WorkerThreadIOStrategy.java:98)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:508)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:488)
at java.lang.Thread.run(Thread.java:722)
Grave: Exception while preparing the app : Impossible de résoudre une unité de persistance correspondant à persistence-context-ref-name [TimeWorkerJPA] dans l’étendue du module [TimeWorker#TimeWorkerEJB.jar]. Vérifiez votre application. |
Du coup j'ai un doute, est-ce que le projet Client (Java Web Start) doit contenir un double des projets EJB / JPA au sein de son jar, ou doit il trouver les JAR dans le projet EAR ? Je n'ai pas trouvé comment demander à Eclipse de ne mettre que les interfaces des EJB dans le déploiement côté client.
Merci pour votre aide ... :-)