从应用程序客户端访问EJB(项目配置) [英] Access EJB from Application Client (project configuration)

查看:300
本文介绍了从应用程序客户端访问EJB(项目配置)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道以前已经问过,但是我找不到一个很好的答案



所以我想有一个客户端应用程序调用远程ejbs。 p>

为此,我有2个耳朵应用程序。
一个耳朵与ejb模块,另一个耳朵与应用程序客户端模块。
在客户端模块中,我试图在Main()类中注入具有@EJB注释的EJB。



EJB的application.xml :

 <?xml version =1.0encoding =UTF-8?> 
< application
xmlns:xsi =http://www.w3.org/2001/XMLSchema-instance
xmlns =http://java.sun.com/xml / ns / javaee
xmlns:application =http://java.sun.com /xml/ns/javaee/application_5.xsd
xsi:schemaLocation =http://java.sun .com / xml / ns / javaee http://java.sun.com/xml/ns/javaee/application_5.xsdid =Application_IDversion =5>
< display-name>
MppL4_SERVER< / display-name>
< module>
< ejb> MppL4_SERVEREJB.jar< / ejb>
< / module>
< / application>

应用客户端的application.xml:

 < application 
< display-name>
MppL4_CLIENT
< / display-name>
< module>
< java> MppL4_CLIENTClient.jar< / java>
< / module>
< module>
< ejb> MppL4_SERVEREJB.jar< / ejb>
< / module>
< / application>

如果我在Glassfish服务器上部署两个耳朵,我得到:

  EVERE:异常调用类org.glassfish.ejb.startup.EjbDeployer加载方法
java.lang.RuntimeException:EJB容器初始化错误
在org.glassfish.ejb.startup.EjbApplication.loadContainers(EjbApplication.java:219)
在org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:197)
在org.glassfish .ejb.startup.EjbDeployer.load(EjbDeployer.java:63)
在org.glassfish.internal.data.ModuleInfo.load(ModuleInfo.java:175)
在org.glassfish.internal.data .ApplicationInfo.load(ApplicationInfo.java:216)
在com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:338)
在com.sun.enterprise.v3.server .ApplicationLifecycle.deploy(ApplicationLifecycle.java:183)
在org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:272)
在com.sun.enterprise。 v3.admin.CommandRunnerImpl $ 1.execute(CommandRunnerImpl.java:305)
在com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:320)
在com.sun.enterprise .v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1176)
在com.sun.enterprise.v3.admin.CommandRunnerImpl.access $ 900(CommandRunnerImpl.java:83)
在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)
在com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:204)
在com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:166)
在com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:100)
在com.sun.enterprise.v3.services.impl.ContainerMapper.service(包含3个nerMapper.java:245)
在com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
在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)
在com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
在com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask com.un.grizzly.ContextTask.run(ContextTask.java:69)
$ com $。 b在com.sun.grizzly。 util.AbstractThreadPool $ Worker.doWork(AbstractThreadPool.java:330)
在com.sun.grizzly.util.AbstractThreadPool $ Worker.run(AbstractThreadPool.java:309)
在java.lang.Thread。运行(Thread.java:662)
导致:java.lang.RuntimeException:绑定JNDI名称entities.PersonAPIRemote__3_x_Internal_RemoteBusinessHome__时出错EJB:PersonAPI
在com.sun.ejb.containers.BaseContainer.initializeHome( BaseContainer.java:1530)
在com.sun.ejb.containers.StatelessSessionContainer.initializeHome(StatelessSessionContainer.java:197)
在com.sun.ejb.containers.ContainerFactoryImpl.createContainer(ContainerFactoryImpl.java: 161)
在org.glassfish.ejb.startup.EjbApplication.loadContainers(EjbApplication.java:207)
... 32更多
引起的:javax.naming.NameAlreadyBoundException [根异常是org.omg.CosNaming.NamingContextPackage.AlreadyBound:IDL:omg.org/CosNaming/NamingContext/AlreadyBound:1.0]
在com.sun.jndi.cosnaming.Exc eptionMapper.mapException(ExceptionMapper.java:75)
在com.sun.jndi.cosnaming.CNCtx.callBindOrRebind(CNCtx.java:595)
在com.sun.jndi.cosnaming.CNCtx.bind( CNCtx.java:620)
在com.sun.jndi.cosnaming.CNCtx.bind(CNCtx.java:658)
在javax.naming.InitialContext.bind(InitialContext.java:400)
at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.publishCosNamingObject(GlassfishNamingManagerImpl.java:224)
在com.sun.ejb.containers.BaseContainer $ JndiInfo.publish(BaseContainer.java:5482)
在com.sun.ejb.containers.BaseContainer.initializeHome(BaseContainer.java:1515)
... 35更多
导致:org.omg.CosNaming.NamingContextPackage.AlreadyBound:IDL:omg .org / CosNaming / NamingContext / AlreadyBound:1.0
在org.omg.CosNaming.NamingContextPackage.AlreadyBoundHelper.read(AlreadyBoundHelper.java:60)
在org.omg.CosNaming._NamingContextStub.bind(_NamingContextStub。 java:67)
在com.sun.jndi.cosnaming.CNCtx.ca llBindOrRebind(CNCtx.java:584)
... 41更多

