<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Jennifer Reif on foojay.io - Friends of OpenJDK</title><link>https://foojayio.github.io/website/today/author/jennifer-reif/</link><description>Articles written by Jennifer Reif on foojay.io - Friends of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 13 Jul 2026 07:05:59 +0000</lastBuildDate><atom:link href="https://foojayio.github.io/website/today/author/jennifer-reif/index.xml" rel="self" type="application/rss+xml"/><item><title>Foojay Podcast #100: Java Podcasters on Why They Started, What Broke, and What They Learned</title><link>https://foojayio.github.io/website/today/foojay-podcast-100/</link><pubDate>Mon, 13 Jul 2026 07:05:59 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-100/</guid><description>&lt;p&gt;Foojay Podcast hits episode 100. No plan, no roadmap. It just happened. To mark the occasion, Frank turned the microphone around and invited other podcasters: Adam Bien (airhacks.fm), Jennifer Reif (Breaktime Tech Talks), Kadi McKean and Steve Pool (10xInsights), and Oumaima Zerouali (JCast). Same three questions for each: why did you start, what broke, and what did you learn?&lt;/p&gt;
&lt;h2 id="h2-0-youtube"&gt;YouTube&lt;/h2&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/PID--srP0_U?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;h2 id="h2-1-podcast-apps"&gt;Podcast Apps&lt;/h2&gt;
&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>Intro to RAG: Foundations of Retrieval Augmented Generation, part 2</title><link>https://foojayio.github.io/website/today/intro-to-rag-foundations-of-retrieval-augmented-generation-part-2/</link><pubDate>Tue, 10 Jun 2025 21:54:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/intro-to-rag-foundations-of-retrieval-augmented-generation-part-2/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/intro-to-rag-foundations-of-retrieval-augmented-generation-part-1/"&gt;the last post&lt;/a&gt;
, we discussed the basics of Retrieval Augmented Generation (RAG) and how it enhances the capabilities of Large Language Models (LLMs) by integrating them with external knowledge sources. We also introduced the concept of vector embeddings and their role in semantic search.&lt;/p&gt;
&lt;p&gt;In this post, we&amp;rsquo;ll dive deeper into the different layers of RAG, including vector RAG, graph RAG, and agents. We&amp;rsquo;ll explore how these layers can be combined to create more powerful and effective AI systems.&lt;/p&gt;</description></item><item><title>Intro to RAG: Foundations of Retrieval Augmented Generation, part 1</title><link>https://foojayio.github.io/website/today/intro-to-rag-foundations-of-retrieval-augmented-generation-part-1/</link><pubDate>Tue, 27 May 2025 14:42:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/intro-to-rag-foundations-of-retrieval-augmented-generation-part-1/</guid><description>&lt;p&gt;Retrieval Augmented Generation (RAG) may sound complex, but it accurately represents the process of the system. RAG is a method that enhances the capabilities of Large Language Models (LLMs) by integrating them with external knowledge sources.&lt;/p&gt;
&lt;p&gt;Each term represents a piece of the puzzle:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Retrieval - data retrieved from some external source outside the LLM (most often a database, but can include files, webpages, etc)&lt;/li&gt;
&lt;li&gt;Augmented - &amp;ldquo;augmenting&amp;rdquo; (or adding to) an LLM&amp;rsquo;s training data. This could include recent or private information that it did not have access to during its training period. Most often, this is done by adding the data to the prompt (or input) to the LLM.&lt;/li&gt;
&lt;li&gt;Generation - this is where LLMs are exceptional. They generate a response (text, image, video, etc) that is similar to the data being provided in the input. This is generated from probabilities, so cannot guarantee 100% consistency.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Instead of relying solely on the model&amp;rsquo;s internal training data, RAG retrieves relevant information from databases or document collections to ground its responses in factual and up-to-date content. This approach not only improves the accuracy and reliability of the generated outputs but also allows the system to adapt to specific contexts or domains, making it a powerful tool for many personal and professional applications.&lt;/p&gt;</description></item><item><title>GenAI blood, sweat, and tears: Loading data to Pinecone</title><link>https://foojayio.github.io/website/today/genai-blood-sweat-and-tears-loading-data-to-pinecone/</link><pubDate>Wed, 07 May 2025 22:10:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/genai-blood-sweat-and-tears-loading-data-to-pinecone/</guid><description>&lt;p&gt;As someone who is pretty familiar with relational and graph databases, I wanted to dig a little deeper into vector databases and understand the strengths and quirks they bring to the database table. I put together a conference abstract on vector RAG versus GraphRAG which got picked up, so I went to work building a demo and learning all I could.&lt;/p&gt;
&lt;p&gt;I pivoted a few times along the way, but ended up with a Spring AI application that connects to both Pinecone (vector database) and Neo4j (graph database). There were a few surprises throughout, which I&amp;rsquo;ll be sure to mention. Let&amp;rsquo;s get started!&lt;/p&gt;</description></item><item><title>Breaktime Tech Talks (Ep39): Why embedding models should match + Advice for starting a blog</title><link>https://foojayio.github.io/website/today/breaktime-tech-talks-ep39-why-embedding-models-should-match-advice-for-starting-a-blog/</link><pubDate>Wed, 16 Apr 2025 05:35:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/breaktime-tech-talks-ep39-why-embedding-models-should-match-advice-for-starting-a-blog/</guid><description>&lt;p&gt;This is episode 39 of the &lt;a href="https://www.youtube.com/playlist?list=PLzZ7iUdr2mwS6qexoz9dsI0NfnU614p1w" target="_blank" rel="noopener noreferrer"&gt;Breaktime Tech Talks podcast&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m at a conference this week presenting on a variety of different topics, but I stopped for just a few minutes to document some recent learnings while I was preparing the code projects for this week&amp;rsquo;s sessions.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll chat about a hands-on experience that helped me understand why embedding models for vectors and search should actually match. Then I came across an article with advice for creating a blog that outlines a lot of the practices I myself follow when I write tech blogs. I hope you enjoy it as well.&lt;/p&gt;</description></item><item><title>Spring AI Debugging + How to Contribute to Open Source</title><link>https://foojayio.github.io/website/today/breaktime-tech-talks-ep38-spring-ai-debugging-how-to-contribute-to-open-source/</link><pubDate>Wed, 02 Apr 2025 05:56:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/breaktime-tech-talks-ep38-spring-ai-debugging-how-to-contribute-to-open-source/</guid><description>&lt;p&gt;In this episode, I continue my journey with vector databases, integrating &lt;a href="https://docs.spring.io/spring-ai/reference/api/vectordbs/pinecone.html" target="_blank" rel="noopener noreferrer"&gt;Pinecone&lt;/a&gt;
, &lt;a href="https://docs.spring.io/spring-ai/reference/api/vectordbs/neo4j.html" target="_blank" rel="noopener noreferrer"&gt;Neo4J&lt;/a&gt;
 , and &lt;a href="https://docs.spring.io/spring-ai/reference/index.html" target="_blank" rel="noopener noreferrer"&gt;Spring AI&lt;/a&gt;
