2012-08-01 73 views
0

我尝试在glassfish v3上部署多个Web服务。不幸的是,我在8中的6中尝试了一个错误,即该包不包含bean。在glassfish v3上部署多个继承的Web服务时出错

奇怪的是,它会工作,当我尝试几次。

这里我的代码:

类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] Schwerwiegend的豆:异常,同时部署该应用[ConcreteWebService] Schwerwiegend:引用错误:该束具有没有的名称[BaseConcreteWebService]在org.glassfish豆.apf.AnnotationInfo @ 6c7f1f java.lang.IllegalStateException:引用错误:此包在com.sun.enterprise.deployment.archivist.Archivist上没有名为[BaseConcreteWebService]的bean,位于[email protected] 。 readAnnotations(Archivist.java:487) at com.sun.enterprise.deployment.archivist.Archivist.readAnnotations(Archivist.java:429) at com.sun.enterprise.deployment.archivist.Archivist.readRes tDeploymentDescriptors(Archivist.java:405) at com.sun.enterprise.deployment.archivist.Archivist.readDeploymentDescriptors(Archivist.java:380) at com.sun.enterprise.deployment.archivist.Archivist.open(Archivist.java: 243) at com.sun.enterprise.deployment.archivist.Archivist.open(Archivist.java:252) at 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) at org.glassfish.javaee.core。部署.DolProvider.load(DolProvider.java:94) at com.sun.enterprise.v3.server.ApplicationLifecycle.loadDeployer(ApplicationLifecycle.java:827) at com.sun.enterprise.v3.server.ApplicationLifecycle.setupContainerInfos(ApplicationLifecycle.java:769) at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:368) at 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。注入(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.enterprise.v3。 server.AppServerStartup.run(AppServerStartup.java:253) at com.sun.enterprise.v3.server.AppServerStartup.doStart(AppServerStartup.java:145) at 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) 在阳光下。 reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method中.invoke(Method.java:601) at com.sun.enterprise.glassfish.bo otstrap.GlassFishMain.main(GlassFishMain.java:97) 在com.sun.enterprise.glassfish.bootstrap.ASMain.main(ASMain.java:55)

是否有任何人是如何知道这个问题怎么解决呢?

非常感谢。

回答

0

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