SEVERE:加载应用程序时异常
java.lang.RuntimeException:EJB容器初始化错误
在org.glassfish.ejb.startup.EjbApplication.loadContainers(EjbApplication.java:219)
在org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:197)
在org.glassfish .ejb.startup.EjbDeployer.load(EjbDeployer.java:63)
在org.glassfish.internal.data.ModuleInfo.load(ModuleInfo.java:175)
在org.glassfish.internal.data .ApplicationInfo.load(ApplicationInfo.java:216)
在com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:338)
在com.sun.enterprise.v3.server .ApplicationLifecycle.deploy(ApplicationLifecycle.java:183)
在org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:272)
在com.sun.enterprise.v3.admin.CommandRunnerImpl $ 1.execute(CommandRunnerImpl.java:305)
在com.sun.enterprise.v3。 admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:320)
在com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1176)
在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)
在com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:365)
在com.sun .enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:204)
在com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:166)
在com.sun .enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:100)
在com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:245)
at com .sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java :791)
在com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
在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。 (.com)。执行(HttpProtocolChain.java:76)
在com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
在com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
在com.sun.grizzly.ContextTask.run(ContextTask.java:69)
在com.sun.grizzly.util.AbstractThreadPool $ Worker.doWork(AbstractThreadPool.java:330)
在com.sun.grizzly.util .AbstractThreadPool $ Worker.run(AbstractThreadPool.java:309)
在java.lang.Thread.run(Thread.java:662)
导致:java.lang.RuntimeException:绑定JNDI名称时出错entity.PersonAPIRemote__3_x_Internal_RemoteBusinessHome__为EJB:PersonAPI
在com.sun.ejb.containers.BaseContainer.initializeHome(BaseContainer.java:1530)
在com.sun.ejb.containers.StatelessSessionContainer.initializeHome(StatelessSessionContainer.java :197)
在com.sun.ejb.containers.ContainerFactoryImpl.createContainer(ContainerFactoryImpl.java:161)
在org.glassfish.ejb.startup.EjbApplication.loadContainers(EjbApplication.java:207)
... 32更多
导致:javax.naming.NameAlreadyBoundException [根异常是org.omg.CosNaming.NamingContextPackage.AlreadyBound:IDL:omg.org/CosNaming/NamingContext/AlreadyBound:1.0]
在com.sun.jndi.cosnaming.ExceptionMapper.mapException(ExceptionMapper.java:75)
在com.sun.jndi.cosnaming.CNCtx.callBin dOrRebind(CNCtx.java:595)
在com.sun.jndi.cosnaming.CNCtx.bind(CNCtx.java:620)
在com.sun.jndi.cosnaming.CNCtx.bind(CNCtx。 java:658)
在javax.naming.InitialContext.bind(InitialContext.java:400)
在com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.publishCosNamingObject(GlassfishNamingManagerImpl.java:224)
at com.sun.ejb.containers.BaseContainer $ JndiInfo.publish(BaseContainer.java:5482)
在com.sun.ejb.containers.BaseContainer.initializeHome(BaseContainer.java:1515)
... 35更多
导致:org.omg.CosNaming.NamingContextPackage.AlreadyBound:IDL:omg.org/CosNaming/NamingContext/AlreadyBound:1.0
在org.omg.CosNaming.NamingContextPackage.AlreadyBoundHelper。 read(AlreadyBoundHelper.java:60)
在org.omg.CosNaming._NamingContextStub.bind(_NamingContextStub.java:67)
在com.sun.jndi.cosnaming.CNCtx.callBindOrRebind(CNCtx.java: 584)
... 41更多