. While making some progress, I also encountered hurdles, such as evolving APIs and the unique architecture of vector stores.&lt;/p&gt;
&lt;p&gt;Next, I share insights from &lt;a href="https://dzone.com/articles/why-and-how-to-participate-in-open-source-projects" target="_blank" rel="noopener noreferrer"&gt;an article on contributing to open-source source projects&lt;/a&gt;
, how it can accelerate your career and enhance both your technical and soft skills. From picking the right project to building credibility within the community, it&amp;rsquo;s a series of steps that gets better with time and practice!&lt;/p&gt;</description></item><item><title>Breaktime Tech Talks (Ep37): Vector Database Frustration + Microsoft LazyGraphRAG</title><link>https://foojayio.github.io/website/today/breaktime-tech-talks-ep37-vector-database-frustration-microsoft-lazygraphrag/</link><pubDate>Wed, 19 Mar 2025 12:54:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/breaktime-tech-talks-ep37-vector-database-frustration-microsoft-lazygraphrag/</guid><description>&lt;blockquote&gt;
&lt;p&gt;This is episode 37 of the &lt;a href="https://www.youtube.com/playlist?list=PLzZ7iUdr2mwS6qexoz9dsI0NfnU614p1w" target="_blank" rel="noopener noreferrer"&gt;Breaktime Tech Talks&lt;/a&gt;
.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/hv-FtjIHg_I?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;You are listening to the Breaktime Tech Talks podcast, a bite-sized tech podcast for busy developers, where we&amp;rsquo;ll briefly cover technical topics, new snippets, and more in short time blocks. I&amp;rsquo;m your host, Jennifer Reif, an avid developer and problem solver with special interest in data, learning, and all things technology.&lt;/p&gt;</description></item><item><title>Spring Data Neo4j: How to update an entity</title><link>https://foojayio.github.io/website/today/spring-data-neo4j-how-to-update-an-entity/</link><pubDate>Wed, 05 Feb 2025 18:58:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-data-neo4j-how-to-update-an-entity/</guid><description>&lt;p&gt;&lt;strong&gt;After working on a new &lt;a href="https://graphacademy.neo4j.com/courses/app-spring-data/" target="_blank" rel="noopener noreferrer"&gt;online Spring Data Neo4j course&lt;/a&gt;
, I learned a couple more things about updating an entity.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The course required a different set of scenarios than outlined in my &lt;a href="https://jmhreif.com/blog/2023/sdn-cypher-update-entity/" target="_blank" rel="noopener noreferrer"&gt;previous SDN update blog post&lt;/a&gt;
, so I wanted to cover those scenarios, as well.&lt;/p&gt;
&lt;h2 id="_spring_save_method"&gt;Spring save() method&lt;/h2&gt;
&lt;p&gt;First up is the out-of-the-box &lt;code&gt;save()&lt;/code&gt; method that is provided by Spring as a default. This method takes an input of the entity object you want to save to the database.&lt;/p&gt;</description></item><item><title>Gear Up for NODES 2024: What to Know</title><link>https://foojayio.github.io/website/today/gear-up-for-nodes-2024-what-to-know/</link><pubDate>Thu, 03 Oct 2024 17:00:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/gear-up-for-nodes-2024-what-to-know/</guid><description>&lt;h3 id="h3-0-nodes-is-a-free-virtual-conference-run-by-neo4j-for-developers-data-scientists-and-other-technical-roles-who-want-to-learn-more-about-graph-databases-and-how-they-can-be-used-to-solve-complex-problems-join-us-online-november-7"&gt;NODES is a free, virtual conference run by Neo4j for developers, data scientists, and other technical roles who want to learn more about graph databases and how they can be used to solve complex problems. Join us online November 7!&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The NODES 2024 conference is approaching fast, and we have a lot of exciting activities, including talks, workshops, and more. Here&amp;rsquo;s what you need to know to get ready for NODES 2024.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Press the Easy Button: Organize a Virtual Conference Schedule with a Graph Database</title><link>https://foojayio.github.io/website/today/press-the-easy-button-organize-a-virtual-conference-schedule-with-a-graph-database/</link><pubDate>Tue, 10 Sep 2024 06:17:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/press-the-easy-button-organize-a-virtual-conference-schedule-with-a-graph-database/</guid><description>&lt;p&gt;&lt;strong&gt;Putting together a conference schedule for NODES 2024 (one of my favorite events of the year) is a massive undertaking, but my colleague and I used technologies and tools at our disposal to make this process a little more efficient and greatly reduce opportunities for mistakes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Every year, Neo4j hosts the virtual event NODES 2024 - a free, technical event spanning global timezones and a variety of graph-related topics. This is one of my favorite events of the year, but it doesn&amp;rsquo;t happen without countless hours of planning and work to make it valuable to the graph community.&lt;/p&gt;</description></item><item><title>How to Run Neo4j on Kubernetes</title><link>https://foojayio.github.io/website/today/how-to-run-neo4j-on-kubernetes/</link><pubDate>Tue, 25 Jun 2024 19:34:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-run-neo4j-on-kubernetes/</guid><description>&lt;h3 id="h3-0-kubernetes-is-an-open-source-container-orchestration-platform-that-automates-the-deployment-scaling-and-management-of-containerized-applications-in-this-post-we-walk-through-how-to-run-the-neo4j-graph-database-on-kubernetes"&gt;Kubernetes is an open-source container orchestration platform that automates the deployment, scaling, and management of containerized applications. In this post, we walk through how to run the Neo4j graph database on Kubernetes.&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;For an upcoming event, I was asked to give a demo of how to run Neo4j on Kubernetes. I had very little experience with Kubernetes, so I decided to document my journey for later reference.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="_what_is_kubernetes"&gt;What is Kubernetes?&lt;/h2&gt;
&lt;p&gt;Kubernetes is an open-source container orchestration platform that automates the deployment, scaling, and management of containerized applications. It was originally developed by Google and is now maintained by the Cloud Native Computing Foundation.&lt;/p&gt;</description></item><item><title>How to Submit a Technical Presentation</title><link>https://foojayio.github.io/website/today/nodes-2024-how-to-submit-a-technical-presentation/</link><pubDate>Thu, 16 May 2024 09:06:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/nodes-2024-how-to-submit-a-technical-presentation/</guid><description>&lt;p&gt;&lt;strong&gt;There is no shortage of technical events such as conferences, meetups, trainings, hackathons, and so on. These events are a great way to learn new things, connect with people, and share knowledge with others. One of the most valuable and exciting ways to share knowledge is by giving a technical presentation.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Today, we will look at how to submit a technical presentation for an event and get some personal recommendations from me, as well. Though we will specifically gear the information for the NODES 2024 call for proposals, nearly everything discussed can be applied to other technical events and speaking engagements.&lt;/p&gt;</description></item><item><title>Spring AI: How to Write GenAI Applications with Java</title><link>https://foojayio.github.io/website/today/spring-ai-how-to-write-genai-applications-with-java/</link><pubDate>Thu, 09 May 2024 18:46:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-ai-how-to-write-genai-applications-with-java/</guid><description>&lt;p&gt;Generative AI (GenAI) is currently a hot topic in the tech world. It&amp;rsquo;s a subset of artificial intelligence that focuses on creating new content, such as text, images, or music. One popular type of GenAI component is the Large Language Model (LLM), which can generate human-like text based on a prompt.&lt;/p&gt;
&lt;p&gt;Retrieval-Augmented Generation (RAG) is a technique that enhances the accuracy and reliability of generative AI models by grounding them in external knowledge sources. While most GenAI applications and related content are centered around Python and its ecosystem, what if you want to write a GenAI application in Java?&lt;/p&gt;</description></item><item><title>Create a Spring Boot Application to Retrieve Data from Evernote</title><link>https://foojayio.github.io/website/today/how-to-create-a-spring-boot-application-to-retrieve-data-from-evernote/</link><pubDate>Mon, 28 Aug 2023 11:06:45 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-create-a-spring-boot-application-to-retrieve-data-from-evernote/</guid><description>&lt;p&gt;I recently started work on a joint project with my colleague, &lt;a href="https://twitter.com/jalakoo" target="_blank" rel="noopener noreferrer"&gt;Jason Koo&lt;/a&gt;
. For this project, we want to import data from second brain apps (such as Obsidian, Notion, Evernote, etc) to Neo4j.&lt;/p&gt;
&lt;p&gt;Since I use Evernote, I was tasked with getting my notes out of Evernote.&lt;/p&gt;
&lt;p&gt;In this article, I will show you how to use the Evernote API and SDK in a Spring Boot application to retrieve data from Evernote.&lt;/p&gt;</description></item><item><title>Journeys in Java, Level 10: Service Discovery with Eureka</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-10-service-discovery-with-eureka/</link><pubDate>Thu, 13 Jul 2023 06:39:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-10-service-discovery-with-eureka/</guid><description>&lt;p&gt;Gaining complexity in a microservices system certainly isn&amp;rsquo;t for the faint of heart (though neither is complexity in monoliths!).&lt;/p&gt;
&lt;p&gt;When there are many services that need to communicate with one another, we might need to coordinate multiple services communicating with multiple other services.&lt;/p&gt;
&lt;p&gt;We also might code for varying environments such as local, development server, or the cloud.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How do services know where to find one another?&lt;/li&gt;
&lt;li&gt;How can we avoid problems when a service is unavailable?&lt;/li&gt;
&lt;li&gt;How do we handle requests when we scale up or down certain parts of our system?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is where something like Spring Cloud Netflix Eureka comes into play.&lt;/p&gt;</description></item><item><title>Time Machine: A Look-Back at Java Sessions from NODES 2022</title><link>https://foojayio.github.io/website/today/time-machine-a-look-back-at-java-sessions-from-nodes-2022/</link><pubDate>Wed, 28 Jun 2023 07:53:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/time-machine-a-look-back-at-java-sessions-from-nodes-2022/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/time-machine-a-look-back-at-java-sessions-from-nodes-2022/nodes2023-java-scaled.jpg" alt="Base Photo by Compare Fibre on Unsplash" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Figure 1. Base Photo by Compare Fibre on Unsplash&lt;/p&gt;
&lt;p&gt;As we prepare for NODES 2023, I wanted to pull out the time machine and review the Java sessions from &lt;a href="https://neo4j.com/video/nodes-2022/" target="_blank" rel="noopener noreferrer"&gt;NODES 2022&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;I will be submitting some abstracts to the &lt;a href="https://sessionize.com/neo4j-nodes-2023" target="_blank" rel="noopener noreferrer"&gt;2023 Call for Proposal&lt;/a&gt;
 here soon, likely in the Java category, so I thought looking at last year&amp;rsquo;s sessions might give me some inspiration or ideas for gaps or continuations I might want to explore.&lt;/p&gt;</description></item><item><title>Neo4j's Online Conference Is Coming In October...</title><link>https://foojayio.github.io/website/today/neo4js-online-conference-is-coming-in-october-and-youre-invited/</link><pubDate>Wed, 07 Jun 2023 08:46:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/neo4js-online-conference-is-coming-in-october-and-youre-invited/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/neo4js-online-conference-is-coming-in-october-and-youre-invited/05.03_Nodes_Banner_1200x628-1-700x366.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;NODES is back for its fifth year on October 26, 2023!&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s the biggest graph community gathering dedicated to learning how to integrate graph technologies into ML and dev projects.&lt;/p&gt;
