- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在探索构建一个绑定(bind)到 TomEE 服务器的网络应用程序,即它作为 TomEE 中的唯一(附加)应用程序运行或嵌入了 TomEE。 webapp 应该支持 servlet 和 JSP(基本上我们想在这里使用 Struts2)。
我尝试了几个选项,但都有几个问题:
选项 1:使用 Maven-Shade-Plugin 捆绑我们的应用程序和 tomee-embedded,如下所述:http://www.tomitribe.com/blog/2015/03/50-shades-of-tomee/
问题:
1) 通过 --as-war
选项部署捆绑应用程序仅适用于 7.x 版本,但 7.x 尚未准备好生产,我找不到任何计划发布日期
2) 部署 JAXRS 网络服务工作正常但 servlet 没有,例如web.xml 未被提取,存在类加载问题等。
选项 2:使用 TomEE-Maven-Plugin 构建一个包含 tomee 以及我们的网络应用程序的 zip。
问题:
1) 这仅适用于插件版本 7.x(尚未准备好生产),但这不应影响生成的构建(基于 TomEE 1.7.2)
2) 存在库冲突,因为 TomEE 可能会加载应用程序也提供的一些库(在不同版本中)。
由于应用程序与服务器绑定(bind),反之亦然,将所有库放入 TomEE 的 lib 文件夹应该没问题,该文件夹通过将 Maven 插件指向依赖项下载到的文件夹来工作。这可行,但没有解决冲突,即库只是复制到目标文件夹。
我现在可以手动配置插件以删除每个冲突的 Artifact ,但随着应用程序和潜在冲突库数量的增加,这会变得非常麻烦。
选项 3:与选项 2 类似,但不使用 TomEE-Maven-Plugin。
我想应该可以使用预打包的 TomEE 和一些 Maven 插件来构建可分发的 zip,从而解决第 1 号问题。 1 但问题没有。 2 - 这是更大的 - 仍然存在:手动处理所有依赖项会很麻烦。
所以最后,问题是:我应该如何构建该应用程序?
我更喜欢选项 1,但我还找不到任何关于如何使它起作用的文档/示例/教程。
选项 2 和 3 也可以,但我需要一些方法让 Maven 解决依赖冲突,而不需要我检查每个依赖,尤其是传递依赖。
最佳答案
此 MySQL 数据库应用程序类似于您描述的使用 Maven 处理依赖项并在启动时加载嵌入的 tomee 的应用程序。
public class Main {
public static void main(String[] args) {
String currentDir = null;
try {
currentDir = new File(".").getCanonicalPath();
LOG.info("Current application directory: " + currentDir);
} catch (IOException e) {
e.printStackTrace();
}
String war = currentDir + "\\target\\app.war";
String tomeeConf = currentDir + "\\src\\main\\tomee\\conf\\tomee.xml";
// ARGUMENTS
String[] setup = { "--path", war, "--tomeexml", tomeeConf };
try {
// PROGRAM:
org.apache.tomee.embedded.Main.main(setup);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Tomee 嵌入式文档有点稀疏,因为这仍是一项正在开发的技术,而且很难找到有用的工作示例。配置具有挑战性,如果我不感谢 Mark Struberg 在启动和运行我自己的程序方面提供的帮助,那就太失职了。
嵌入 Tomee 需要一个位于以下位置的配置文件:src/main/tomee/tomee.xml:
<?xml version="1.0" encoding="UTF-8"?>
<tomee>
<!-- Connection details specified in src/main/resource/persistence.xml -->
<Resource id="APP-DATA" type="javax.sql.DataSource">
IgnoreDefaultValues true
JdbcDriver com.mysql.jdbc.Driver
JdbcUrl jdbc:mysql://localhost:3306/scc-data
UserName admin
Password pass
JtaManaged true
</Resource>
</tomee>
Tomee 提供这些关键默认值:
然而,没有任何参数,apache-tomee 目录被设置为"tomee-embedded_"+ System.currentTimeMillis() + "-home"] 在每次运行时,应用程序名称和路径都设置为 null,在 localhost:8080 处产生 404 错误。为了保持一致性,将目录设置为一个位置。
此外,Tomee 默认使用 OpenJPA 作为 JPA 提供程序。当我开始开发时,Tomee 7.0.2 使用 OpenJPA 2.4.1,它有一个有问题的未解决错误 [OPENJPA-2635 3/20/16] 提示切换到 Hibernate。 (这个错误很可能已在 7.0.3 版中得到修复。)Tomee 的加载过程显然在读取 persistence.xml 或 tomee.conf 之前将 OpenJPA 实现为提供者。为防止过早加载 OpenJPA,请添加到 persistence.xml:
http://stackoverflow.com/questions/40818396/
Hibernate 也应该添加到 apache-tomee 库中,在我的例子中是 hibernate-core.jar,位于 F:\theapp\apache-tomee\lib,其范围设置为在 pom 中提供。
http://stackoverflow.com/questions/10852035/how-to-use-tomee-with-hibernate
请注意,Tomee 7.0.3 实现了 Tomcat 8.5.11 和 JavaEE 7 并利用: Java Servlet 3.1、JSF 2.2 (myfaces 2.2.11)、JSTL 1.2、JSP 2.3、
EL 3.0 和 JPA 2.1。
父pom:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>rfpeake</groupId>
<artifactId>theapp-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>theapp</name>
<description>Database project</description>
<modules>
<module>../theapp-app</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<tomee.version>7.0.3</tomee.version>
<tomee.classifier>webprofile</tomee.classifier>
<mysql-connector-version>5.1.40</mysql-connector-version>
<hibernate.version>5.2.9.Final</hibernate.version>
<primefaces.version>6.1</primefaces.version>
</properties>
<dependencies>
<!-- TOMEE EMBEDDED -->
<dependency>
<groupId>org.apache.tomee</groupId>
<artifactId>tomee-embedded</artifactId>
<version>${tomee.version}</version>
</dependency>
<!-- Declaration for JSF 2.2 with Tomee 7 -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<!-- JPA spec [required] -->
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-jpa_2.0_spec</artifactId>
<version>1.1</version>
<scope>provided</scope>
</dependency>
<!-- Hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
<scope>provided</scope>
</dependency>
<!-- Hibernate EHCache -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- Primefaces -->
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>${primefaces.version}</version>
<!-- JUnit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
应用-应用 pom:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>rfpeake</groupId>
<artifactId>theapp-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../theapp-parent/pom.xml</relativePath>
</parent>
<artifactId>theapp-app</artifactId>
<packaging>war</packaging>
<name>Database Application</name>
<build>
<finalName>theapp</finalName>
<!-- pluginManagement tag required in Eclipse to avoid error:
Plugin execution not covered by lifecycle configuration. -->
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.tomee.maven</groupId>
<artifactId>tomee-embedded-maven-plugin</artifactId>
<version>${tomee.version}</version>
<configuration>
<tomeeVersion>${tomee.version}</tomeeVersion>
<tomeeClassifier>
${tomee.classifier}</tomeeClassifier>
<synchronization>
<extensions>
<!-- To update each time app built
with mvn compile -->
<extension>.class</extension>
<extension>.properties</extension>
<extension>.css</extension>
</extensions>
<updateInterval>2</updateInterval>
</synchronization>
<!-- For some reason, must to be false
or reloading does not work! -->
<reloadOnUpdate>false</reloadOnUpdate>
<warFile>
${project.build.directory}/${project.build.finalName}
</warFile>
<!-- path tused by tomEE in the tomee:deploy and
tomee:undeploy goals -->
<path>
${project.build.directory}/apache- tomee/webapps${project.build.finalName}
</path>
<args>
-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server
-Xms128m -Xmx4096m -XX:PermSize=196m -XX:MaxPermSize=128m
-XX:+DisableExplicitGC</args>
<libs>
<lib>
mysql:mysql-connector-java:${mysql-connector-version}
</lib>
</libs>
</configuration>
<dependencies>
<dependency>
<groupId>org.apache.tomee</groupId>
<artifactId>apache-tomee</artifactId>
<version>${tomee.version}</version>
<classifier>${tomee.classifier}</classifier>
<type>zip</type>
<!-- set this to runtime for it to work -->
<scope>runtime</scope>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
这可能无法回答您所有的配置问题或为您的项目提供理想的框架,但它应该可以帮助您入门。
关于java - TomEE 嵌入/与单个应用程序捆绑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34160080/
序言:重新训练人工智能大型模型是一项复杂且高成本的任务,尤其对于当前的LLM(大型语言模型)来说,全球99.99%的企业难以承担。这是因为模型训练需要巨大的资源投入、复杂的技术流程以及大量的人力支
上一篇:《人工智能是这样理解“情绪”的》 序言:这段话要优化吗?““嵌入”是一种将句子、单词或其他语言单位转换为向量表示的技术。这个向量通常位于高维空间中,它以一种能够表达相似性的方式编码出文本
我正在开发一个小型 Web 应用程序,其中有一个 object 元素(包含一个 embed),用于显示小型文档。 文档可以是 PDF 或纯文本文件 (.txt),我以 base64 字符串的形式从 W
我有一种小型语言,它基本上是 OCaml 的扩展(实际上它是 OCaml 子集的扩展,但这并不重要)。为了简化事情,我有一个“转义”表达式,可以将 OCaml 文字传输到我的语言中(因此您可以将任意
据我所知,我知道 embed tag用于嵌入来自 youtube 等网站的视频,object tag用于 Flash 视频和 video tags下HTML5 .但我很好奇这些标签的深入细节以及作为开
我假设您可以将 WebKit 嵌入到另一个桌面应用程序中并向其发送一个字符串,例如: Hello world! 它将显示在窗口内。 我的问题是,如果我将其压缩表示(JPEG 转储)加载到内存中,我该如
有没有一种可能的方式,我可以从youtube检索我的最新视频的列表(带有缩略图),使用cron作业将嵌入的代码存储在数据库中,这样我就可以在单独的页面上显示视频,而不是将用户引向youtube观看视频
最近我发现我的网站上嵌入的 YouTube 视频存在问题 - 全屏按钮不再起作用。确实有过一次。该按钮是可见的,但单击时没有任何反应。 我正在使用 Youtube Javascript API 将视频
在 Keras 内置函数中嵌入使用哪种算法?Word2vec?手套?其他? https://keras.io/layers/embeddings/ 最佳答案 简短的回答是都不是。本质上,GloVe 的
在 LSTM 上用于建模 IMDB 序列数据 ( https://github.com/fchollet/keras/blob/master/examples/imdb_lstm.py ) 的 ker
在机器学习中,通常用 one-hot-encoding 表示分类(特别是:名义)特征。 .我正在尝试学习如何使用 tensorflow 的嵌入层来表示分类问题中的分类特征。我有 tensorflow
我有一个使用 Storyboard的应用程序,我想在我的主视图中有一个 View ,并让它在场景中的不同 View 之间切换。 所以目前我有“容器对象”,我可以在其中嵌入另一个 viewControl
在我的项目中我遇到了这样的情况。 function fonsubmit() { alert('Out side PHP'); //Here the php code starts
我正在尝试添加一个JFileChooser,它选择父目录并允许用户输入文件名称。我知道 showSaveDialog 和 showOpenDialog 方法,但我不想创建新窗口。 这是我到目前为止所拥
我注意到我的网站创建了这样的链接:www.domain.com/post-name/embed/ 恐怕这可能会影响 SEO。是否可以禁用此功能? 最佳答案 显然这是默认的 WordPress 行为。此
我试图从 C 代码调用 python 函数,我遵循了 here 中的示例 我也有正确的包含文件目录、库目录和链接 python32.lib(我使用 python 32)但是错误是 python/C A
我正在使用基于云的 EDR 平台来监控客户端受损网络上发生的进程。我最近经常看到的是使用选项“-Embedding”调用的 msiexec.exe C:\Windows\System32\MsiExe
我有一个列表,其中包含数百万个需要嵌入的句子。我正在使用 Flair以此目的。这个问题似乎应该是并行的。但是,当我尝试优化时,我的性能要么没有提高,要么只是停滞不前。 我将我的句子定义为一个简单的字符
我想在我的应用程序中添加嵌入的 YouTube 视频:我该怎么做?我有这个 import 'package:youtube_player/youtube_player.dart'; import 'p
我有 json 看起来像: myjson = {"queries":{"F.SP": 27}} 所以与 queryResults = JObject.Parse(jsonString) 我可以 fir
我是一名优秀的程序员,十分优秀!