使用 deploy 命令在 glassfish 上部署 maven 项目

Posted

技术标签:

【中文标题】使用 deploy 命令在 glassfish 上部署 maven 项目【英文标题】:Deploying maven project on glassfish using deploy command 【发布时间】:2018-10-08 15:18:52 【问题描述】:

我有一个带有 maven 的 java ee 应用程序,当我构建项目然后部署在目标文件夹上生成的 ear 时,我尝试注册到该应用程序,所以我必须调用一个区域设置 EJB 会话(ConfigUser),我得到以下信息错误:

javax.naming.NamingException: Lookup failed for 'java:global/myproject-ear/myproject-ejb-1.0/UserFacade!myproject.service.ConfigUser' in SerialContext[myEnv=java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming [Root exception is javax.naming.NameNotFoundException: myproject-ear] at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518) at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455) at javax.naming.InitialContext.lookup(InitialContext.java:411) at javax.naming.InitialContext.lookup(InitialContext.java:411) at org.apache.jsp.index_jsp._jspService(index_jsp.java:79) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111) at javax.servlet.http.HttpServlet.service(HttpServlet.java:770) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411) at  

我尝试使用命令call asadmin --host localhost --user admin deploy --force "C:\myproject\target\myproject-ear-1.0.ear" 进行部署,我也尝试从 glassfish 管理控制台进行部署,但问题仍然存在。

当我从 netbeans 部署时它工作正常,知道项目是在 pom 文件中构造的,如下所示:

  <modules>
    <module>myproject-ear</module>
    <module>myproject-ejb</module>
    <module>myproject-web</module>
  </modules>

这是jsp页面:

Context c = new InitialContext();
ConfigUser configUser = (ConfigUser) c.lookup("java:global/myproject-ear/myproject-ejb-1.0/ConfigUser!myproject.service.ConfigUser");

【问题讨论】:

你的耳朵是怎么练出来的?如果我记得,order is important when build from the project。尝试将&lt;module&gt;myproject-ear&lt;/module&gt; 放在最后,构建项目(这将依次构建ejb > web > ear)并使用您的脚本进行部署怎么样?另一个提示是确保 Netbeans 部署的 EAR 与脚本中使用的 EAR 相同 你检查过this answer + link to blogpost? 【参考方案1】:

由于这个问题没有答案,我正在回答我自己的问题,经过研究,我找到了 javax.naming.NamingException: Lookup failed 问题的原因,我正在寻找的 EJB ConfigUser 没有正确映射到JNDI 名称,所以在部署后我检查了服务器日志,JNDI 名称是:

java:global/myproject-ear-1.0/myproject-ejb-1.0/ConfigUser!myproject.service.ConfigUser

而不是:

java:global/myproject-ear/myproject-ejb-1.0/ConfigUser!myproject.service.ConfigUser

【讨论】:

以上是关于使用 deploy 命令在 glassfish 上部署 maven 项目的主要内容,如果未能解决你的问题,请参考以下文章

“GlassFish Server,deploy,null,false”错误

Ant Deploy War to Glassfish 3 服务器在 GWT 失败

maven deploy -u -o 啥意思、

Jenkins常用插件之Deploy Plugin

选定的目录不是有效的glassfish主页

Glassfish Payara + jenkins自动部署脚本