&lt;p&gt;For 24 hours nonstop, speakers from around the world will showcase their implementations, tools, models, and more &amp;ndash; sharing everything they&amp;rsquo;ve learned over this past year.&lt;/p&gt;
&lt;p&gt;Join thousands of fellow developers, data scientists, and data engineers to get firsthand knowledge from peers who will show you the ropes &amp;ndash; for free! So be sure to &lt;a href="https://neo4j.registration.goldcast.io/events/6fb85147-ca27-4310-9dec-cb345c53bd6f" title="save your seat" target="_blank" rel="noopener noreferrer"&gt;save your seat&lt;/a&gt;
!&lt;/p&gt;</description></item><item><title>Journeys in Java, Level 9: Docker compose all the things</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-9-docker-compose-all-the-things/</link><pubDate>Sun, 26 Feb 2023 10:02:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-9-docker-compose-all-the-things/</guid><description>&lt;p&gt;Our microservices project contains quite a few pieces now.&lt;/p&gt;
&lt;p&gt;We have two databases, three API services, a user-view service for books, and a service to host our configuration.&lt;/p&gt;
&lt;p&gt;With so many pieces to manage, it would be nice to have something that orchestrates the individual services into a system, such as Docker Compose.&lt;/p&gt;
&lt;p&gt;Back in our &lt;a href="https://foojayio.github.io/website/today/journeys-in-java-level-5-building-an-empire-of-microservices/"&gt;Level 5&lt;/a&gt;
 rendition, we did exactly this for our smaller version of the project.&lt;/p&gt;
