• JBoss QuickStart之深入


    • EJB-Asynchronous
      EJB中提供异步调用的方法.

      "A session bean can expose methods with asynchronous client invocation semantics. For asynchronous invocations, control returns to the client before the container dispatches the invocation to a bean instance. An asynchronous method is a business method exposed through one or more of the Remote business, Local business, or no-interface session bean views.
      Asynchronous methods can return a Future<V> object that allows the client to retrieve a result value, check for exceptions, or attempt to cancel an in-progress invocation." -From JSR 318: Enterprise JavaBeansTM,Version 3.1EJB Core Contracts and RequirementsNovember 5, 2009Version 3.1, Final Release

       最简单就是使用注解, @Asynchronous, 方法可以返回一个Future<V>对象,当然也可以不返回任何,即void. 譬如如下代码:

        @Asynchronous
        @Override
        public Future<String> longerRunning(long sleepTime) {
            LOGGER.info("Will wait for " + sleepTime + "ms");
            try {
                Thread.sleep(sleepTime);
            } catch (InterruptedException e) {
            }
            LOGGER.info("returning the result");
            return new AsyncResult<String>("returning at " + new Date() + ", duration was " + sleepTime + "ms");
        }

    如果异步调用抛出异常咋办?如下例子failure()方法(类似上面的longerRunning方法)为一个声明为异步的方法, 但会抛出异常, 异常会在调用x.get()时候抛出ExecutionException, 然后get出来就可以得到原始的异常.

    这个是J2SE的东西, 猜测容器应该使用ExecutorService去调用这些方法,然后封装,返回Future对象.

    与Timer不同,timer采用的是J2SE的util包中的TimerTask去实现的(JBoss),而这个异步调用采用cocurrent包中的ExecutorService以及Future实现.

    private void callAsyncWithFailure() throws InterruptedException {
            Future<String> x = accessBean.failure(); // this method will return successfully, because the invocation will be successful!
    
            try {
                x.get(); // this will not return successfully
            } catch (ExecutionException e) {
                // the IllegalAccessException is thrown by the bean method
                if (e.getCause() instanceof IllegalAccessException) {
                    // This is the expected behavior
                    LOGGER.info("Catch the expected Exception of the asynchronous execution!");
                } else {
                    throw new RuntimeException("Unexpected ExecutionException during asynchronous call!", e);
                }
            }
        }
    • tasks

      这个涉及JPA(Java Persistence API), JPA的前世今生需要搞搞明白,否则不明白与Hibernate之间的关系。

          JPA的背景及现在:

          About JPA and Hibernate found in JBoss_Enterprise_Application_Platform-6-Development_Guide-en-US.pdf:
      The Java Persistence API (JPA) is the standard for using persistence in Java projects. Java EE 6
      applications use the Java Persistence 2.0 specification, documented here:
      http://www.jcp.org/en/jsr/detail?id=317.
      Hibernate EntityManager implements the programming interfaces and life-cycle rules defined by the
      specification.

         --From offical JBoss Developer Guide

         

     TBC ...

  • 相关阅读:
    记录未完成
    java8时间有关新特性
    《java多线程编程核心技术》----simpleDateFormat非线程安全
    基于JavaScript的表格设计:按序添加或删除班级的学生信息
    BOOK
    Android攻城狮Dialog
    Android攻城狮重新认识Toast
    Android攻城狮使用LogCat方式调试程序
    Android攻城狮属性动画赏析
    Android攻城狮布局动画
  • 原文地址:https://www.cnblogs.com/bjfarmer/p/5301792.html
Copyright © 2020-2023  润新知