0

我尝试在 glassfish v3 上部署几个 Web 服务。不幸的是,我在 8 次尝试中有 6 次尝试了一个错误,即捆绑包不包含 bean。

奇怪的是,当我尝试几次时它会起作用。

这是我的代码:

类 BaseWebServcie:

import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.ejb.Stateless;
import javax.jws.WebService; 
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

@WebService
@Stateless
public class BaseWebService {

@PersistenceContext
EntityManager em; 

public long getResponse() {

            //using EntityManager
            ...
    return new Date().getTime();
}
}

类:WebServiceProxy1

import javax.ejb.Stateless;
import javax.jws.WebService;

@WebService
@Stateless 
public class ConcreteWebService1 extends BaseConcreteWebService {
}

我的项目包含其他几个 Web 服务。都从类 BaseWebService 继承一个 getResponse() 方法。但是,如果我尝试在 glassfish 上部署它,则会出现以下错误消息。

Schwerwiegend:引用错误:此捆绑包没有名称为 [BaseConcreteWebService] 的 bean Schwerwiegend:部署应用程序时出现异常 [ConcreteWebService] Schwerwiegend:引用错误:此捆绑包在 org.glassfish.apf.AnnotationInfo@6c7f1f 处没有名称为 [BaseConcreteWebService] 的 bean java.lang.IllegalStateException:引用错误:此包在 com.sun.enterprise.deployment.archivist.Archivist.readAnnotations(Archivist.java:487) 的 org.glassfish.apf.AnnotationInfo@6c7f1f 中没有名称为 [BaseConcreteWebService] 的 bean在 com.sun.enterprise.deployment.archivist.Archivist.readAnnotations(Archivist.java:429) 在 com.sun.enterprise.deployment.archivist.Archivist.readRestDeploymentDescriptors(Archivist.java:405) 在 com.sun.enterprise.deployment .archivist.Archivist.readDeploymentDescriptors(Archivist.java:380) 在 com.sun。Enterprise.deployment.archivist.Archivist.open(Archivist.java:243) 在 com.sun.enterprise.deployment.archivist.Archivist.open(Archivist.java:252) 在 com.sun.enterprise.deployment.archivist.Archivist。 open(Archivist.java:213) at com.sun.enterprise.deployment.archivist.ApplicationFactory.openArchive(ApplicationFactory.java:165) at org.glassfish.javaee.core.deployment.DolProvider.load(DolProvider.java:185)在 org.glassfish.javaee.core.deployment.DolProvider.load(DolProvider.java:94) 在 com.sun.enterprise.v3.server.ApplicationLifecycle.loadDeployer(ApplicationLifecycle.java:827) 在 com.sun.enterprise.v3 .server.ApplicationLifecycle.setupContainerInfos(ApplicationLifecycle.java:769) 在 com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:368) 在 com.sun.enterprise.v3.server。ApplicationLoaderService.processApplication(ApplicationLoaderService.java:375) at com.sun.enterprise.v3.server.ApplicationLoaderService.postConstruct(ApplicationLoaderService.java:219) at com.sun.hk2.component.AbstractCreatorImpl.inject(AbstractCreatorImpl.java:131)在 com.sun.hk2.component.ConstructorCreator.initialize(ConstructorCreator.java:91) 在 com.sun.hk2.component.AbstractCreatorImpl.get(AbstractCreatorImpl.java:82) 在 com.sun.hk2.component.SingletonInhabitant.get (SingletonInhabitant.java:67) 在 com.sun.hk2.component.EventPublishingInhabitant.get(EventPublishingInhabitant.java:139) 在 com.sun.hk2.component.AbstractInhabitantImpl.get(AbstractInhabitantImpl.java:78) 在 com.sun。 com.sun.enterprise.v3.server.AppServerStartup 上的 enterprise.v3.server.AppServerStartup.run(AppServerStartup.java:253)。doStart(AppServerStartup.java:145) 在 com.sun.enterprise.v3.server.AppServerStartup.start(AppServerStartup.java:136) 在 com.sun.enterprise.glassfish.bootstrap.GlassFishImpl.start(GlassFishImpl.java:79)在 com.sun.enterprise.glassfish.bootstrap.GlassFishDecorator.start(GlassFishDecorator.java:63) 在 com.sun.enterprise.glassfish.bootstrap.osgi.OSGiGlassFishImpl.start(OSGiGlassFishImpl.java:69) 在 com.sun.enterprise .glassfish.bootstrap.GlassFishMain$Launcher.launch(GlassFishMain.java:117) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl .invoke(DelegatingMethodAccessorImpl.java:43) 在 com.sun.enterprise.glassfish.bootstrap 的 java.lang.reflect.Method.invoke(Method.java:601)。GlassFishMain.main(GlassFishMain.java:97) 在 com.sun.enterprise.glassfish.bootstrap.ASMain.main(ASMain.java:55)

有没有人知道如何解决这个问题?

非常感谢。

4

1 回答 1

0

EJB 的部署顺序不是确定的,因为它基于循环 Java HashSet。因此,当加载子 EJB 时,GF 会尝试查找父 EJB,但如果尚未加载父 EJB,您将遇到“引用错误:”。我们的解决方法是使用 EJB 组合而不是继承。我们在 GF 3.1.1 中遇到了同样的问题。希望这个问题在新版本的 GF 中得到解决。

于 2013-05-03T17:11:17.537 回答