&lt;p&gt;Now that we have expanded our services, we need to add those new pieces into the existing Docker Compose management umbrella.&lt;/p&gt;</description></item><item><title>Journeys in Java, Level 8: Add MongoDB to Spring Cloud Config</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-8-add-mongodb-to-spring-cloud-config/</link><pubDate>Thu, 09 Feb 2023 16:56:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-8-add-mongodb-to-spring-cloud-config/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/journeys-in-java-level-7-externalize-microservice-configuration/"&gt;our last article&lt;/a&gt;
, we used Spring Cloud Config to provide database credentials to a microservice application connecting to a cloud-hosted Neo4j database. This post will backport this concept to our existing MongoDB database instance and its related microservices.&lt;/p&gt;
&lt;p&gt;We will add our MongoDB credentials to the config server, so that it will be the central place for both our Neo4j and MongoDB database access. However, each service only has access to the credentials that it needs to operate, which provides some level of security through &amp;ldquo;separation of concerns&amp;rdquo; (versus universal access).&lt;/p&gt;</description></item><item><title>Journeys in Java, Level 7: Externalize Microservice Configuration</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-7-externalize-microservice-configuration/</link><pubDate>Mon, 30 Jan 2023 15:43:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-7-externalize-microservice-configuration/</guid><description>&lt;p&gt;Our decided next step for this project takes us in a new direction by adding externalized configuration for our applications.&lt;/p&gt;
&lt;p&gt;We already saw how to do something similar with &lt;a href="https://jmhreif.com/blog/microservices-level5/" target="_blank" rel="noopener noreferrer"&gt;MongoDB database credentials in Docker Compose&lt;/a&gt;
 to access a local database container, but what do we do when the database is hosted on public cloud or contains sensitive data?&lt;/p&gt;
