天道酬勤,学无止境

Need sample code explaning Workmanager in Tomcat

I want to know how to use WorkManager in Tomcat 7. I came across the open source library Foo-CommonJ but nowhere i found a sample code explaning the usage. The input parameter for FooWorkManager's constructor is an instance of commonj.work.work class, where as no one provides the commonj.work.work class (neither tomcat nor foo-commonj). Basically i need a sample code explaining usage of WorkManager (FooCommonj jar) in tomcat. And if Foo-Commonj doesn't support workmanager properly, then some alternative.

评论

JSR-237 has been withdrawn, but it has been merged with JSR-236. http://jcp.org/en/jsr/detail?id=237 Reason: JSR 237 has been merged with JSR 236, providing a single, consistent specification for Java EE concurrency.

Old school way

Copy to tomcat\lib folder following jars:

  • commonj-xxx.jar
  • tomcat-commonj-xxx.jar

In context.xml of your app or tomcat create a new WorkManager instance:

<Resource name="wm/myWorkManager" type="commonj.work.WorkManager" auth="Container"
      factory="de.myfoo.commonj.work.FooWorkManagerFactory"
      maxThreads="10"
      minThreads="5" />

Fetch this instance using JNDI. For example using web.xml:

<resource-ref>
  <description>Work manager example</description>
  <res-ref-name>wm/myWorkManager"</res-ref-name>
  <res-type>commonj.work.WorkManager</res-type>
  <res-auth>Container</res-auth>
  <res-sharing-scope>Unshareable</res-sharing-scope>
</resource-ref>