警告:清理mo时异常dule'org.glassfish.internal.data.EngineRef@1e493eb'java.lang.NullPointerException
java.lang.NullPointerException
在org.glassfish.appclient.server.core.AppClientDeployer.clean(AppClientDeployer.java :265)
在org.glassfish.internal.data.EngineInfo.clean(EngineInfo.java:114)
在org.glassfish.internal.data.EngineRef.clean(EngineRef.java:171)
at com.sun.enterprise.v3.server.ApplicationLifecycle $ 1.actOn(ApplicationLifecycle.java:224)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:342)
在com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:183)
在org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:272)
at com.sun.enterprise.v3.admin.CommandRunnerImpl $ 1.execute(CommandRunnerImpl.java:305)
在com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:320)
在com.sun.enterprise.v3.admin.C ommandRunnerImpl.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)
在com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:204)
在com.sun.grizzly .tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:166)
在com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:100)
在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)
在com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
在com.sun.grizzly。 DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
在com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
在com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java: 88)
在com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
在com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
(com.un.grizzly.SelectionKeyContextTask.call .AbstractThreadPool $ Worker.doWork(AbstractThreadPool.java:330)
在com.sun.grizzly.util.AbstractThreadPool $ Worker.run(AbstractThreadPool.java:309)
在java.lang.Thread.run (Thread.jav a:662)

我的应用客户端主类:

  public class Main {

@EJB
private static PersonAPIRemote personApi;

public static void main(String [] args){
System.out.println(client started ...);

// Person p = new Person(3,lololol,456);
personApi.service();

System.out.println(client ended ...);
}

/ *(非Java-doc)
* @see java.lang.Object#Object()
* /
public Main (){
super();
}

我正在使用GlassFish工具包,将Eclipse作为IDE。

解决方案

所以我做的是:


  1. p>使用JNDI

     上下文ctx = new InitialContext(); 
    personService =(PersonApiRemote)ctx.lookup(api.PersonApiRemote);


  2. 将所有Glassfish jar(这是很多!)添加到应用程序客户端的构建路径。



I know this has been asked before, but i can't find a good answer

So I want to have an client application that calls remote ejbs.

For this i have 2 ear applications. One ear with the ejb module, and another ear with the application client module. In the client module i am trying to inject in the Main() class the EJB with @EJB annotation.

application.xml for the EJB:

<?xml version="1.0" encoding="UTF-8"?>
<application 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:application="http://java.sun.com    /xml/ns/javaee/application_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns    /javaee/application_5.xsd" id="Application_ID" version="5">
  <display-name> 
      MppL4_SERVER</display-name>
      <module>
         <ejb>MppL4_SERVEREJB.jar</ejb>
      </module>
 </application>

application.xml for the app-client:

<application 
  <display-name> 
      MppL4_CLIENT
  </display-name>
  <module>
     <java>MppL4_CLIENTClient.jar</java>
  </module>
  <module>
     <ejb>MppL4_SERVEREJB.jar</ejb>
  </module>
</application>

If i deploy both ears on the Glassfish server i get:

EVERE: Exception while invoking class org.glassfish.ejb.startup.EjbDeployer load method
java.lang.RuntimeException: EJB Container initialization error
    at org.glassfish.ejb.startup.EjbApplication.loadContainers(EjbApplication.java:219)
    at org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:197)
    at org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:63)
    at org.glassfish.internal.data.ModuleInfo.load(ModuleInfo.java:175)
    at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:216)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:338)
    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:662)
Caused by: java.lang.RuntimeException: Error while binding JNDI name entities.PersonAPIRemote__3_x_Internal_RemoteBusinessHome__ for EJB : PersonAPI
    at com.sun.ejb.containers.BaseContainer.initializeHome(BaseContainer.java:1530)
    at com.sun.ejb.containers.StatelessSessionContainer.initializeHome(StatelessSessionContainer.java:197)
    at com.sun.ejb.containers.ContainerFactoryImpl.createContainer(ContainerFactoryImpl.java:161)
    at org.glassfish.ejb.startup.EjbApplication.loadContainers(EjbApplication.java:207)
    ... 32 more
Caused by: javax.naming.NameAlreadyBoundException [Root exception is org.omg.CosNaming.NamingContextPackage.AlreadyBound: IDL:omg.org/CosNaming/NamingContext/AlreadyBound:1.0]
    at com.sun.jndi.cosnaming.ExceptionMapper.mapException(ExceptionMapper.java:75)
    at com.sun.jndi.cosnaming.CNCtx.callBindOrRebind(CNCtx.java:595)
    at com.sun.jndi.cosnaming.CNCtx.bind(CNCtx.java:620)
    at com.sun.jndi.cosnaming.CNCtx.bind(CNCtx.java:658)
    at javax.naming.InitialContext.bind(InitialContext.java:400)
    at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.publishCosNamingObject(GlassfishNamingManagerImpl.java:224)
    at com.sun.ejb.containers.BaseContainer$JndiInfo.publish(BaseContainer.java:5482)
    at com.sun.ejb.containers.BaseContainer.initializeHome(BaseContainer.java:1515)
    ... 35 more