&lt;p&gt;We probably don&amp;rsquo;t want to publish our credentials anywhere or even prevent accidental publishing.&lt;/p&gt;</description></item><item><title>Journeys in Java, Level 6: Build a Neo4j Microservice</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-6-build-a-neo4j-microservice/</link><pubDate>Wed, 13 Jul 2022 15:13:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-6-build-a-neo4j-microservice/</guid><description>&lt;p&gt;For our next adventure in Java microservices, we want to expand our system for book review data.&lt;/p&gt;
&lt;p&gt;While books and authors are well-suited for a document database such as MongoDB, once you add reviews to the mix, the importance of the relationships makes this project better suited for a graph database.&lt;/p&gt;
&lt;p&gt;This way, we can utilize relationships between the different entities to improve analysis based on the structure of the connections.&lt;/p&gt;</description></item><item><title>Journeys in Java, Level 5: Building an Empire of Microservices</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-5-building-an-empire-of-microservices/</link><pubDate>Thu, 02 Jun 2022 05:08:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-5-building-an-empire-of-microservices/</guid><description>&lt;p&gt;We continue building our microservices system by adding a coordination layer to handle spinning multiple services up and down.&lt;/p&gt;
&lt;p&gt;In previous articles, we grew from two Spring Boot applications to three applications + a database container.&lt;/p&gt;
&lt;p&gt;As we continue to scale and broaden our system, we will need something to coordinate service and ensure consistent communication (avoid human error).&lt;/p&gt;
&lt;p&gt;We will do this through &lt;a href="https://docs.docker.com/compose/" target="_blank" rel="noopener noreferrer"&gt;&lt;code&gt;docker-compose&lt;/code&gt;&lt;/a&gt;
, an orchestration tool that manages containerized applications.&lt;/p&gt;</description></item><item><title>Journeys in Java, Level 4: Building an Empire of Microservices</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-4-building-an-empire-of-microservices/</link><pubDate>Wed, 27 Apr 2022 07:22:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-4-building-an-empire-of-microservices/</guid><description>&lt;p&gt;This article is the fourth iteration in a series of posts about building microservices in Java.&lt;/p&gt;
&lt;p&gt;The initial post started with a single string message passed between two locally-running applications, and we are gradually adding services and functionality along the way.&lt;/p&gt;
&lt;p&gt;In this level 4 instalment, we will add a new service that will manage book authors. It will call a database containing a data domain of books and retrieve authors and their information. This will entail creating a new, separate service from our previously written service1 and service2.&lt;/p&gt;</description></item><item><title>Fullstack IMDB Clone with a Java Backend using SparkJava and Neo4j</title><link>https://foojayio.github.io/website/today/building-a-fullstack-imdb-clone-with-a-java-backend-using-sparkjava-and-neo4j/</link><pubDate>Wed, 20 Apr 2022 07:11:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-a-fullstack-imdb-clone-with-a-java-backend-using-sparkjava-and-neo4j/</guid><description>&lt;p&gt;Our &lt;a href="https://graphacademy.neo4j.com" target="_blank" rel="noopener noreferrer"&gt;GraphAcademy&lt;/a&gt;
 is teaching folks starting out in the graph space the fundamentals of the data model, query language, and graph algorithms.&lt;/p&gt;
