本帖最后由 mydot 于 2011-04-06 15:03:38 编辑

解决方案 »

  1.   

    把异常贴全看一下,你在51CTO上也发了帖子,但是为什么不贴代码呢?
      

  2.   

    我的认识是,Local对象在包内可见,在同一个EJB包中,在同一个War包中,在同一个Ear包中。
    下面是我从EJB3.1规范中找到的一段话,请供参考:20.4.3Visibility of the Local Client View
    The local client view(including the no-interface view) of an enterprise bean component defined within a .war file is only required to be accessible to components within the same .war file. 不知道楼主用的是什么服务器,上面打成ear包,而不做修改的话,按照规范,我觉得也不会成功。Applications needing access to the local client view of an enterprise bean from a different module in the same application
    should use an ejb-jar file to define the enterprise bean that exposes the local client view.
      

  3.   

    你在 Servlet 中直接用 @EJB 的话,需要在 web.xml 中配置 ejb-local-ref 节点。
      

  4.   


    部署在weblogic上也是打成ear包可以正常访问,但是解开了,先部署ejb不会出错,部署web应用就会出错了weblogic11g报错信息跟这个不太一样:
    ####<2011-4-6 下午04时24分07秒 CST> <Error> <Deployer> <eclipse> <AdminServer> <[STANDBY] ExecuteThread: '4' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1302078247121> <BEA-149265> <Failure occurred in the execution of deployment request with ID '1302078246536' for task '0'. Error is: 'weblogic.application.ModuleException: Could not setup environment'
    weblogic.application.ModuleException: Could not setup environment
    at weblogic.servlet.internal.WebAppModule.activateContexts(WebAppModule.java:1495)
    at weblogic.servlet.internal.WebAppModule.activate(WebAppModule.java:438)
    at weblogic.application.internal.flow.ModuleStateDriver$2.next(ModuleStateDriver.java:375)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
    at weblogic.application.internal.flow.ModuleStateDriver.activate(ModuleStateDriver.java:95)
    at weblogic.application.internal.flow.ScopedModuleDriver.activate(ScopedModuleDriver.java:194)
    at weblogic.application.internal.flow.ModuleListenerInvoker.activate(ModuleListenerInvoker.java:227)
    at weblogic.application.internal.flow.DeploymentCallbackFlow$2.next(DeploymentCallbackFlow.java:541)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
    at weblogic.application.internal.flow.DeploymentCallbackFlow.activate(DeploymentCallbackFlow.java:175)
    at weblogic.application.internal.flow.DeploymentCallbackFlow.activate(DeploymentCallbackFlow.java:167)
    at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:636)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
    at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:205)
    at weblogic.application.internal.SingleModuleDeployment.activate(SingleModuleDeployment.java:43)
    at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:161)
    at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:79)
    at weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate(AbstractOperation.java:569)
    at weblogic.deploy.internal.targetserver.operations.ActivateOperation.activateDeployment(ActivateOperation.java:150)
    at weblogic.deploy.internal.targetserver.operations.ActivateOperation.doCommit(ActivateOperation.java:116)
    at weblogic.deploy.internal.targetserver.operations.AbstractOperation.commit(AbstractOperation.java:323)
    at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit(DeploymentManager.java:844)
    at weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList(DeploymentManager.java:1253)
    at weblogic.deploy.internal.targetserver.DeploymentManager.handleCommit(DeploymentManager.java:440)
    at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.commit(DeploymentServiceDispatcher.java:163)
    at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:195)
    at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$100(DeploymentReceiverCallbackDeliverer.java:13)
    at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$2.run(DeploymentReceiverCallbackDeliverer.java:68)
    at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:207)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:176)
    Caused By: weblogic.deployment.EnvironmentException: [J2EE:160200]Error resolving ejb-ref 'com.servlet.action.t/mm' from module 'z.war' of application '_appsdir_z_war'. The ejb-ref does not have an ejb-link and the JNDI name of the target bean has not been specified. Attempts to automatically link the ejb-ref to its target bean failed because no EJBs in the application were found to implement the 'com.test.myLocal' interface. Please link or map this ejb-ref to its target EJB and ensure the interfaces declared in the ejb-ref are correct.
    at weblogic.deployment.BaseEnvironmentBuilder.autowireEJBRef(BaseEnvironmentBuilder.java:427)
    at weblogic.deployment.EnvironmentBuilder.addEJBReferences(EnvironmentBuilder.java:513)
    at weblogic.servlet.internal.CompEnv.activate(CompEnv.java:157)
    at weblogic.servlet.internal.WebAppServletContext.activate(WebAppServletContext.java:3144)
    at weblogic.servlet.internal.WebAppModule.activateContexts(WebAppModule.java:1493)
    at weblogic.servlet.internal.WebAppModule.activate(WebAppModule.java:438)
    at weblogic.application.internal.flow.ModuleStateDriver$2.next(ModuleStateDriver.java:375)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
    at weblogic.application.internal.flow.ModuleStateDriver.activate(ModuleStateDriver.java:95)
    at weblogic.application.internal.flow.ScopedModuleDriver.activate(ScopedModuleDriver.java:194)
    at weblogic.application.internal.flow.ModuleListenerInvoker.activate(ModuleListenerInvoker.java:227)
    at weblogic.application.internal.flow.DeploymentCallbackFlow$2.next(DeploymentCallbackFlow.java:541)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
    at weblogic.application.internal.flow.DeploymentCallbackFlow.activate(DeploymentCallbackFlow.java:175)
    at weblogic.application.internal.flow.DeploymentCallbackFlow.activate(DeploymentCallbackFlow.java:167)
    at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:636)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
    at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:205)
    at weblogic.application.internal.SingleModuleDeployment.activate(SingleModuleDeployment.java:43)
    at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:161)
    at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:79)
    at weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate(AbstractOperation.java:569)
    at weblogic.deploy.internal.targetserver.operations.ActivateOperation.activateDeployment(ActivateOperation.java:150)
    at weblogic.deploy.internal.targetserver.operations.ActivateOperation.doCommit(ActivateOperation.java:116)
    at weblogic.deploy.internal.targetserver.operations.AbstractOperation.commit(AbstractOperation.java:323)
    at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit(DeploymentManager.java:844)
    at weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList(DeploymentManager.java:1253)
    at weblogic.deploy.internal.targetserver.DeploymentManager.handleCommit(DeploymentManager.java:440)
    at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.commit(DeploymentServiceDispatcher.java:163)
    at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:195)
    at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$100(DeploymentReceiverCallbackDeliverer.java:13)
    at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$2.run(DeploymentReceiverCallbackDeliverer.java:68)
    at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:207)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:176)
      

  5.   


    那就是说最少也要修改跟那个服务器相关的比如说 "服务器名字-ejb.xml"这种配置文件么?
      

  6.   

    在web.xml中就可以解决了吧,像7楼说所
      

  7.   

    很奇怪我在服务器里面已经看到JNDI名了为什么还要用这种方式调用呢?而且还要请教下这个ejb-local-ref最简单的话应该写什么呢(根据刚才那个简单例子) <ejb-local-ref>
    <ejb-ref-name>MyLocal</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    </ejb-local-ref>
      

  8.   


    不知道这个JNDI名是什么,能不能贴出来
      

  9.   

    已经解决了 需要将ejb放入lib/ext目录下才可以``````
      

  10.   


    web容器不能直接调用ejb容器的 本地bean,因为类加载器的加载顺序不同,需要将本地Bean的接口放在lib/ext下大家共用,这样的话才可以调用到!!!!