How would you implement an RSS feed in a Java web environment?
I am working on an implementation for RSS feeds for a collaboration platform. Say there are several thousands of different collaboration rooms where users can share information, and each needs to publish an RSS feed with news, changes, etc...
Using a plain servlet (i.e. http://www.site.com/RSSServlet/?id=roomID) is costly, every time an RSS client is calling the servlet (and this will happen say every 10 minutes for each user registered to an RSS feed on one of the thousand of rooms) this will trigger the entire servlet lifecycle, which is costly.
On the other hand, keeping a static XML file on the disk for each of the thousands of rooms is costly as well, in terms of hard disk space as well as IO operations...
One more limitation - using already existing frameworks might not be an option...
So, how would you implement RSS feeds in a Java envoronment?
Asked by: Melissa853 | Posted: 23-01-2022
Answer 1
You say that a new http request to your servlet "will trigger the entire servlet lifecycle", which as Alexander has already pointed out, isn't exactly true. It will simply trigger another method call to your doGet()
or doPost()
methods.
I think what you mean to say is that if you have a doGet
/doPost
method which contains code to build the data needed for the RSS feed from scratch, then each request triggers this fetching of data over and over again.
If this is your concern, and you are ruling static content out, simply modify your Servlet doGet
/doPost
method to cache the RSS content that you would otherwise return, so that handling each request does not mean re-fetching all of the data all over again.
For example
public void doGet(HttpServletRequest request, HttpServletResponse response) {
//build the objects you need for the RSS response
Room room = getRoom(request.getParameter("roomid"));
//loadData();
//moreMethodCalls();
out.println( createRssContent(...) );
}
becomes
Map rssCache;
public void doGet(HttpServletRequest request, HttpServletResponse response) {
//Map is initialized in the init() method or somewhere else
String roomId = request.getParameter("roomid");
String rssDocument = rssCache.get(roomId);
if (rssDocument == null) {
//build the objects you need for the RSS response
Room room = getRoom(roomId);
//loadData();
//moreMethodCalls();
rssDocument = createRssContent(...);
rssCache.put(roomId, rssDocument);
}
out.println( rssDocument );
}
If you only want to store items in a "cache" for a certain amount of time you can use one of a dozen different caching frameworks, but the idea here is that you don't reconstruct the entire object graph necessary for your RSS response with each http request. If I am reading your original question right then I think that this is what you hoping to accomplish.
Answered by: Thomas258 | Posted: 24-02-2022Answer 2
You should try the ROME framework. It is excellent for RSS.
Answered by: Lenny252 | Posted: 24-02-2022Similar questions
java - Implement multi tenancy in a stateless environment using Spring and Hibernate and Tomcat
I’m trying to understand how we build a RESTful API for a SaaS product where it involves multi tenancy. The technology stack is Java using Spring and Hibernate and deploying a WAR to Tomcat.
My main issue is how do we maintain the tenant_id within the REST call in order for the application to use the correct database connection when performing CRUD. Seeing that Tomcat uses a thread pool and reuses threads we sh...
How do I set Java's min and max heap size through environment variables?
How do I set Java's min and max heap size through environment variables?
I know that the heap sizes can be set when launching java, but I would like to have this adjusted through environment variables on my server.
operating system - How can my Java code read OS environment variables?
This question already has answers here:
environment - Java current machine name and logged in user?
Is it possible to get the name of the currently logged in user (Windows/Unix) and the hostname of the machine?
I assume it's just a property of some static environment class.
I've found this for the user name
com.sun.security.auth.module.NTSystem NTSystem = new
com.sun.security.auth.module.NTSystem();
System.out.println(NTSystem.getName());
and this for the machine ...
Is it possible to set an environment variable at runtime from Java?
Is it possible to set an environment variable at runtime from a Java
application?
In Java 1.5 java.lang.System class there is the getenv() method, I would
only need a setenv() method...
Is it possible to modify the environment variables in the java process itself; not in the child process.
Is it possible to achieve it through JNI? And how would that work?
Thanks.
EDIT:
Ok let me put it this ...
Unit testing in Java EE environment
We're migrating our application into a Java EE container, and looking for tools to use for unit testing (and integration testing) our migrated app.
Our requirements include:
Ad-hoc testing: the ability to run tests manually, on demand (to be used by developers while developing code)
Batch testing: the ability to run a large (and growing) set of tests regularly
In-Container: integration tests...
How to set environment variables for ANT build.xml file? (Java)
I am trying to open a project with the Windows version of Eclipse, but after choosing to open the build.xml file the error message says:
Problem setting the classpath of the
project from the javac classpath:
C:\project1\${env.TOMCATEB_HOME}
I tried to set TOMCATEB_HOME environment variable in the Windows control panel, pointing to the Tomcat root folder (the one that has uni...
Java System Environment Variable Current User
What is the best way to get the current logged in user through Java application running on JBoss. The system environment variable System.getProperty("user.name") does not work as JBoss is running as a service.
The application is running on a laptop running Windows XP. The application is web-based and accessed using Internet Explorer by particular logged in Windows user. Only 1 Windows user can be logged in at a tim...
java - How do I have to configure a RMI environment so that I'm able to use it in a "real" network?
Because I didn't want to implement a communication protocol for my client-server based application, I implemented a RMI client and a RMI server on both sides for the information exchange between the two components.
If I try to use my application by starting the two components on the same machine, everything is working fine. But if I split the components to two different computers (Kubuntu 9.04 within as a virtual ...
java - Singleton in Cluster environment
What is the best strategy to refactor a Singleton object to a cluster environment?
We use Singleton to cache some custom information from Database. Its mostly read-only but gets refreshed when some particular event occurs.
Now our application needs to be deployed in a Clustered environment. By definition, each JVM will have its own Singleton instance. So the cache may be out-of-sync between the JV...
linux - Set Java environment variable problem on ubuntu
I got a message "No Java virtual machine could be found from your PATH
environment variable. You must install a VM prior to
running this program." Does anyone know how set up it correctly? Thanks!
Still can't find your answer? Check out these amazing Java communities for help...
Java Reddit Community | Java Help Reddit Community | Dev.to Java Community | Java Discord | Java Programmers (Facebook) | Java developers (Facebook)