&lt;p&gt;And for developers, there are &lt;a href="https://graphacademy.neo4j.com/categories/developer/" target="_blank" rel="noopener noreferrer"&gt;courses for using our drivers&lt;/a&gt;
 and building the backend of a fullstack app in JavaScript, Go, Python, Java, and soon .Net.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/OzxHfAx.png" alt="OzxHfAx" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;The application is an IMDB clone based on the &lt;a href="https://github.com/neo4j-graph-examples/recommendations" target="_blank" rel="noopener noreferrer"&gt;MovieLens recommendation&lt;/a&gt;
 dataset augmented with movie and cast data from &lt;a href="https://themoviedb.org" target="_blank" rel="noopener noreferrer"&gt;themoviedb.org&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;The front-end is written in vue.js and looks pretty slick.&lt;/p&gt;</description></item><item><title>Journeys in Java, Level 3: Building an Empire of Microservices</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-3-building-an-empire-of-microservices/</link><pubDate>Fri, 04 Mar 2022 16:23:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-3-building-an-empire-of-microservices/</guid><description>&lt;p&gt;We are still in the beginning stages of building microservices with Java, but we have already seen how to send and receive communications between two Spring Boot applications. In the &lt;a href="https://jmhreif.com/blog/microservices-level1/" target="_blank" rel="noopener noreferrer"&gt;first blog post&lt;/a&gt;
 of this series, our two applications transmitted a message string of &lt;code&gt;&amp;quot;Hello, World!&amp;quot;&lt;/code&gt;. In the &lt;a href="https://jmhreif.com/blog/microservices-level2/" target="_blank" rel="noopener noreferrer"&gt;second blog post&lt;/a&gt;