Caused by: org.omg.CosNaming.NamingContextPackage.AlreadyBound: IDL:omg.org/CosNaming/NamingContext/AlreadyBound:1.0
    at org.omg.CosNaming.NamingContextPackage.AlreadyBoundHelper.read(AlreadyBoundHelper.java:60)
    at org.omg.CosNaming._NamingContextStub.bind(_NamingContextStub.java:67)
    at com.sun.jndi.cosnaming.CNCtx.callBindOrRebind(CNCtx.java:584)
    ... 41 more

SEVERE: Exception while loading the app
java.lang.RuntimeException: EJB Container initialization error
    at org.glassfish.ejb.startup.EjbApplication.loadContainers(EjbApplication.java:219)
    at org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:197)
    at org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:63)
    at org.glassfish.internal.data.ModuleInfo.load(ModuleInfo.java:175)
    at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:216)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:338)
    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:662)
Caused by: java.lang.RuntimeException: Error while binding JNDI name entities.PersonAPIRemote__3_x_Internal_RemoteBusinessHome__ for EJB : PersonAPI
    at com.sun.ejb.containers.BaseContainer.initializeHome(BaseContainer.java:1530)
    at com.sun.ejb.containers.StatelessSessionContainer.initializeHome(StatelessSessionContainer.java:197)
    at com.sun.ejb.containers.ContainerFactoryImpl.createContainer(ContainerFactoryImpl.java:161)
    at org.glassfish.ejb.startup.EjbApplication.loadContainers(EjbApplication.java:207)
    ... 32 more
Caused by: javax.naming.NameAlreadyBoundException [Root exception is org.omg.CosNaming.NamingContextPackage.AlreadyBound: IDL:omg.org/CosNaming/NamingContext/AlreadyBound:1.0]
    at com.sun.jndi.cosnaming.ExceptionMapper.mapException(ExceptionMapper.java:75)
    at com.sun.jndi.cosnaming.CNCtx.callBindOrRebind(CNCtx.java:595)
    at com.sun.jndi.cosnaming.CNCtx.bind(CNCtx.java:620)
    at com.sun.jndi.cosnaming.CNCtx.bind(CNCtx.java:658)
    at javax.naming.InitialContext.bind(InitialContext.java:400)
    at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.publishCosNamingObject(GlassfishNamingManagerImpl.java:224)
    at com.sun.ejb.containers.BaseContainer$JndiInfo.publish(BaseContainer.java:5482)
    at com.sun.ejb.containers.BaseContainer.initializeHome(BaseContainer.java:1515)
    ... 35 more
Caused by: org.omg.CosNaming.NamingContextPackage.AlreadyBound: IDL:omg.org/CosNaming/NamingContext/AlreadyBound:1.0
    at org.omg.CosNaming.NamingContextPackage.AlreadyBoundHelper.read(AlreadyBoundHelper.java:60)
    at org.omg.CosNaming._NamingContextStub.bind(_NamingContextStub.java:67)
    at com.sun.jndi.cosnaming.CNCtx.callBindOrRebind(CNCtx.java:584)
    ... 41 more

WARNING: Exception while cleaning module 'org.glassfish.internal.data.EngineRef@1e493eb'java.lang.NullPointerException
java.lang.NullPointerException
    at org.glassfish.appclient.server.core.AppClientDeployer.clean(AppClientDeployer.java:265)
    at org.glassfish.internal.data.EngineInfo.clean(EngineInfo.java:114)
    at org.glassfish.internal.data.EngineRef.clean(EngineRef.java:171)
    at com.sun.enterprise.v3.server.ApplicationLifecycle$1.actOn(ApplicationLifecycle.java:224)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:342)
    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:662)

My app-client main class:

public class Main {

    @EJB
    private static PersonAPIRemote personApi;

    public static void main(String[] args) {
        System.out.println("client started...");

        //Person p = new Person(3, "lololol", 456);
        personApi.service();

        System.out.println("client ended...");
    }

    /* (non-Java-doc)
     * @see java.lang.Object#Object()
     */
    public Main() {
        super();
    }

I am using GlassFish Tools Bundle For Eclipse as an IDE.

解决方案

So what i done is:

  1. Use JNDI

    Context ctx = new InitialContext();
    personService = (PersonApiRemote) ctx.lookup("api.PersonApiRemote");
    

  2. Add all Glassfish jars (which are a lot!) to the Application Client's build path.

这篇关于从应用程序客户端访问EJB(项目配置)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