glassfish:部署应用程序时出现 IOException:无效的 zip 文件

2024-04-06

通过 CLI 部署 EAR 时,会出现以下错误:

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

然而,Netbeans 在 IDE 中部署了相同的 EAR。

我认为问题在于EJB模块依赖于远程接口,RemoteEJB它构建为 JAR。该 JAR 包含在 EAR 中,但我认为这还不够。我试过把它放进去glassfish-4.1/glassfish/domains/domain1/lib/ext/ and glassfish-4.1/glassfish/lib/但是,这并不能解决或更改异常。

问题是RemoteEJBJAR 需要在 glassfish 上可用吗?在这个 EJB 实现这个接口之前,它部署得很好。 (EJB 实现远程接口的原因是 EJB 可用于 Web 模块。)

从 Netbeans 内部部署之前和之后:

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  <ear, web, ejb>  
Command list-applications executed successfully.
thufir@dur:~$ 

来自 Netbeans 的 glassfish 部署日志:

[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<Object>, 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<Object>) 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<Object>) 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<Object>) 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<Object>, 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<Object>) 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.]]

从 Netbeans 部署时,Web 模块按预期运行。如何将 EAR 手动部署到 Glassfish?

从 CLI 部署 EAR:

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:~$ 

手动部署失败的 glassfish 日志:

[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.<init>(InputJarArchive.java:582)
    at com.sun.enterprise.deployment.deploy.shared.InputJarArchive$ArchiveJarEntrySource.<init>(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.<init>(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:~$ 

EJB 实现此远程接口:

包数据库;

导入 javax.ejb.Remote;

@偏僻的 公共接口RemoteQueue {

public int getNext();

}

EJB 中的EnterpriseLegacy-ejb module:

包数据库;

导入javax.ejb.Singleton;

@辛格尔顿 公共类 MySingletonQueue 实现 RemoteQueue {

int i = 3;

@Override
public int getNext() {
    return i;
}

}

的结构EnterpriseLegacy使用 EJB 和 Web 模块:

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

请注意,解压 EAR 时,会包含接口 JAR(理应如此):

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$ 

Netbeans 以某种方式包括RemoteEJB,这是部署中 EJB 的接口。 Netbeans 如何以及在何处将 JAR 部署到 Glassfish?事实上,如果这就是错误的根源。


我现在遇到这个问题,它是由错误的 JDBC 资源名称引起的。当我在 persistence.xml 中修复此问题后,.ear 部署成功。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

glassfish:部署应用程序时出现 IOException:无效的 zip 文件 的相关文章

随机推荐