Any other way should work.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何从 Java EE 中启动多个线程?(How do you launch multiple threads from within Java EE?)
    问题 我需要将调用扩展到 Tomcat,并且有人建议在内部启动线程。 是否有人需要这样做,如果需要,他们提出了哪些解决方案? 回答1 通常不鼓励在应用程序服务器内创建自己的线程,因为服务器应该管理线程以获得更好的可伸缩性。 如果容器对线程上下文中的可用内容做出假设,例如安全信息(例如,经过身份验证的主题),您也可能会遇到问题。 如果您生成一个线程,然后使用该线程中容器未知的服务器资源,通常会发生这种情况。 检查是否有办法从 Tomcat 获取容器管理的线程。 WebLogic 和 WebSphere 支持 commonj.WorkManager,它允许您在容器管理的线程上安排工作。 Spring 也可以使用 commonj,但我不确定 Tomcat 是否提供该支持。 回答2 除非您有非常特殊的需要,否则您不应该真正从您的 web 应用程序中启动线程。 如果没有关于您的问题的更多详细信息,很难判断这是否是解决您问题的正确方法。 您可能想看看 Quartz,它“是一个功能齐全的开源作业调度系统,可以与几乎任何 J2EE 或 J2SE 应用程序集成或与任何 J2EE 或 J2SE 应用程序一起使用”。 回答3 你的问题有点含糊。 Tomcat 本身已经使用线程池来为 HTTP 请求提供服务。 您可以通过 Tomcat 配置增加线程数 - 请查看 Tomcat wiki
  • 在Tomcat中从Servlet产生线程的推荐方法是什么(What is recommended way for spawning threads from a servlet in Tomcat)
    问题 大概重复一遍! 我正在使用Tomcat作为服务器,并且想知道什么是在servlet中产生确定性结果的最佳方式。 我正在从servlet操作中运行一些长期运行的更新,并希望请求完成并在后台进行更新。 我认为我可以生成一个可以在后台运行并在自己的时间内完成的线程,而不是添加像RabbitMQ这样的消息传递中间件。 我在其他SO线程中读到,服务器终止了服务器派生的线程,以使其很好地管理资源。 使用Tomcat时,是否有建议的方法来生成线程,后台作业。 我还将Spring MVC用于该应用程序。 回答1 在像Tomcat或Jetty这样的准系统servlet容器中,最安全的选择是使用最大线程数的applicaton宽线程池,以便在必要时将任务排队。 ExecutorService在此方面非常有帮助。 在应用程序启动或servlet初始化后,使用Executors类创建一个: executor = Executors.newFixedThreadPool(10); // Max 10 threads. 然后在Servlet的服务期间(对于您不感兴趣的情况,您可以忽略结果,或者将其存储在会话中以供以后访问): Future<ReturnType> result = executor.submit(new YourTask(yourData))
  • Jboss Java EE容器和ExecutorService(Jboss Java EE container and an ExecutorService)
    问题 我有一个独立的Java应用程序,该应用程序使用ExecutorService并行处理许多作业 ExecutorService es = Executors.newFixedThreadPool(10); 现在,我想在EJB bean中重用相同的解决方案,但是不确定如何正确初始化ThreadPool,因为我通常会离开Java EE容器来控制所有线程资源。 我可以只使用相同的代码还是获得Jboss托管线程池的替代正确方法? 回答1 在EJB中执行此操作的正确方法是使用ManagedExecutorService,它是Concurrency Utils API(Java EE7)的一部分。 您不应该使用企业代码中java.util.concurrent一部分的任何ExecutorService。 通过使用ManagedExecutorService,新线程将由容器创建和管理。 以下示例取自我的网站。 要使用ManagedExecutorService创建新线程,请首先创建一个实现Callable的任务对象。 在call()方法内,我们将在单独的线程中定义要执行的工作。 public class ReportTask implements Callable<Report> { Logger logger = Logger.getLogger(getClass()
  • Android使用 WorkManager 调度任务
    文章目录 一、前言二、WorkManager入门指南2.1 添加依赖2.2 创建后台任务2.3 配置运行任务的方式和时间2.4 将任务提交给系统 三、WorkManager 进阶3.1 设定任务请求3.1.1 任务约束3.1.2 初始延迟3.1.3 重试和退避政策3.1.4 定义任务的输入/输出3.1.5 标记任务 3.2 任务的状态及任务状态跟踪3.2.1 任务的状态3.2.2 任务状态跟踪 3.3 跟踪工作任务的中间状态3.3.1 更新进度3.3.2 跟踪任务进度 3.4 将多个工作任务链接在一起3.4.1 创建工作任务链3.4.2 输入数据合并3.4.3 工作任务链的状态 3.5 取消和停止工作任务3.5.1 取消工作任务3.5.2 停止正在运行的工作器 3.6 重复性工作3.7 唯一工作任务3.7.1 创建唯一工作任务3.7.2 唯一工作链 3.8 异步工作任务 四、WorkManager 高级概念4.1 WorkManager配置和初始化4.1.1 WorkManager 2.1.0 及更高版本移除默认初始化程序实现 Configuration.Provider 4.1.2 WorkManager 2.0.1 及更早版本默认初始化自定义初始化 4.2 在 WorkManager 中进行线程处理4.2.1 在工作器中进行线程处理4.2.2 在 CoroutineWorker
  • TransactionAttribute annotation (@REQUIRES_NEW) ignored
    I have a problem with two separate transactions that are flushed to the database in a reverse order to that in which they're actually executed. Here's the business case: there's a RemoteJob-RemoteJobEvent one-to-many relation. Every time a new event is created, a timestamp is obtained and set in the lastModified field of both RemoteJob and RemoteJobEvent, and two records are persisted (one update + one insert). Here's what it looks like in the code: class Main { @TransactionAttribute(TransactionAttributeType.REQUIRED) public void mainMethod(...) { RemoteJob job = remoteJobDAO.findById(...); //
  • Android Jetpack组件(八)WorkManager
    Android Jetpack组件系列文章: Android Jetpack组件(一)LifeCycle Android Jetpack组件(二)Navigation Android Jetpack组件(三)ViewModel Android Jetpack组件(四)LiveData Android Jetpack组件(五)Room Android JetPack组件(六)DataBinding Android Jetpack组件(七)Paging Android Jetpack组件(八)WorkManager 首语 Android应用中大部分都需要执行后台任务,因此也提供了多种解决方案,如JobScheduler、Loader等。但不合理的使用这些API,会造成消耗大量电量。JetPack中的WorkManager为应用程序执行后台任务提供了 一个统一的解决方案。 WorkManager可以自动维护后台任务的执行时机,执行顺序,执行状态。 特点 兼容范围广 WorkManager最低能兼容API Level 14,并且不需要你的设备安装Google Play Services。因此,不必担心兼容性的问题。 WorkManager能根据设备的情况,选择不同的执行方案。在API Level23以上的设备中,通过JobScheduler完成任务;在API Level23以下的设备中
  • Android-即使应用程序未运行,每15分钟运行一次后台任务(Android - Running a background task every 15 minutes, even when application is not running)
    问题 我需要构建一个每10/15分钟运行一次的后台任务(这没什么关系,也没关系),即使应用程序未运行也是如此。 我该怎么做? 我似乎无法解决这个问题。 我读到我可以使用某种runnable()功能或使用后台服务或AlarmManager。 我当时在考虑后台服务,因为它必须在应用程序本身未运行时完成。 有什么更好的方法可以做到这一点,我该怎么做? 回答1 您已经确定执行代码段的时间(间隔),最好使用AlarmManager,因为它能效更高。 如果您的应用程序需要监听某种事件,则需要Service。 public static void registerAlarm(Context context) { Intent i = new Intent(context, YOURBROADCASTRECIEVER.class); PendingIntent sender = PendingIntent.getBroadcast(context,REQUEST_CODE, i, 0); // We want the alarm to go off 3 seconds from now. long firstTime = SystemClock.elapsedRealtime(); firstTime += 3 * 1000;//start 3 seconds after first
  • 非托管线程Spring Quartz Websphere Hibernate(Unmanaged Threads Spring Quartz Websphere Hibernate)
    问题 看来我们使用Quartz-JDBCJobStore以及Spring,Hibernate和Websphere的实现抛出了非托管线程。 我读了一些书,发现IBM的一篇技术文章指出将Quartz与Spring一起使用会导致这种情况。 他们提出使用CommnonJ解决此问题的建议。 我进行了一些进一步的研究,到目前为止,我所看到的唯一示例都处理了不在数据库中的旧JobStore计划。 因此,我想知道是否有人有解决此问题的示例。 谢谢 回答1 我们有一个可行的解决方案(实际上有两个)。 1)更改石英源代码,以将WorkManager守护程序线程用于主调度程序线程。 它可以工作,但需要更换夸脱。 不过我们没有使用它,因为我们不想维护被黑的石英版本。 (这使我想起了,我打算将其提交给项目,但完全忘记了) 2)创建一个WorkManagerThreadPool用作石英线程池。 实现石英ThreadPool的接口,以便在石英内触发的每个任务都包装在commonj Work对象中,然后将在WorkManager中安排该对象。 关键是必须在启动调度程序之前从Java EE线程(例如Servlet初始化)初始化WorkManagerThreadPool中的WorkManager。 然后,WorkManagerThreadPool必须创建一个守护程序线程
  • How does WorkManager schedule GET requests to REST API?
    I've had a look at the codelab for WorkManager plus some examples on here, but everything in code I have seen is either related to doing work locally on the device or work uploading to the server, not downloading data and responding to the data received. In the developer guidelines it even says, "For example, an app might need to download new resources from the network from time to time," so I thought it would be perfect for this task. My question is if WorkManager can handle the following scenario and if not, what is the proper tool for handling it: Schedule a job that runs once a day in
  • Worker manager: not start work in enqueue
    I have such code, I need to implement the task queue, if the task is in the queue, then you do not need to add it. I implemented as shown in when, everything works, but sometimes the state of the worker remains ENQUEUED, and new tasks are not added to the queue. That is, when there is no Internet, I add a task, when the Internet appears, tasks begin to run out, but for some reason, sometimes it doesn’t happen, I can’t understand why the task does not start despite the fact that the Internet is there and the task is in the queue. How can you determine why the task will not start? Does anyone
  • Android WorkManager doesn't trigger one of the two scheduled workers
    I have two periodic workers scheduled in my app where one worker repeats after 24 hours and another in 15 minutes. Initially on fresh install things work as expected, but after some days I got an issue on 2 devices(out of 5). The 24 hour worker is triggered properly but the 15 minute one isn't triggered at all. I have been monitoring this for 24 hours now. I viewed the databse of workmanager via Stetho and saw some entries for 24-hour worker and 0 entries for 15 minute worker. I'm looking in the WorkSpec table. I debugged via Android studio and after querying WorkManager using
  • Firestore offline persistence error when using workmanager
    I'm using a WorkManger to retrieve information periodically from my Firestore database when the app is in the background and foreground. This information is used to update the UI based on a status (so different statuses adds or removes different parts of the UI). On first run this works well, however, once the app is in the background and the WorkManager tries to run, it crashes with this error: Caused by: java.lang.RuntimeException: Failed to gain exclusive lock to the Firestore client's offline persistence. This generally means you are using Firestore from multiple processes in your app
  • Android WorkManager api for running daily task in Background
    I need to call one API daily in the background even if the app is closed. I have seen about WorkManager API. For my scenario, I tried PeriodicWorkRequest but unfortunately, it's not working as my expected result. What I did is I used this code in the Application class PeriodicWorkRequest.Builder myWorkBuilder = new PeriodicWorkRequest.Builder(MyWorker.class, 24, TimeUnit.HOURS); PeriodicWorkRequest myWork = myWorkBuilder.build(); WorkManager.getInstance().enqueue(myWork); But it's running repeatedly for 11 times when the app is open for the first time after that, it's not running after 24 hrs
  • Android O-旧的启动前台服务仍在工作吗?(Android O - Old start foreground service still working?)
    问题 因此,对于Android O,如果您希望每小时收到的位置更新不止几个,则需要将服务作为前台服务运行。 我注意到启动前台服务的旧方法似乎可以在O上运行。 startForeground(NOTIFICATION_ID, getNotification()); 根据此处的行为更改指南:https://developer.android.com/preview/behavior-changes.html NotificationManager.startServiceInForeground()方法启动前台服务。 启动前台服务的旧方法不再起作用。 尽管新方法仅在面向O时才有效,但无论是否面向O,老方法似乎仍然可以在O设备上运行。 编辑包括示例: Google示例项目LocationUpdatesForegroundService实际上有一个有效的示例,您可以在其中直接看到问题。 https://github.com/googlesamples/android-play-location/tree/master/LocationUpdatesForegroundService 无论是针对API级别25进行定向和编译,还是针对O进行定向和编译,startForeground方法似乎都可以正常工作(指向此处:https://developer.android.com/preview
  • Eclipse导入一个JAVA web项目详解(附web项目源码)
    点此阅读更佳,附带已调试好的项目源码免费下载 目录 前言工具一、导入项目中的sql文件1.打开workbench2.选择sql文件3.导入sql文件4.导入完成 二、导入整个项目1.打开Eclipse,选择导入项目2.选择常规,导入项目到工作空间3.找到文件路径后点确定,再点Finish完成导入 三、配置tomcat1.配置jre2.为项目配置tomcat 四、修改连接数据库代码五、运行项目 前言 对于初学者来说,导入一个Java web项目经常会遇到各种各样的问题,以下为导入一个Java web项目(网上找的图书馆管理系统)的全过程,以供参考 如果在这过程中遇到什么问题,参考以下连接 Java web 常见问题汇总 工具 Eclipse(已配置好tomcat)Mysql server 5.5Mysql workbench 一、导入项目中的sql文件 一个现成的Java web项目一般会附带一个sql文件,如图 1.打开workbench 如上方图示,进行数据库的连接需要输入账号密码, 导入的项目中连接数据库的代码,需要修改为在上图中我们我们输入的账号和密码 2.选择sql文件 3.导入sql文件 4.导入完成 二、导入整个项目 以下是用Eclipse导入Java web项目的过程 1.打开Eclipse,选择导入项目 2.选择常规,导入项目到工作空间 3.找到文件路径后点确定
  • 如何使用WorkManager安排通知?(How to schedule notifications using WorkManager?)
    问题 我想在用户每次在数据库中添加注释达特定时间时安排通知。 尽管有多种方法可以使用AlarmManager,BroadcastReceiver等来实现。如何使用WorkManager来实现呢? 回答1 WorkManager不适合需要在特定时间进行的工作。 您应该使用AlarmManager ,特别是AlarmManagerCompat.setExactAndAllowWhileIdle()来在特定时间获取回调。 回答2 您可以在workmanager的帮助下显示通知。 Workmanger可用于安排单次发生任务或定期发生的任务,以及我们可以在特定时间安排任务。 OneTimeWorkRequest request= new OneTimeWorkRequest.Builder(CustomWorkerClass.class) .setInitialDelay(delayedTime, TimeUnit.MILLISECONDS) .addTag("TAG") .build(); 'delayedTime'->计算触发通知的时间 有关更多实施细节,请单击此处。 要了解有关Workmanager的更多信息,请单击此处。 回答3 根据有关工人管理器的Android官方文档:“这些API可让您创建任务并将其交给WorkManager以便立即或在适当的时间运行”。 在我的应用中
  • workmanager listener called immediately
    I need to have a callback upon Work completion from WorkManager (android.arch.work:work-runtime-ktx:1.0.0-alpha11). Yet the listener I'm adding is called immediately after work is scheduled. Here's what I do: val work = OneTimeWorkRequestBuilder<UploadWorker>() .setConstraints(constraints) .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 1, TimeUnit.MINUTES) .setInputData(inputData) .build() workManager.beginUniqueWork(INSURANCE_UPLOAD_WORKER, ExistingWorkPolicy.REPLACE, work) .enqueue().result.toWorkResult() The UploadWorker class returns Success only after completing the whole upload sequence
  • Android-MVP模式详解,附超全教程文档
    开头 此文希望能给想跳槽和面试朋友一些参考。 金九银十已过,面试的狂热季也已结束,小编也正是选择了在金九十银跳槽,之前在腾讯做了五年Android开发工作,之后感觉公司不一定能继续提供给我想要的发展空间与前景。说白了,有家室,我需要更高的薪酬让他们过上更好的生活。正好赶上金九银十,一口气投了八分简历,面试历程结束后成功连收了:字节,阿里,小米等多个offer。今天给大家分享的正是一些面试常见问题和部分面经分享。 JetPack里的组件 上图就是JetPack中包含的组件列表,每个组件都是相对独立的,可以被单独使用和构建。其中像被介绍的最多,也是最常被使用的LiveData, ViewModel, Room, Navigation, WorkManager之类的都发布了正式版,而CameraX, Compose之类的还处在Alpha版本,未正式发布,官方并不建议在生产环境中使用。 然后说下,JetPack所有的组件都是基于AndroidX构建的,如果想在项目中使用JetPack需要先将项目中对Support Lib的依赖全部换成AndroidX。 Android目前已经发展了11年,可以说是比较成熟的技术了,一开始时框架很少,也没有什么规范,所有的代码都是要自己写,比如网络请求,数据库请求,数据解析等等。后来出现了一些框架来帮助开发者快速进行开发,比如XUtils、Volley
  • IllegalStateException: WorkManager is already initialized
    Having these dependencies: dependencies { implementation "androidx.work:work-runtime:2.0.1" androidTestImplementation "androidx.work:work-testing:2.0.1" } When running this code for the second time: Configuration config = new Configuration.Builder().build(); WorkManager.initialize(getApplicationContext(), config); this.workManager = WorkManager.getInstance(); I get this error message: java.lang.IllegalStateException: WorkManager is already initialized. Did you try to initialize it manually without disabling WorkManagerInitializer? See WorkManager#initialize(Context, Configuration) or the class
  • Dagger2: Unable to inject dependencies in WorkManager
    So from what I read, Dagger doesn't have support for inject in Worker yet. But there are some workarounds as people suggest. I have tried to do it a number of ways following examples online but none of them work for me. When I don't try to inject anything into the Worker class, the code works fine, only that I can't do what I want because I need access to some DAOs and Services. If I use @Inject on those dependencies, the dependencies are either null or the worker never starts i.e the debugger doesn't even enter the Worker class. For eg I tried doing this: @Component(modules = {Module.class})