标签: java-ee-7

嵌套事务和 EJBContext 的 setRollbackOnly()

我正在阅读 Java EE 7 的事务管理,但对嵌套事务的概念和EJBContext#setRollbackOnly().

说我有两个会话bean,Bean1ImplBean2Impl和他们的签名是:

@Stateless 
@TransactionManagement(TransactionManagementType.CONTAINER)
public class Bean1Impl implements Bean1 {

    @Resource 
    private EJBContext context;

    @TransactionAttribute(REQUIRED)
    public void method1() {
        try {
            //some operations such as persist(), merge() or remove().
        }catch(Throwable th){
            context.setRollbackOnly();
        }
    }
}

@Stateless 
@TransactionManagement(TransactionManagementType.CONTAINER)
public class Bean2Impl implements Bean2 {

    @Resource 
    private EJBContext context;

    @TransactionAttribute(REQUIRED)
    public void method2() {
        try {
            //some operations such as persist(), merge() or remove().
            //an exception has been thrown
        }catch(Throwable th){
            context.setRollbackOnly(); …
Run Code Online (Sandbox Code Playgroud)

java jta java-ee-7 ejb-3.2 jakarta-ee

4
推荐指数
2
解决办法
1万
查看次数

NetBeans IDE 在“清理和构建”或外部更改时发出异常编译器错误。IDE 无法识别 JPA 生成的静态元模型

我已经完全厌倦了使用 NetBeans IDE 8.x(目前使用 8.0.1)几个月了 - 它看起来就像地狱(说真的)。当对项目(尤其是 Java EE Web 应用程序 - 包含不同包中的数百个 Java 类)进行一些外部更改或尝试清理并构建项目(尤其是企业模块)时,项目的后台扫描启动,这会在几乎所有类中异常传播编译时错误,其中 EJB模块中使用JPA 生成的静态元模型中的类,如下面的快照所示。

在此输入图像描述

令人惊讶的是,如果在 IDE 中打开这些错误的类,IDE 不再显示编译时错误(由红色卷线表示) - 我不能说出原因,因为我自己也不知道。

有时,如果 IDE 重新启动,它会启动项目后台扫描,这可能会消除这些错误(在大多数情况下不会),如果 IDE 一次又一次重新启动至少 10 次!

这种情况发生的时间和原因是相当不确定的,但有一点是确定的——它的发生是因为JPA 生成的静态元模型。IDE 显然不知道以下划线结尾的类(元模型的类)。这只是浪费时间——构建一个应用程序需要几个小时或几天的时间——我不得不从头开始一个一个地重新创建所有这些类好几次。


在 8.x 版本之前,这种情况不会发生。8.0 和 8.0.1 都有相同的问题(我什至不太确定这是否是一个问题。在使用 NetBeans 8.0 时,我错误地认为以后的版本不会强加此行为)。


为了重现这个问题,

  • 应用程序必须具有 JPA 生成的静态元模型。
  • 应用程序应该(不是必须)使用包含远程 EJB 接口的类库。

在非常小的应用程序中,这可能会发生,也可能不会发生(我自己无法很好地确认这个问题的原因,也不能对此说什么)。


有人在使用 NetBeans IDE(尤其是 8.x)时遇到此类问题吗?这使得使用此 IDE 开发应用程序几乎不可能——这只是一种挫败感?IDE 是否有一些我可能缺少的设置?我可能以错误的方式部署应用程序吗?

我只能说一件事 - IDE 的项目后台扫描执行不正确,或者简直就是地狱。

我部署应用程序的方式(Java EE 包含一些由类库保存的远程 EJB(包括许多本地 EJB …

netbeans jpa java-ee-7 netbeans-8 jakarta-ee

4
推荐指数
1
解决办法
870
查看次数

如何拦截 Java EE 7 兼容容器中 JAX-RS 中的选择性方法和类?

我想拦截任何classmethods注释为@Foo

类级别拦截:

@Foo
@path("/foo")
public class Attack {...}
Run Code Online (Sandbox Code Playgroud)

方法级拦截:

@path("/bar")
public class defend {

@Foo
@GET
public String myMethod(){....}
Run Code Online (Sandbox Code Playgroud)

我想拦截任何带有注释的类或方法,@Foo但不拦截其他方法或类。我想在继续方法执行之前打印出整个路径或 URI。一方法调用完成,我想打印出“执行成功”

这是这样的事情:

 system.out.println(path) // this is the path the request is made. something like /api/2/imp/foo
   method call happens
   method call finishes
   System.out.println("executed successfully")
Run Code Online (Sandbox Code Playgroud)

我的情况有所不同,但这是我遇到的根本问题。我不想具体实施。Java EE 7 规范有一种方法可以使用 @Postconstruct、@AroundInvoke 等来做到这一点。但我真的很难组装它。

这篇文章绝对是解决这个问题的好方法。但它是特定于实现的(RESTeasy)并且AcceptByMethod它使用的已被弃用。

谢谢

java jax-rs interceptor java-ee-7

4
推荐指数
1
解决办法
5345
查看次数

CDI @Transactional REQUIRES_NEW 是否适用于本地方法

CDI @Transactional(Transactional.TxType.REQUIRES_NEW) 在同一个 bean 中调用时是否有效:

@Transactional
public void method1() {
    for(...) {
        method2();
    }
}

@Transactional(Transactional.TxType.REQUIRES_NEW)
public void method2() {
   ...
}
Run Code Online (Sandbox Code Playgroud)

我想它不起作用,因为代理无法拦截本地调用。在这种情况下,如果我想在新事务中管理 method2 的每次调用,推荐的使用模式是什么。显而易见的是创建另一个bean,但这是我不喜欢的。

jta cdi java-ee-7 jakarta-ee

4
推荐指数
1
解决办法
1813
查看次数

如何将事件分发到(Wildfly)集群中的所有节点?

当我的进程中运行时间较长的进程的状态时,我想通知集群中的所有节点JavaEE 7以便每个节点都可以通过 WebSocket 通知其客户端有关该更改的信息。

我正在集群环境中使用 Wildfly 10。

哪种JavaEE 7API/编程模型或 Wildfly 服务是当今实现这一目标的最佳实践?

ejb distributed-computing java-ee-7 wildfly jakarta-ee

4
推荐指数
1
解决办法
884
查看次数

glassfish 4和jersey-media-multipart 2不能与beans.xml一起使用

我正在使用glassfish 4使用最近发布的标准Java 7EE堆栈构建一些restful应用程序.

我的基本restful服务工作正常,但现在我想处理在同一服务中使用multipart mime类型的传入文件上传.

我在https://jersey.java.net/documentation/latest/user-guide.html中找到了一个POC球衣maven示例(multipart-webapp) ,这部署并且工作正常.但是,只要我构建这个框架以包含依赖注入,特别是,一旦我创建了beans.xml文件(甚至是空文件),我就会遇到各种错误:

严重:加载应用程序时出现异常:CDI部署失败:WELD-001408类型为[Providers]的不满意依赖关系,注入点为[@Default] [[BackedAnnotatedParameter] [BackedAnnotatedConstructor]参数1 @Inject public org.glassfish.jersey. media.multipart.internal.MultiPartReaderServerSide(@Context Providers,Provider)]

我尝试在我的beans.xml文件中使用新的bean-discovery-mode属性设置为all或none,但它没有任何区别.这是Glassfish或Jersey中的一个错误,或者它们目前是不兼容的,即使Glassfish包含所有涉及的罐子,还是我做的事情真的很傻?

jersey glassfish-4 java-ee-7

3
推荐指数
1
解决办法
3395
查看次数

安装JDK 1.7和Java EE 7 SDK后会出现混淆?

我刚开始使用Oracle Java EE 7教程.虽然我已经在现有的Apache Tomcat环境中获得了一些实践,但我希望与完整的教程联系,以获得清晰的学习路径和路径.

所以我目前正在使用Mac OS X Mavericks.我已经安装了一个非常流畅的Oracle JDK 1.7.发展也很好,所以没有问题.

现在我来到这个部分是为了下载"Java EE 7 SDK/JDK"(http://docs.oracle.com/javaee/7/tutorial/doc/usingexamples001.htm#GEXAJ)

我已经这样做并运行安装程序.我能看到的是安装一个glassfish4环境(这个教程似乎很好,因为教程涵盖了glassfish,我会在教程中使用它).我还运行了更新工具来获取java-ee-7-tutorial-examples.

无论如何将glassfish服务器添加到我在"Java"选项卡中提到的netbeans 8只有JDK 1.7,它指向我1.7系统上的Java JDK位置.试图找到任何特定的EE 7位置似乎没有什么是正确的位置(find / -name java)

那么除了安装glassfish环境之外,这个装置到底做了什么?使用EE 7 SDK/JDK的用例是什么?也许我有点困惑,但我想让自己明白这些事情以便理解它.

java java-ee java-ee-7

3
推荐指数
1
解决办法
8101
查看次数

批处理是在 JavaEE Batch 中实现 ETL 步骤的正确方法吗?

我正在研究 Javaee Batch API (jsr-352),以测试使用此技术为我们自己的解决方案更改当前 ETL 工具的可行性。

我的目标是建立一份工作,在其中我:

  • 从步骤 1 中的数据源获取一些(虚拟)数据,
  • 来自步骤 2 中其他数据源的一些其他数据和
  • 在 step3 中合并它们。

我想处理每个项目而不是写入文件,而是将其发送到下一步。并且还存储信息以供进一步使用。我可以使用 batchlets 和jobContext.setTransientUserData().

我想我没有理解正确的概念:据我所知,JSR-352 适用于这种 ETL 任务,但它有两种类型的步骤:块和批处理。块是“三阶段步骤”,其中读取、处理和写入数据。Batchlets 是不是对数据上的每个项目都执行的任务,而是一次(如计算总数、发送电子邮件等)。

我的问题是,如果我考虑批次的定义,我的解决方案是不正确的。

如何使用 Javaee Batch API 实现这种 kinf od 作业?

java java-ee-7 java-batch jakarta-ee

3
推荐指数
1
解决办法
1136
查看次数

什么是"Java EE 7 API库"和"Java EE Web 7 API库"以及何时使用它们?

我有一个在GlassFish 4.1/Java EE 7(NetBeans 8.0.2)上运行的完整Java EE项目,不使用Apache Maven.

根据项目功能,必须将CDI依赖项添加到项目/模块(即EE模块和Web模块(以及类库,如果有)).

很长一段时间以来,我一直在混淆人们建议将"Java EE 7 API库"或"Java EE Web 7 API库"添加到编译时类路径中作为CDI依赖项(这些库捆绑在NetBeans和使用NetBeans时可以随时使用.

由于这些库包含一组API,可能是从Servlet API开始的整个Java EE堆栈,因此当CDI功能为CDI时,将其中一个库添加到编译时类路径(特别是在EE项目中)是没有意义的. Java EE应用程序中需要的.

为什么在NetBeans项目中多次建议添加其中一个库,只是cdi-api.jar因为CDI依赖性足够?

在Java EE应用程序中需要CDI功能时,我没有在此站点上找到关于在NetBeans项目中准确添加哪个库的其他地方的规范答案.cdi-api.jar顺便说一句,添加只会很好.

netbeans glassfish java-ee java-ee-7 glassfish-4.1

3
推荐指数
1
解决办法
2085
查看次数

获取java ee 7中rest客户端调用的对象实例列表

java ee 7Glassfish 4.1.1. 编写了一个休息服务C#,它返回一个 Book 实例的集合。其余客户端发送获取请求的代码:

public List<Bandwcorpus> downloadBandWCorpus(String corpus) {
    Client restClient = ClientBuilder.newClient();
    List<Bandwcorpus> ebooks=restClient
        .target("http://bookandwalk.pl/api/admindocumentlist")
        .queryParam("password", "XXXX").queryParam("corpusid", "YYYY")
        .request(MediaType.APPLICATION_JSON)
        .get(new GenericType<List<Book>>() {});
    restClient.close();
    return ebooks;
}
Run Code Online (Sandbox Code Playgroud)

Book 类是一个 POJO:

public class Book {

    private static final long serialVersionUID = 1L;

    private Integer documentid;

    private String corpusid;

    private String corpusoriginalid;

    private float nett;

    private String currencyid;

    private int vat;

    private Discount discount;

    private Upoluj isbn;

    public Bandwcorpus() {

    }
}
Run Code Online (Sandbox Code Playgroud)

我应用的 …

rest java-ee-7

3
推荐指数
1
解决办法
4949
查看次数