title: glassfish: while deploying the app IOException: invalid zip file
body: <p>In deploying the EAR through the CLI, this error occurs:</p>
  
  <pre><code>Exception while deploying the app [EnterpriseLegacy] : java.io.IOException: invalid zip file: file:/home/thufir/glassfish-4.1/glassfish/domains/domain1/application /EnterpriseLegacy/lib/RemoteEJB.jar
  </code></pre>
  
  <p>and yet, Netbeans deploys the same EAR fine from within the IDE.</p>
  
  <p>I think the problem is that the EJB module depends on a remote interface, <code>RemoteEJB</code> which builds as a JAR.  This JAR is included with the EAR, but I don't believe that's sufficient.  I've tried placing it in <code>glassfish-4.1/glassfish/domains/domain1/lib/ext/</code> and <code>glassfish-4.1/glassfish/lib/</code>, however, that doesn't resolve or change the exception.</p>
  
  <p>Is the problem that the <code>RemoteEJB</code> JAR needs to be available on glassfish?  Before this EJB implemented this interface, it deployed fine.  (The reason the EJB implements a remote interface is so that the EJB is available for the web module.)    </p>
  
  <p>Deploying from within Netbeans, before and after:</p>
  
  <pre><code>thufir@dur:~$ 
  thufir@dur:~$ glassfish-4.1/glassfish/bin/asadmin list-applications
  Nothing to list.
  No applications are deployed to this target server.
  Command list-applications executed successfully.
  thufir@dur:~$ 
  thufir@dur:~$ glassfish-4.1/glassfish/bin/asadmin list-applications
  EnterpriseLegacy  &lt;ear, web, ejb&gt;  
  Command list-applications executed successfully.
  thufir@dur:~$ 
  </code></pre>
  
  <p>glassfish log of deployment from Netbeans:</p>
  
  <pre><code>[2014-10-02T22:04:41.808-0700] [glassfish 4.1] [INFO] [AS-EJB-00054] [javax.enterprise.ejb.container] [tid: _ThreadID=39 _ThreadName=admin-listener(1)] [timeMillis: 1412312681808] [levelValue: 800] [[
    Portable JNDI names for EJB MySingletonQueue: [java:global/EnterpriseLegacy/EnterpriseLegacy-ejb/MySingletonQueue!db.RemoteQueue, java:global/EnterpriseLegacy/EnterpriseLegacy-ejb/MySingletonQueue]]]
  
  [2014-10-02T22:04:41.914-0700] [glassfish 4.1] [WARN] [] [org.jboss.weld.Event] [tid: _ThreadID=39 _ThreadName=admin-listener(1)] [timeMillis: 1412312681914] [levelValue: 900] [[
    WELD-000411: Observer method [BackedAnnotatedMethod] org.glassfish.sse.impl.ServerSentEventCdiExtension.processAnnotatedType(@Observes ProcessAnnotatedType&lt;Object&gt;, BeanManager) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.]]
  
  [2014-10-02T22:04:41.926-0700] [glassfish 4.1] [WARN] [] [org.jboss.weld.Event] [tid: _ThreadID=39 _ThreadName=admin-listener(1)] [timeMillis: 1412312681926] [levelValue: 900] [[
    WELD-000411: Observer method [BackedAnnotatedMethod] public org.glassfish.jms.injection.JMSCDIExtension.processAnnotatedType(@Observes ProcessAnnotatedType&lt;Object&gt;) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.]]
  
  [2014-10-02T22:04:41.929-0700] [glassfish 4.1] [WARN] [] [org.jboss.weld.Event] [tid: _ThreadID=39 _ThreadName=admin-listener(1)] [timeMillis: 1412312681929] [levelValue: 900] [[
    WELD-000411: Observer method [BackedAnnotatedMethod] public org.glassfish.jms.injection.JMSCDIExtension.processAnnotatedType(@Observes ProcessAnnotatedType&lt;Object&gt;) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.]]
  
  [2014-10-02T22:04:41.939-0700] [glassfish 4.1] [WARN] [] [org.jboss.weld.Event] [tid: _ThreadID=39 _ThreadName=admin-listener(1)] [timeMillis: 1412312681939] [levelValue: 900] [[
    WELD-000411: Observer method [BackedAnnotatedMethod] private org.glassfish.jersey.gf.cdi.internal.CdiComponentProvider.processAnnotatedType(@Observes ProcessAnnotatedType&lt;Object&gt;) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.]]
  
  [2014-10-02T22:04:41.950-0700] [glassfish 4.1] [WARN] [] [org.jboss.weld.Event] [tid: _ThreadID=39 _ThreadName=admin-listener(1)] [timeMillis: 1412312681950] [levelValue: 900] [[
    WELD-000411: Observer method [BackedAnnotatedMethod] org.glassfish.sse.impl.ServerSentEventCdiExtension.processAnnotatedType(@Observes ProcessAnnotatedType&lt;Object&gt;, BeanManager) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.]]
  
  [2014-10-02T22:04:41.954-0700] [glassfish 4.1] [WARN] [] [org.jboss.weld.Event] [tid: _ThreadID=39 _ThreadName=admin-listener(1)] [timeMillis: 1412312681954] [levelValue: 900] [[
    WELD-000411: Observer method [BackedAnnotatedMethod] private org.glassfish.jersey.gf.cdi.internal.CdiComponentProvider.processAnnotatedType(@Observes ProcessAnnotatedType&lt;Object&gt;) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.]]
  
  [2014-10-02T22:04:42.523-0700] [glassfish 4.1] [INFO] [jsf.config.listener.version] [javax.enterprise.resource.webcontainer.jsf.config] [tid: _ThreadID=39 _ThreadName=admin-listener(1)] [timeMillis: 1412312682523] [levelValue: 800] [[
    Initializing Mojarra 2.2.7 ( 20140610-1547 https://svn.java.net/svn/mojarra~svn/tags/2.2.7@13362) for context '/EnterpriseLegacy-war']]
  
  [2014-10-02T22:04:43.199-0700] [glassfish 4.1] [INFO] [AS-WEB-GLUE-00172] [javax.enterprise.web] [tid: _ThreadID=39 _ThreadName=admin-listener(1)] [timeMillis: 1412312683199] [levelValue: 800] [[
    Loading application [EnterpriseLegacy#EnterpriseLegacy-war.war] at [EnterpriseLegacy-war]]]
  
  [2014-10-02T22:04:43.267-0700] [glassfish 4.1] [INFO] [] [javax.enterprise.system.core] [tid: _ThreadID=39 _ThreadName=admin-listener(1)] [timeMillis: 1412312683267] [levelValue: 800] [[
    EnterpriseLegacy was successfully deployed in 2,144 milliseconds.]]
  </code></pre>
  
  <p>and the web module runs as expected when deployed from Netbeans.  How can I deploy the EAR manually to Glassfish?</p>
  
  <p>deploying the EAR from the CLI:   </p>
  
  <pre><code>thufir@dur:~$ 
  thufir@dur:~$ glassfish-4.1/glassfish/bin/asadmin list-applications
  Nothing to list.
  No applications are deployed to this target server.
  Command list-applications executed successfully.
  thufir@dur:~$ 
  thufir@dur:~$ glassfish-4.1/glassfish/bin/asadmin deploy NetBeansProjects/EnterpriseLegacy/dist/EnterpriseLegacy.ear
  remote failure: Error occurred during deployment: Exception while deploying the app [EnterpriseLegacy] : java.io.IOException: invalid zip file: file:/home/thufir/glassfish-4.1/glassfish/domains/domain1/applications/EnterpriseLegacy/lib/RemoteEJB.jar. Please see server.log for more details.
  Command deploy failed.
  thufir@dur:~$ 
  </code></pre>
  
  <p>glassfish log of failed manual deploy:    </p>
  
  <pre><code>[2014-10-02T21:20:47.809-0700] [glassfish 4.1] [SEVERE] [] [javax.enterprise.system.core] [tid: _ThreadID=40 _ThreadName=admin-listener(3)] [timeMillis: 1412310047809] [levelValue: 1000] [[
    Exception while deploying the app [EnterpriseLegacy] : java.io.IOException: invalid zip file: file:/home/thufir/glassfish-4.1/glassfish/domains/domain1/applications/EnterpriseLegacy/lib/RemoteEJB.jar
  java.io.IOException: invalid zip file: file:/home/thufir/glassfish-4.1/glassfish/domains/domain1/applications/EnterpriseLegacy/lib/RemoteEJB.jar
      at com.sun.enterprise.deployment.deploy.shared.InputJarArchive$ArchiveJarEntrySource.&lt;init&gt;(InputJarArchive.java:582)
      at com.sun.enterprise.deployment.deploy.shared.InputJarArchive$ArchiveJarEntrySource.&lt;init&gt;(InputJarArchive.java:573)
      at com.sun.enterprise.deployment.deploy.shared.InputJarArchive.createEntryEnumeration(InputJarArchive.java:451)
      at com.sun.enterprise.deployment.deploy.shared.InputJarArchive.entries(InputJarArchive.java:203)
      at com.sun.enterprise.deployment.deploy.shared.InputJarArchive.access$100(InputJarArchive.java:74)
      at com.sun.enterprise.deployment.deploy.shared.InputJarArchive$1.enumeration(InputJarArchive.java:166)
      at com.sun.enterprise.deployment.deploy.shared.InputJarArchive$CollectionWrappedEnumeration.&lt;init&gt;(InputJarArchive.java:728)
      at com.sun.enterprise.deployment.deploy.shared.InputJarArchive.getDirectories(InputJarArchive.java:161)
      at org.glassfish.javaee.full.deployment.EarDetector.isEARFromIntrospecting(EarDetector.java:142)
      at org.glassfish.javaee.full.deployment.EarDetector.handles(EarDetector.java:110)
      at org.glassfish.deployment.common.DeploymentUtils.isArchiveOfType(DeploymentUtils.java:213)
      at org.glassfish.deployment.common.DeploymentUtils.isArchiveOfType(DeploymentUtils.java:225)
      at org.glassfish.resources.util.ResourceUtil.hasResourcesXML(ResourceUtil.java:63)
      at org.glassfish.resources.util.ResourceUtil.hasResourcesXML(ResourceUtil.java:76)
      at org.glassfish.resources.connector.ResourcesCompositeSniffer.handles(ResourcesCompositeSniffer.java:83)
      at org.glassfish.internal.deployment.GenericSniffer.handles(GenericSniffer.java:105)
      at com.sun.enterprise.v3.server.SnifferManagerImpl.getSniffers(SnifferManagerImpl.java:145)
      at com.sun.enterprise.v3.server.SnifferManagerImpl.getSniffers(SnifferManagerImpl.java:132)
      at com.sun.enterprise.v3.server.ApplicationLifecycle.getSniffers(ApplicationLifecycle.java:658)
      at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:358)
      at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219)
      at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491)
      at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:539)
      at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:535)
      at java.security.AccessController.doPrivileged(Native Method)
      at javax.security.auth.Subject.doAs(Subject.java:356)
      at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:534)
      at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:565)
      at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:557)
      at java.security.AccessController.doPrivileged(Native Method)
      at javax.security.auth.Subject.doAs(Subject.java:356)
      at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:556)
      at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1464)
      at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:109)
      at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1846)
      at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1722)
      at org.glassfish.admin.rest.resources.admin.CommandResource.executeCommand(CommandResource.java:404)
      at org.glassfish.admin.rest.resources.admin.CommandResource.execCommandSimpInMultOut(CommandResource.java:234)
      at sun.reflect.GeneratedMethodAccessor56.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:606)
      at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81)
      at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:151)
      at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:171)
      at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:152)
      at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:104)
      at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:387)
      at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:331)
      at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:103)
      at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:271)
      at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
      at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
      at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
      at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
      at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
      at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:297)
      at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:254)
      at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1028)
      at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpContainer.service(GrizzlyHttpContainer.java:365)
      at org.glassfish.admin.rest.adapter.JerseyContainerCommandService$3.service(JerseyContainerCommandService.java:173)
      at org.glassfish.admin.rest.adapter.RestAdapter.service(RestAdapter.java:179)
      at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
      at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
      at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
      at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175)
      at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
      at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
      at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
      at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
      at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
      at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
      at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
      at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
      at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
      at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
      at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
      at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
      at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
      at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
      at java.lang.Thread.run(Thread.java:744)
  ]]
  
  thufir@dur:~$ 
  thufir@dur:~$ 
  </code></pre>
  
  <p>The EJB implements this remote interface:</p>
  
  <p>package db;</p>
  
  <p>import javax.ejb.Remote;</p>
  
  <p>@Remote
  public interface RemoteQueue {</p>
  
  <pre><code>public int getNext();
  </code></pre>
  
  <p>}</p>
  
  <p>the EJB in the <code>EnterpriseLegacy-ejb</code> module:</p>
  
  <p>package db;</p>
  
  <p>import javax.ejb.Singleton;</p>
  
  <p>@Singleton
  public class MySingletonQueue implements RemoteQueue {</p>
  
  <pre><code>int i = 3;
  
  @Override
  public int getNext() {
      return i;
  }
  </code></pre>
  
  <p>}</p>
  
  <p>the structure of <code>EnterpriseLegacy</code> with an EJB and web module:</p>
  
  <pre><code>NetBeansProjects/EnterpriseLegacy/
  ├── build.xml
  ├── EnterpriseLegacy-ejb
  │   ├── build.xml
  │   ├── nbproject
  │   │   ├── ant-deploy.xml
  │   │   ├── build-impl.xml
  │   │   ├── genfiles.properties
  │   │   ├── private
  │   │   │   ├── private.properties
  │   │   │   └── private.xml
  │   │   ├── project.properties
  │   │   └── project.xml
  │   ├── setup
  │   │   └── glassfish-resources.xml
  │   └── src
  │       ├── conf
  │       │   ├── MANIFEST.MF
  │       │   └── persistence.xml
  │       └── java
  │           └── db
  │               ├── Clients.java
  │               ├── ClientsJpaController.java
  │               ├── exceptions
  │               │   ├── IllegalOrphanException.java
  │               │   ├── NonexistentEntityException.java
  │               │   ├── PreexistingEntityException.java
  │               │   └── RollbackFailureException.java
  │               ├── MySingletonQueue.java
  │               └── Queries.java
  ├── EnterpriseLegacy-war
  │   ├── build.xml
  │   ├── nbproject
  │   │   ├── ant-deploy.xml
  │   │   ├── build-impl.xml
  │   │   ├── genfiles.properties
  │   │   ├── private
  │   │   │   ├── private.properties
  │   │   │   └── private.xml
  │   │   ├── project.properties
  │   │   └── project.xml
  │   ├── setup
  │   │   └── sun-resources.xml
  │   ├── src
  │   │   ├── conf
  │   │   │   └── MANIFEST.MF
  │   │   └── java
  │   │       └── dur
  │   │           └── MySessionBean.java
  │   └── web
  │       ├── index.xhtml
  │       ├── menu.xhtml
  │       ├── next.xhtml
  │       ├── template.xhtml
  │       └── WEB-INF
  │           └── web.xml
  ├── nbproject
  │   ├── ant-deploy.xml
  │   ├── build-impl.xml
  │   ├── genfiles.properties
  │   ├── private
  │   │   ├── private.properties
  │   │   └── private.xml
  │   ├── project.properties
  │   └── project.xml
  └── src
      └── conf
          └── MANIFEST.MF
  </code></pre>
  
  <p>note that when the EAR is unzipped, the interface JAR is included (as it should be):</p>
  
  <pre><code>thufir@dur:~/NetBeansProjects/EnterpriseLegacy/dist$ 
  thufir@dur:~/NetBeansProjects/EnterpriseLegacy/dist$ ll lib/
  total 1280
  drwxrwxr-x 2 thufir thufir    4096 Oct  2 21:35 ./
  drwxrwxr-x 4 thufir thufir    4096 Oct  2 21:36 ../
  -rw-rw-r-- 1 thufir thufir 1302203 Oct  2 21:35 javaee-web-api-7.0.jar
  -rw-rw-r-- 1 thufir thufir       0 Oct  2 21:35 RemoteEJB.jar
  thufir@dur:~/NetBeansProjects/EnterpriseLegacy/dist$ 
  </code></pre>
  
  <p>Somehow Netbeans is including <code>RemoteEJB</code>, which is the interface for the EJB, in the deployment.  How and where is Netbeans deploying the JAR to Glassfish?  If that is, in fact, the source of the error.</p>