Web-Anwendungen folgen traditionell dem Anfrage/Antwort-Zyklus, bei dem eine Anfrage von einem Benutzer oder einer anderen Web-App gestellt wird. Allerdings bin ich neugierig, ob es möglich ist, eine Web-App bestimmte Aufgaben bei der Bereitstellung auf einem App-Server automatisch zu initiieren. Angenommen, wir haben eine Web-App, die Daten abruft und verarbeitet. Ist es möglich, diese App so zu konfigurieren, dass Daten automatisch abgerufen und verarbeitet werden, wenn bestimmte Kriterien erfüllt sind, anstatt eine Anfrage von einem Benutzer/einer anderen Webanwendung zu benötigen?Ist es möglich, Web-App proaktiv statt reaktiv zu machen?
Antwort
Ja es verwendet Taskplaner wie Cron zum Beispiel. Obwohl man argumentieren könnte, dass solche Aufgaben nicht länger eine Web-Anwendung sind, sondern stattdessen lokale Anwendungen auf dem Server.
Sie können dies in den Bereitstellungsprozess selbst aufnehmen. Oder schließen Sie diese erste Anfrage auf die Webseite im Bereitstellungsprozess ein.
Werfen Sie einen Blick auf Quartz Scheduler
Wenn die Daten in Ihrem Beispiel in Dateien sind, dann können Sie einen Filewatcher verwenden die Ordner zu überwachen und eine Aktion, wenn eine neue Datei landet dort zu initiieren.
Hier ist ein example eines sehr einfach, nur Ihnen eine Vorstellung zu geben, wie es funktioniert:
package pilrcedit;
import java.io.*;
import java.util.*;
public class FileWatcher implements ChangeListener
{
private static final int FILE_MODIFIED=MODIFIED;
Hashtable files=new Hashtable();
ChangeListeners listeners=new ChangeListeners();
public FileWatcher()
{
Preferences.addChangeListener(this);
}
public void objectChanged(Object source,int id,Object data)
{
checkFiles();
}
private void checkFiles()
{
for(Enumeration e=files.keys();e.hasMoreElements();)
{
File f=(File)e.nextElement();
if (f.lastModified()!=((Long)files.get(f)).longValue())
{
files.put(f,new Long(f.lastModified()));
notifyListeners(f);
}
}
}
public void addFile(File f,ChangeListener listener)
{
files.put(f,new Long(f.lastModified()));
listeners.add(f,listener);
}
public void removeFile(File f,ChangeListener listener)
{
listeners.remove(f,listener);
}
public void notifyListeners(File f)
{
listeners.fireObjectChanged(f,this,FILE_MODIFIED,f);
}
}
Da Sie erwähnt Sie bestimmte Dinge während des Einsatzes tun möchte ich glaube, Sie Frühling verwenden können Hier können Sie bestimmte Aufgaben ausführen oder während der Bereitstellung etwas im Speicher (Cache) laden. Zum Beispiel in der XML-Anwendungskontext können Sie dies haben: -
<bean id="someCache" class="com.my.company.MyCache"
init-method="load">
<!-- <property> as needed -->
</bean>
myCache Klasse so etwas wie unten sein könnte: -
class MyCache{
public void load() {
//do your deployment work
}
}
- 1. Ist es möglich, Schriftarten skalierbar zu machen?
- 2. Es ist möglich, SpeechRecognizer schneller zu machen?
- 3. Ist es möglich, einen OpenGL ES-Layer transparent zu machen?
- 4. Ist es möglich, font-weight: bold gleich 500 statt 700 zu machen?
- 5. Ist es möglich, Anwendungen zu einem Drupal-Modul zu machen?
- 6. Swagger: Ist es möglich, einen Operationsparameter konstant/schreibgeschützt zu machen?
- 7. mySQL: Ist es möglich, diese Abfrage schneller zu machen?
- 8. Ist es möglich zu machen Regex ersetzen nicht gierig?
- 9. Ist es möglich, Mathematik innerhalb von CSS zu machen?
- 10. Ist es möglich, QML ListView zyklisch zu machen?
- 11. Ist es möglich, Eclipse Code-faltende Gosse schwarz zu machen?
- 12. Ist es möglich, einen Import in Subversion rückgängig zu machen?
- 13. Ist es möglich, eine MD-Taste kleiner zu machen?
- 14. Es ist möglich, stündliche Log-Rotation in Winston zu machen?
- 15. Ist es möglich, jede Sprache ausführbar zu machen?
- 16. Ist es möglich, einen WinRT-Dienst zu machen
- 17. Ist es möglich, in TFS eine "Geschichte zerstören" zu machen?
- 18. Ist es möglich, eine Abfrage wie diese zu machen?
- 19. Ist es möglich, einen vertikalen Schieberegler in Qualtrics zu machen?
- 20. Ist es möglich, die Abfrage dieser Ansicht kompakter zu machen?
- 21. Ist es möglich, absichtlich ein Programm Thrash zu machen?
- 22. Ist es möglich, einen hexagonalen Drag and Drop zu machen?
- 23. Ist es möglich @Formula Annotation lazy loaded zu machen?
- 24. Ist es möglich, Hist3-Plots glatter zu machen?
- 25. Javascript - Ist es möglich, eine Schleife mit Funktionen zu machen?
- 26. Ist es möglich, mit javaFX & swing sexy GUI zu machen?
- 27. Ist es möglich, Razor-Abschnitte optional zu machen?
- 28. Ist es möglich, eine Unterabfrage mit Sequelize.js zu machen?
- 29. Ist es möglich, ein Update mit SparkSQL zu machen?
- 30. Ist es möglich, ein Modul in Python iterierbar zu machen?
Ich würde auch mit cron finden Sie hier. Es könnte nur eine Ergänzung der bestehenden Webapp sein. Zum Beispiel etwas in die Webapps-Datenbank zu tun. –
Ich bin nicht wirklich mit Java-Servlet-Containern vertraut, es könnte möglich sein, dass sie in den Planungsfunktionen eingebaut sind. – Mchl