, we took it one step further by embedding a MongoDB database into our &lt;code&gt;service1&lt;/code&gt;, added a data domain (books) with four pre-populated entries, and transmitted the &lt;code&gt;Book&lt;/code&gt; information between the two applications.&lt;/p&gt;</description></item><item><title>Journeys in Java, Level 2: Building an Empire of Microservices</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-2-building-an-empire-of-microservices/</link><pubDate>Wed, 16 Feb 2022 15:29:33 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-2-building-an-empire-of-microservices/</guid><description>&lt;p&gt;&lt;strong&gt;Let&amp;rsquo;s dive into the world of microservices find out the complexities, best practices, and troubles. I will share all my learnings, as well!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In my &lt;a href="https://jmhreif.com/blog/microservices-level1/" target="_blank" rel="noopener noreferrer"&gt;last blog post&lt;/a&gt;
, we began building microservices in Java with two Spring Boot applications, passing a &amp;ldquo;Hello, World!&amp;rdquo; string from one application to the other. We focused on reduced complexity, minimum previous knowledge, and few components. Next, we can slowly add pieces that simulate microservices projects in the real world.&lt;/p&gt;</description></item><item><title>Journeys in Java, Level 1: Building an Empire of Microservices</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-1-building-an-empire-of-microservices/</link><pubDate>Fri, 28 Jan 2022 14:21:37 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-1-building-an-empire-of-microservices/</guid><description>&lt;p&gt;Microservices have been used and deployed in businesses and projects for awhile, and there is plenty of content available for architecting them into a system. For my next project, I want to dive into the world of microservices and begin building my own little virtual empire from different kinds of services to find out the complexities, best practices, power, and trouble that comes with them. I will share all my learnings along the way, as well.&lt;/p&gt;</description></item></channel></rss>