1

环境:GlassFish 3.0.1、NetBeans 6.9、JDK 6u21

还使用 GlassFish 3.0.1、NetBeans 6.9.1、JDK 6u22 进行了测试,但结果相同。

问题:无法在企业应用程序(app-client、ejb、war)中运行 app-client。

EJB jar只有 Local接口,不包含 main 方法。

GlassFish 消息

SEVERE: Exception while deploying the app
java.lang.IllegalArgumentException: Sniffers with type [ejb] and type [appclient] should not claim the archive at the same time. Please check the packaging of your archive [C:\Users\myUser\.netbeans\6.9\config\GF3\domain1\applications\fabench-app-client]
    at com.sun.enterprise.v3.server.SnifferManagerImpl.validateSniffers(SnifferManagerImpl.java:221)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.setupContainerInfos(ApplicationLifecycle.java:426)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:262)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:183)
    at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:272)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:305)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:320)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1176)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$900(CommandRunnerImpl.java:83)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1235)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1224)
    at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:365)
    at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:204)
    at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:166)
    at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:100)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:245)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
    at java.lang.Thread.run(Thread.java:619)

NetBeans 运行消息

Building jar: F:\NetBeansProjects\fabench\fabench-app-client\dist\fabench-app-client.jar
dist:
pre-run-deploy:
Distributing F:\NetBeansProjects\fabench\fabench-app-client\dist\fabench-app-client.jar to [GlassFish Server 3]
deploy?path=F:\NetBeansProjects\fabench\fabench-app-client\dist\fabench-app-client.jar&name=fabench-app-client&force=true failed on GlassFish Server 3
F:\NetBeansProjects\fabench\fabench-app-client\nbproject\build-impl.xml:716: The module has not been deployed.
BUILD FAILED (total time: 0 seconds)

应用程序-client.xml

这仅包含<display-name>填充的标签,但<ejb-ref>也可以用<remote>接口指定。没有<local>标签,所以我想app-client只能使用远程接口。这是真的?

这里可能是什么问题?

任何帮助或想法将不胜感激!在此先感谢,带轮

4

2 回答 2

1

不是 Glassfish 专家,但听起来 jar 既被视为 ejb jar 又被视为应用程序客户端 jar。如果是这种情况,则它不是有效的应用程序。我要检查的第一件事是确保您的应用程序客户端 jar没有

  1. 一个 META-INF/ejb-jar.xml
  2. 任何使用@Stateless、@Singleton、@Stateful 或@MessageDriven 注释的类

在另一个问题上,对,应用程序客户端是远程客户端,根据定义,它们不能使用它们的 @Local 接口与 bean 对话。

于 2010-11-09T22:20:24.713 回答
0
  • 应用程序客户端通过远程接口访问 EJB
  • 从 GlassFish v3 开始,远程接口必须打包在 Java 类库中,因此接口是可分发的。
  • 应用程序客户端必须在企业应用程序 EAR 中(但与 EJB 和 WAR 不完全是同一个 EAR)。

http://netbeans.org/kb/docs/javaee/entappclient.html下的教程解释了如何创建一个app-client,但它对我不起作用;还有一个问题:无法运行正在访问 GlassFish v3 上的 EJB 的应用程序客户端

于 2010-11-10T14:03:22.840 回答