在glassfish v3上部署几个继承的web服务时出错



我尝试在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]的beanSchwerwiegend:部署应用程序[CconcreteWebService]时出现异常Schwerwiegend:引用错误:此捆绑包在上没有名称为[BaseConcreteWebService]的beanorg.glassfish.apf.AnnotationInfo@6c7f1fjava.lang.IollegalStateException:引用错误:此捆绑包在上没有名称为[BaseConcreteWebService]的beanorg.glassfish.apf.AnnotationInfo@6c7f1f网址:com.sun.enterprise.deployment.archivest.Archivest.readAnnotations(Archivest.java:487)网址:com.sun.enterprise.deployment.archivest.Archivest.readAnnotations(Archivest.java:429)网址:com.sun.enterprise.deployment.archivest.Archivest.readRestDeploymentDescriptors(Archivest.java:405)网址:com.sun.enterprise.deployment.archivest.Archivest.readDeploymentDescriptors(Archivest.java:380)网址:com.sun.enterprise.deployment.archivest.Archivest.open(Archivest.java:243)网址:com.sun.enterprise.deployment.archivest.Archivest.open(Archivest.java:252)网址:com.sun.enterprise.deployment.archivest.Archivest.open(Archivest.java:213)网址:com.sun.enterprise.deployment.archivest.ApplicationFactory.openArchive(ApplicationFactory.java:165)网址: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.setupContainerInfo(ApplicationLifecycle.java:769)网址:com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:368)网址:com.sun.enterprise.v3.server.ApplicationLoaderService.processApplication(ApplicationLoaderService.java:375)网址:com.sun.enterprise.v3.server.ApplicationLoaderService.postConstruct(ApplicationLoaderService.java:219)网址:com.sun.hk2.comcomponent.AbstractCreatorImpl.inject(AbstractCreatorImpl.java:131)网址:com.sun.hk2.component.ConstructorCreator.initialize(ConstructorCreator.java:91)网址:com.sun.hk2.comcomponent.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.enterprise.v3.server.AppServerStartup.run(AppServerStartup.java:253)网址:com.sun.enterprise.v3.server.AppServerStartup.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.bbootstrap.osgi.OSGiGlassFishImpl.start(OSGiGlassFishImpl.java:69)网址:com.sun.enterprise.glassfish.bootstrap.GlassFishMain$Launcher.launch(GlassFishMain.java:117)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)位于java.lang.reflect.Method.ioke(Method.java:601)网址:com.sun.enterprise.glassfish.bootstrap.GlassFishMain.main(GlassFishMain.java:97)网址:com.sun.enterprise.glassfish.bootstrap.ASMain.main(ASMain.java:55)

有谁知道如何解决这个问题吗?

非常感谢。

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

最新更新