我将Tomcat 7和CDI一起使用,为此,我使用了Knappsack Maven Archetypes中的jee6-servlet-minimal-archetype 作为起点.
现在我想使用Arquillian来测试CDI bean,但即使在搜索了很长时间之后,我也只发现了一些与该主题相关的问题.
有人能指出我pom.xml在Tomcat 7上使用Arquillian进行CDI测试的工作设置(特别是使用权)吗?
编辑2012/09/11: 正如下面的评论所指出的,我认为要解决我的问题,我需要有人帮助我理解整个设置,而不是试图在某个时候解决特定的异常.
那么,pom.xml和测试类是如何看待的,因为在tomcat 7中有一个CDI bean并且能够在嵌入式和托管容器中使用所有注入机制来测试它?(顺便说一下,为什么没有tomcat 7的远程容器适配器,因为它已经用于6?)
我已经尝试调整tomcat 6示例,但无法使其在tomcat 7上运行.
也许,我遗漏了一些基本的东西 - 但是我不能在自定义验证器类中使用注入来使用消息资源?下面的代码给我一个null msg,所以注入显然不起作用,但为什么呢?如果不可能,我该如何访问消息资源?到目前为止我找到的所有示例都在验证器消息中使用硬编码文本,这对本地化不是很有用.
public class BirthdateValidator implements Validator {
@Inject
private transient ResourceBundle msg;
@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
if ( [some validation fails] ) {
FacesMessage message = new FacesMessage(msg.getString("validator.birthday"));
message.setSeverity(FacesMessage.SEVERITY_ERROR);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我们开发了基于Seam 2的Java EE 5应用程序,该应用程序可在Weblogic 11g上运行。
现在,我尝试按照与以前的WLS相同的步骤,将相同的WAR文件部署到新的Weblogic 12c(在本地Windows 7计算机上为12.1.1.0),包括部署所需的JSF 1.2库。
应用程序的部署和启动工作正常,但是当我在浏览器中打开URL时,出现500错误,并且日志文件显示以下异常:
java.lang.UnsupportedOperationException
at javax.faces.application.Application.getResourceHandler(Application.java:287)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:588)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:242)
...
Run Code Online (Sandbox Code Playgroud)
类Application中有问题的操作属于JSF的2.0版本,由于我声明要使用JSF 1.2,所以我不明白为什么容器会尝试调用它。
有什么想法会导致问题,以及如何将现有的Java EE 5应用程序简单地迁移到WLS 12?
编辑1/2/12:由于没有答案,也许有一点赏金会有所帮助吗?;-)不好意思,有什么我可以提供的细节来帮助我吗?
编辑1/5/12:与cj91请求有关-该项目不是基于Maven的,因此没有POM。但是这是部署描述符weblogic.xml:
<?xml version='1.0' encoding='UTF-8'?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd">
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
<library-ref>
<library-name>jsf</library-name>
<specification-version>1.2</specification-version>
<implementation-version>1.2</implementation-version>
<exact-match>false</exact-match>
</library-ref>
</weblogic-web-app>
Run Code Online (Sandbox Code Playgroud)
这是蚂蚁建造的罐子清单:
commons-digester.jar
jboss-seam-debug.jar
jboss-seam-excel.jar
jboss-seam-ioc.jar
jboss-seam-mail.jar
jboss-seam-pdf.jar
jboss-seam-rss.jar
jboss-seam-ui.jar
jsf-facelets.jar
jxl.jar
richfaces-impl.jar
richfaces-ui.jar
standard.jar
jstl.jar
jsf-api.jar
commons-collections-3.2.1.jar
commons-lang.jar
jboss-seam.jar
persistence-api.jar
jta.jar
jsf-impl.jar
darkX.jar
glassX.jar
laguana.jar
antlr-runtime.jar
commons-beanutils.jar
core.jar
drools-templates.jar
drools-decisiontables.jar
drools-compiler.jar
drools-api.jar
drools-core.jar
janino.jar …Run Code Online (Sandbox Code Playgroud) 我们开发了一个 JEE5 Web 应用程序 (WAR) 并在 WebLogic 11g (10.3.5) 下在生产环境中运行它。
现在,应该将同一个应用程序部署为同一 WebLogic 上不同客户(不同 URL、不同数据)的单独应用程序。
我通过在部署后为每个人设置不同的上下文根来管理第一部分。
但是我还没有让它们使用不同的数据源——而且由于我想避免客户特定的构建,persistence.xml 对于所有应用程序都是相同的,因此也是持久性单元名称。
这种情况的最佳设置是什么?我是否被迫进行单独的构建并通过不同的 WAR 或我必须将托管服务器或域与服务器分开,还是有更好的方法来解决它?
我们有几个迁移脚本,它们可以在不同版本之间改变模式.
有时会发生迁移步骤(例如,向表中添加列)已经手动或通过修补程序安装完成,因此迁移脚本失败.
如何防止脚本因错误而停止(理想情况下是在特定的预期错误处),而是记录消息并继续脚本?
我们使用PostgresQL 9.1,PostgresQL的解决方案以及一般的SQL解决方案都可以.
我们有一个巨大的应用程序,它始于十年前,并且仍在积极开发中.所以有些部分仍然在J2EE 1.4体系结构中,其他部分则使用Java EE 5/6.
在测试一些新代码时,我意识到通过新旧代码部分进入的信息之间存在数据不一致,旧代码直接使用Hibernate会话而新代码注入了EntityManager.这导致了一个问题,即一部分无法从另一部分看到新数据,因此也创建了数据库记录,导致主键约束违规.
计划完全迁移旧代码以摆脱J2EE,但与此同时 - 我可以做些什么来协调这两个部分之间的数据库访问?并且不应该在应用服务器中的某个时刻在Hibernate层中两种方式结合在一起,无论是通过JPA还是直接访问?
我们在WildFly 8上有一个JSF应用程序,它通过WEB-INF\classes在WAR文件夹中包含德语和英语的消息包以及faces-config.xml将名称映射到它并列出语言环境的配置,使用传统的文本国际化机制.应用程序没有数据库连接,但使用REST服务与第二个应用程序通信.
现在我们需要能够更轻松地更改文本,这意味着不必在更改文本时构建新的WAR文件并进行部署.所以我需要一种机制来将消息包放在WAR之外,同时能够像以前一样在XHTML页面中使用它.
两个可选的要求是更改文本并刷新应用程序中的消息,而不必重新启动应用程序(优先级2),并在WAR中使用默认包,该包将被外部包覆盖(优先级3).
我的想法是使用像Apache commons配置之类的东西来读取Application scoped bean中的属性文件,并在之前使用的EL名称下公开getter.但不知何故,感觉必须重新实现一个现有的机制,这应该更容易,甚至可能只使用Java EE核心.
是否有人以这种方式使用这种机制并且可以指出我对细节的一些示例/描述或者有更好的想法来实现列出的要求?
有没有办法从命令行执行 Maven 构建,但禁用配置的插件而不更改 pom 文件?
原因是,我们有许多给定的 Maven 项目,这些项目是我们与客户一起开发的。在这些项目中配置了 rpm 插件,该插件不在我们的 Windows 环境中运行。因此,我需要一种方法来控制构建,使其忽略此构建步骤,而无需更改 pom 文件(例如使用配置文件,如果我能够更改它,我将使用它)。不幸的是,该插件没有跳过属性。我唯一的另一个想法是伪造插件中调用的 rpm 命令,但这不起作用。
即使在Java工作大约15年,人们总是会遇到处理日期和时间的问题......
情况就是这样:我从一些外部系统获取时间戳作为String表示.时间戳的语义是它代表UTC日期.此时间戳必须放在一个实体中,然后放入一个TIMESTAMP字段中的PostgreSQL数据库中.另外,我需要将相同的时间戳作为本地时间(在我的情况下为CEST)放入实体,然后放入TIMESTAMP WITH TIME ZONE字段中的数据库中.
确保无论执行代码的机器设置是什么的正确方法是什么,时间戳都正确地存储在实体中(与其他UTC时间戳进行一些验证)和数据库中(以便稍后在报告中使用它们)上)?
这是代码,在我的本地机器上工作正常:
SimpleDateFormat sdfUTC = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
sdfUTC.setTimeZone(TimeZone.getTimeZone("UTC"));
Date utcTimestamp = sdfUTC.parse(utcTimestampString);
// getMachinesTimezone is some internal util method giving the TimeZone object of the machines Location
Calendar localTimestamp = new GregorianCalendar(getMachinesTimezone());
localTimestamp.setTimeInMillis(utcTimestamp.getTime());
Run Code Online (Sandbox Code Playgroud)
但是当在服务器上执行相同的代码时,会导致不同的时间,所以我认为这不是处理它的正确方法.有什么建议?
PS:我在这个论坛上搜索了Joda Time,但是在给定的项目中我不能引入新的库,因为我只改变现有的模块,所以我必须使用标准的JDK1.6
我需要提供一个java REST客户端,它应该包含一个包中所有必需的jar.我选择RestEasy作为REST框架,因为服务器应用程序是在JBoss上完成的.
到目前为止,我发现的几乎所有示例都使用应用程序容器环境,其中提供了这些lib,因此在编译期间只需要Java EE API或使用Maven构建,因此依赖项会自动解决,这可能是一个好主意,当前的标准方法,但由于项目相关的原因,我需要在lib文件夹中的jar,并能够在构建期间包含一个可执行jar.
所以我的问题是,哪个罐子有必要建立一个可以做类似的简单客户端:
ResteasyClient client = new ResteasyClientBuilder().build();
ResteasyWebTarget target = client.target(myURL).queryParam("param",
"value");
Builder builder = target.request(MediaType.APPLICATION_JSON).header("user", "abc");
Invocation invocation = builder.buildGet();
MyResponseObject response = invocation.invoke(MyResponseObject .class);
Run Code Online (Sandbox Code Playgroud)