Esempio n. 1
0
 @Override
 public void beforeInvocation() {
   boolean readOnly = false;
   Transactional tx = InvocationContext.current().getAnnotation(Transactional.class);
   if (tx != null) {
     readOnly = tx.readOnly();
   }
   startTx(readOnly);
 }
Esempio n. 2
0
  @Override
  public void beforeInvocation() {

    if (InvocationContext.current().getAnnotation(NoTransaction.class) != null) {
      // Called method or class is annotated with @NoTransaction telling us that
      // we should not start a transaction
      return;
    }

    boolean readOnly = false;
    Transactional tx = InvocationContext.current().getAnnotation(Transactional.class);
    if (tx != null) {
      readOnly = tx.readOnly();
    }
    startTx(readOnly);
  }
Esempio n. 3
0
 private static void startTx_() {
   if (isJPAModel_()) {
     JPAPlugin.startTx(false);
   }
 }
Esempio n. 4
0
  @Override
  @NoTransaction
  public void doJob() {
    int moreLinkCount = 0;
    String url = "https://news.ycombinator.com";
    parentPattern = Pattern.compile("<a href=\"item\\?id=\\d+\">parent</a>");
    while (true) {
      try {

        String content = extractContent(url);
        List<String> postList = extractPosts(content);
        List<Item> newItemList = new ArrayList<Item>();
        JPAPlugin.startTx(false);
        for (String post : postList) {
          try {
            Item item = extractItem(post);
            if (item != null) {
              Item existing = Item.getByHnId(item.hnid);
              if (existing != null) {
                existing.update(item);
              }
              if (!JPA.em().getTransaction().isActive()) {
                JPA.em().getTransaction().begin();
              }

              if (existing == null) {
                item.save();
                newItemList.add(item.clone());
              } else {
                existing.save();
                newItemList.add(existing.clone());
              }
              JPA.em().getTransaction().commit();
            }
          } catch (Exception e) {
            Logger.error(e, "Error while saving multiple post: %s", post);
          }
        }
        JPAPlugin.closeTx(false);
        ItemCache.getInstance().updateCache(newItemList);

        url = extractMoreLink(content);
        moreLinkCount++;
        if (moreLinkCount == 6) {
          url = "https://news.ycombinator.com";
        } else if (moreLinkCount == 7) {
          url = "https://news.ycombinator.com/best";
          moreLinkCount = 0;
        }
        StatisticsMgr.instance().updateLastHnUpdateTime();
        Logger.info("Last update : %s", Calendar.getInstance().getTime().toString());

      } catch (Exception e) {
        Logger.error(e, "Exception in forward crawler.");
      } finally {
        try {
          Thread.sleep(((long) (MINUTE * Math.random())) * 10 + 5 * MINUTE);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
    }
  }