扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
清单 6. maven.xml 启动目标
<goal name="start">
<deploy:distribute
uri="deployer:geronimo:jmx:rmi://localhost/jndi/rmi:/JMXConnector"
username="system"
password="manager"
home="${basedir}"
module="target/${pom.artifactId}.ear"
/>
<deploy:start
uri="deployer:geronimo:jmx:rmi://localhost/jndi/rmi:/JMXConnector"
username="system"
password="manager"
id="org/acme/PhoneBook"/>
</goal>
资源目录中子目录列表中的下一个目录是 ejb 目录。openejb-jar.xml 部署描述符在 META-INF 子目录中。该文件对于数据库和实体 (CMP) bean 之间的所有连接是必不可少的。还必须对该文件进行小修改,以确保对于您的企业 bean 存在相应的 Java 命名和目录接口 (Java Naming and Directory Interface, JNDI) 名称。该文件如 清单 7 所示。
清单 7. openejb-jar.xml
<?xml version="1.0"?>
<openejb-jar
xmlns="http://www.openejb.org/xml/ns/openejb-jar"
configId="org/acme/PhonebookEJB"
parentId="MysqlDatabase">
<cmp-connection-factory>
<resource-link>MysqlDataSource</resource-link>
</cmp-connection-factory>
<enterprise-beans>
<entity>
<ejb-name>PhoneBookEntry</ejb-name>
<local-jndi-name>
java:comp/env/ejb/PhoneBookEntryLocal
</local-jndi-name>
<table-name>phone</table-name>
<cmp-field-mapping>
<cmp-field-name>name</cmp-field-name>
<table-column>name</table-column>
</cmp-field-mapping>
<cmp-field-mapping>
<cmp-field-name>phoneNumber</cmp-field-name>
<table-column>phone</table-column>
</cmp-field-mapping>
</entity>
<session>
<ejb-name>PhoneBookSession</ejb-name>
<local-jndi-name>
java:comp/env/ejb/PhoneBookSessionLocal
</local-jndi-name>
</session>
</enterprise-beans>
</openejb-jar>
清单 7 最重要的元素是 <cmp-connection-factory> 及其 <resource-link> 子元素。<resource-link> 元素内的名称必须与 JDBC 连接器配置的名称相匹配,如下列代码段所示:
...
<connectiondefinition-instance>
<name>MysqlDataSource</name>
...
openejb-jar.xml 中的 <local-jndi-name> 元素也是正常工作所必需的。如果收到找不到 JNDI 名称的错误消息,则可能错误设置了其中一个元素。
在 清单 7 中还需注意实体 bean 的
最后一个目录是名为 merge 的 src/resources 目录。该目录的内容与 XDoclet 代码生成的执行方式直接相关。XDoclet 从 Javadoc 标记中提取信息,但它还将信息合并到 merge 目录内专门命名的文件中。这些合并文件包含 Web 应用程序层的一些配置信息。在项目的 src/resources/merge 目录中,taglibs.xml 文件允许定义应用程序中的所有标记库。当 XDoclet 生成 web.xml 和 struts-config.xml 时,有许多文件合并到其中。
另一个部署计划存在于 src/webapp/WEB-INF/geronimo-jetty.xml 文件中,如 清单 8 所示。
清单 8. geronimo-jetty.xml
<?xml version="1.0"?>
<web-app
xmlns="http://geronimo.apache.org/xml/ns/web/jetty"
xmlns:naming="http://geronimo.apache.org/xml/ns/naming"
configId="org/acme/PhoneBookWeb"
>
<context-priority-classloader>true</context-priority-classloader>
</web-app>
清单 8 所示的这个部署计划有一个重要的行。如果不将
应用程序依赖的所有 .jar 组件绑定在 project.xml 依赖关系部分中指定,并由 Maven 自动处理。
最后一个配置文件是 project.properties,它驱动大多数构建处理,位于项目的根目录。该文件是一个仓库,存储 XDoclet 相关信息、有关在 .war 文件中包含哪些内容的信息,甚至还存储控制 Java 编译器输出格式的属性。
将所有这些元素放在一起要花费大量时间,但希望您能够使用该示例应用程序作为您前行的垫脚石。
结束语
本文为更大的应用程序提供了非常基本的起始模板。为业务逻辑添加更多 CMP bean 和会话 bean,可以创建一个更有趣的 Web 应用程序。我已经展示了 Maven 构建系统的主要优点,即降低编译和生成最终 .ear 文件的嵌套文件结构的复杂性。XDoclet 代码生成系统还用于简化生成 EJB 工件、Struts 工件和 Web 应用程序工件的过程,这些工件是编译最终电话簿应用程序所必需的。使用该示例应用程序,您现在应该能够利用 Maven 和 XDoclet 来简化您的企业应用程序开发过程。
Geronimo 开发人员已经按照 Sun J2EE 规范认真构建了服务器本身,并生产出一种将部署和配置问题与细节严格分离的产品,而这是用容器托管应用程序所必需的。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者