This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
Creating a Facebook Clone - Part XVII.pdfShaiAlmog1
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
Creating an Uber Clone - Part XI - Transcript.pdfShaiAlmog1
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
using Spring and MongoDB on Cloud FoundryJoshua Long
This talk introduces how to build MongoDB applications with Spring Data MongoDB on Cloud Foundry. Spring Data provides rich support for easily building applications that work on multiple data stores.
Google AppEngine is an application platform that allows developers to build and host web applications in the cloud. It provides automatic scaling of web and worker instances, high availability, load balancing, and simple deployment. The platform handles low-level tasks like hardware provisioning and maintenance. However, applications are limited by the sandbox environment and certain features like file system access and sockets are not supported. Pricing is based on usage of resources like bandwidth, CPU time, and data storage. While deployment is easy, applications need to be designed specifically for the AppEngine platform to work within its constraints.
Google Developer Days Brazil 2009 - Java AppenginePatrick Chanezon
This document provides an overview of Google App Engine and its support for Java applications. It discusses key features like automatic scaling, usage-based billing, and built-in services. It explains that App Engine runs web apps on Google's infrastructure without requiring installation or maintenance of servers. The document demonstrates the App Engine architecture and development tools. It also summarizes the Datastore service and how it differs from relational databases while providing scalable storage and queries.
Spring boot is a suite, pre-configured, pre-sugared set of frameworks/technologies to reduce boilerplate configuration providing you the shortest way to have a Spring web application up and running with smallest line of code/configuration out-of-the-box.
The document discusses recommendations for computer science students before graduating, including taking programming courses focused on object-oriented principles and design patterns, finding internships that involve programming work, learning English, studying microeconomics, completing sample applications to demonstrate skills, and being active in online communities. It also emphasizes the importance of documentation, graduating quickly, avoiding dismissing non-IT courses, and focusing on skills rather than specific future jobs.
The 90-Day Startup with Google AppEngine for JavaDavid Chandler
The document discusses Google App Engine, a platform for developing and hosting web applications on Google's infrastructure. It provides an overview of App Engine and how to get started, discusses some limitations and tradeoffs compared to traditional web hosting, and recommends frameworks and techniques for building scalable applications on App Engine, including Objectify, Guice, and gwt-dispatch. It also notes that while App Engine is still relatively new, it has significant potential for developing scalable applications with minimal upfront costs.
Google App Engine is a platform that allows developers to build and host Java web applications on Google's infrastructure. It handles tasks like scaling and maintenance automatically. Developers can focus on coding without worrying about managing hardware, servers, or other infrastructure. The platform provides APIs that allow access to Google services like Datastore, Memcache, and others. It also includes tools for deploying, monitoring, and managing applications.
Developing, deploying and monitoring Java applications using Google App EngineIndicThreads
Google App Engine is a platform that allows developers to build and host Java web applications on Google's infrastructure. It handles tasks like scaling and maintenance automatically. Developers can focus on coding without worrying about managing hardware, servers, or other infrastructure. The platform provides APIs that allow access to services like datastore, memcache, and others. It also includes tools for deploying, monitoring, and managing applications.
CloudFoundry and MongoDb, a marriage made in heavenPatrick Chanezon
This talk will provide an overview of the PaaS (Platform as a Service) landscape, and will describe the Cloud Foundry open source PaaS, with its multi-framework, multi-service, multi-cloud model. Cloud Foundry allows developers to provision apps in Java/Spring, Ruby/Rails, Ruby/Sinatra, Javascript/Node, and leverage services like MySQL, MongoDB, Reddis, Postgres and RabbitMQ. It can be used as a public PaaS on CloudFoundry.com and other service providers (ActiveState, AppFog), to create your own private cloud, or on your laptop using the Micro Cloud Foundry VM. Micro Cloud Foundry is a very easy way for developers to start working on their application using their framework of choice and MongoDB, without the need to setup a development environment, and your app is one command line away (vmc push) from deployment to cloudfoundry.com.
- Google App Engine is a platform for easily developing and hosting scalable web applications, with no need for complex server management. It automatically scales the applications and handles all the operational details.
- App Engine applications run on Google's infrastructure and benefit from automatic scaling across multiple servers. It also provides security isolation and quotas to prevent applications from disrupting others.
- The platform uses a stateless, request-based architecture and scales applications automatically as traffic increases by distributing requests across multiple servers. It also uses quotas to ensure fairness among applications.
Spring Boot makes it easy to create production-grade Spring applications that require minimal configuration. It provides tools to generate a single jar file containing an embedded web server so applications can be run with no external dependencies. The document discusses setting up a Spring Boot project with MySQL database integration using JPA to store and retrieve objects. It demonstrates creating a basic RESTful service to add and fetch items from the database with minimal code.
JavaScript as Data Processing Language & HTML5 IntegrationQuentin Adam
These last years, data management has become a trending and very dynamic subject. Subjects and tech trends like NoSQL, localcache, offline synchronization or message brokers are now at the core of projects infrastructures. This is linked to the new trend around functional programing, for data manipulation.
The talk goal is to show connections between NoSQL, data processing, message broking and JavaScript. How to quickly prototype with these tools! Are these tools only for mass storage or raw performance? Does it allow you to code faster?
http://qconlondon.com/london-2013/presentation/JavaScript%20as%20Data%20Processing%20Language%20&%20HTML5%20Integration
Google App Engine - exploiting limitationsTomáš Holas
Google App Engine is a PaaS that allows developers to build and host web applications on Google's infrastructure. It provides automatic scaling and simulates a production environment through its SDK. However, applications must comply with App Engine's rules, including a read-only filesystem, 30 second response times, and no socket connections or processes. Data is stored in Google's distributed Datastore, which uses entities instead of tables and does not support joins, aggregation, or transactions across entity groups. To work within these limitations, developers must change their approach to focus on the Datastore's strengths like simplicity and denormalize their data models.
This presentation slides is for SG GTUG 4th meetup on 17 April 2010.
In this presentation, I shared my personal experience in using AppEngine (Java) for my mobile application developments. I used SG 4D, one of my most popular Singapore app, as an example.
Topics covered including datamining, cron jobs, JDO, Restlet and Gson.
Spring in the Cloud - using Spring with Cloud FoundryJoshua Long
This talk's about using the power of the Spring framework with Cloud Foundry, the open source PaaS (platform as-a-service) from VMware. This is a bit more deep an introduction than my other Spring and Cloud Foundry talk, and so I've kept both, while encouraging people to check this one out, first.
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
A Walking Tour of (almost) all of Springdom Joshua Long
this is the deck for my 3+ hour walking tour talk that I give as a workshop at various conferences. This talk introduces practically everything in Spring -- come into the talk unaware of the concepts or frameworks and leave with a working knowledge of all the frameworks, and of all the applications for the technologies.
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
Programming Google App Engine Build and Run Scalable Web Apps on Google s Inf...keftonoztas
Programming Google App Engine Build and Run Scalable Web Apps on Google s Infrastructure Animal Guide 1st Edition Dan Sanderson
Programming Google App Engine Build and Run Scalable Web Apps on Google s Infrastructure Animal Guide 1st Edition Dan Sanderson
Programming Google App Engine Build and Run Scalable Web Apps on Google s Infrastructure Animal Guide 1st Edition Dan Sanderson
SQL? NoSQL? NewSQL?!? What’s a Java developer to do? - JDC2012 Cairo, EgyptChris Richardson
This document discusses different database options for developers including SQL, NoSQL, and NewSQL databases. It provides an overview of why developers may choose NoSQL databases like MongoDB or Cassandra over traditional SQL databases, as well as when a NewSQL database could be a better option. The document uses a fictional example of a food delivery application to illustrate how different database choices would work for persisting and querying application data.
Google App Engine is a platform for developing and hosting web applications at scale. Key features include the Datastore for scalable data storage, services like Mail and Images, and the Java runtime environment using Jetty and a Java Virtual Machine. Developers can code applications using Java and deploy them to run on Google's infrastructure.
How and why we evolved a legacy Java web application to Scala... and we are s...Katia Aresti
Applications get old, and technology moves fast. Overtime, adding or modifying functionalities might become as expensive as re-coding everything all from scratch. But rewriting a complete website and its functionalities it’s hard if we want to minimize the risks of breaking existing functionalities and specially when this application fits in a ecosystem and interacts with other pieces of software and teams.
In this session, you will learn how we moved from a legacy java monolithic website using scala PlayFramework, AngularJS, Elasticsearch and MongoDB, how we built a multi service and REST oriented architecture, which were the technical and human problems we encountered and how we managed to solved them.
This presentation introduces Google App Engine (GAE), covering its architecture, pricing, development process, and key services. GAE is a platform for building scalable web applications on Google's infrastructure. It provides automatic scaling, lower costs than traditional hosting, and services for user authentication, asynchronous tasks, storage, and more. Development involves using GAE's SDKs for local testing and the admin console for deploying and managing apps. Data can be stored in GAE's NoSQL datastore or relational Cloud SQL. Key services demonstrated include the datastore, blobstore, task queues, and transactions.
This document provides an introduction and overview of Google App Engine and developing applications with Python on the platform. It discusses what App Engine is, who uses it, how much it costs, recommended development tools and frameworks, and some of the key services provided like the datastore, blobstore, task queues, and URL fetch. It also notes some limitations of App Engine and alternatives to running your own version of the platform.
Oliver Gierke gave a presentation on Spring Data at SpringOne 2GX 2011. Spring Data provides a familiar and consistent Spring-based programming model for data access while not over-abstracting the traits of specific data stores. It includes support for relational databases, NoSQL databases, mapping, repositories, query languages, and geospatial queries across data stores.
The Duck Teaches Learn to debug from the masters. Local to production- kill ...ShaiAlmog1
The document outlines an agenda for a workshop on debugging techniques. The workshop covers installing tools, flow and breakpoints debugging, watching variables, Kubernetes debugging, and developer observability. Key techniques discussed include tracepoints, memory debugging, exception breakpoints, object marking, and logs, snapshots, and metrics for observability. The goal is to teach practical debugging skills that can be applied at scale in production environments like Kubernetes.
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
More Related Content
Similar to Creating a Facebook Clone - Part XVII - Transcript.pdf (20)
The 90-Day Startup with Google AppEngine for JavaDavid Chandler
The document discusses Google App Engine, a platform for developing and hosting web applications on Google's infrastructure. It provides an overview of App Engine and how to get started, discusses some limitations and tradeoffs compared to traditional web hosting, and recommends frameworks and techniques for building scalable applications on App Engine, including Objectify, Guice, and gwt-dispatch. It also notes that while App Engine is still relatively new, it has significant potential for developing scalable applications with minimal upfront costs.
Google App Engine is a platform that allows developers to build and host Java web applications on Google's infrastructure. It handles tasks like scaling and maintenance automatically. Developers can focus on coding without worrying about managing hardware, servers, or other infrastructure. The platform provides APIs that allow access to Google services like Datastore, Memcache, and others. It also includes tools for deploying, monitoring, and managing applications.
Developing, deploying and monitoring Java applications using Google App EngineIndicThreads
Google App Engine is a platform that allows developers to build and host Java web applications on Google's infrastructure. It handles tasks like scaling and maintenance automatically. Developers can focus on coding without worrying about managing hardware, servers, or other infrastructure. The platform provides APIs that allow access to services like datastore, memcache, and others. It also includes tools for deploying, monitoring, and managing applications.
CloudFoundry and MongoDb, a marriage made in heavenPatrick Chanezon
This talk will provide an overview of the PaaS (Platform as a Service) landscape, and will describe the Cloud Foundry open source PaaS, with its multi-framework, multi-service, multi-cloud model. Cloud Foundry allows developers to provision apps in Java/Spring, Ruby/Rails, Ruby/Sinatra, Javascript/Node, and leverage services like MySQL, MongoDB, Reddis, Postgres and RabbitMQ. It can be used as a public PaaS on CloudFoundry.com and other service providers (ActiveState, AppFog), to create your own private cloud, or on your laptop using the Micro Cloud Foundry VM. Micro Cloud Foundry is a very easy way for developers to start working on their application using their framework of choice and MongoDB, without the need to setup a development environment, and your app is one command line away (vmc push) from deployment to cloudfoundry.com.
- Google App Engine is a platform for easily developing and hosting scalable web applications, with no need for complex server management. It automatically scales the applications and handles all the operational details.
- App Engine applications run on Google's infrastructure and benefit from automatic scaling across multiple servers. It also provides security isolation and quotas to prevent applications from disrupting others.
- The platform uses a stateless, request-based architecture and scales applications automatically as traffic increases by distributing requests across multiple servers. It also uses quotas to ensure fairness among applications.
Spring Boot makes it easy to create production-grade Spring applications that require minimal configuration. It provides tools to generate a single jar file containing an embedded web server so applications can be run with no external dependencies. The document discusses setting up a Spring Boot project with MySQL database integration using JPA to store and retrieve objects. It demonstrates creating a basic RESTful service to add and fetch items from the database with minimal code.
JavaScript as Data Processing Language & HTML5 IntegrationQuentin Adam
These last years, data management has become a trending and very dynamic subject. Subjects and tech trends like NoSQL, localcache, offline synchronization or message brokers are now at the core of projects infrastructures. This is linked to the new trend around functional programing, for data manipulation.
The talk goal is to show connections between NoSQL, data processing, message broking and JavaScript. How to quickly prototype with these tools! Are these tools only for mass storage or raw performance? Does it allow you to code faster?
http://qconlondon.com/london-2013/presentation/JavaScript%20as%20Data%20Processing%20Language%20&%20HTML5%20Integration
Google App Engine - exploiting limitationsTomáš Holas
Google App Engine is a PaaS that allows developers to build and host web applications on Google's infrastructure. It provides automatic scaling and simulates a production environment through its SDK. However, applications must comply with App Engine's rules, including a read-only filesystem, 30 second response times, and no socket connections or processes. Data is stored in Google's distributed Datastore, which uses entities instead of tables and does not support joins, aggregation, or transactions across entity groups. To work within these limitations, developers must change their approach to focus on the Datastore's strengths like simplicity and denormalize their data models.
This presentation slides is for SG GTUG 4th meetup on 17 April 2010.
In this presentation, I shared my personal experience in using AppEngine (Java) for my mobile application developments. I used SG 4D, one of my most popular Singapore app, as an example.
Topics covered including datamining, cron jobs, JDO, Restlet and Gson.
Spring in the Cloud - using Spring with Cloud FoundryJoshua Long
This talk's about using the power of the Spring framework with Cloud Foundry, the open source PaaS (platform as-a-service) from VMware. This is a bit more deep an introduction than my other Spring and Cloud Foundry talk, and so I've kept both, while encouraging people to check this one out, first.
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
A Walking Tour of (almost) all of Springdom Joshua Long
this is the deck for my 3+ hour walking tour talk that I give as a workshop at various conferences. This talk introduces practically everything in Spring -- come into the talk unaware of the concepts or frameworks and leave with a working knowledge of all the frameworks, and of all the applications for the technologies.
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
Programming Google App Engine Build and Run Scalable Web Apps on Google s Inf...keftonoztas
Programming Google App Engine Build and Run Scalable Web Apps on Google s Infrastructure Animal Guide 1st Edition Dan Sanderson
Programming Google App Engine Build and Run Scalable Web Apps on Google s Infrastructure Animal Guide 1st Edition Dan Sanderson
Programming Google App Engine Build and Run Scalable Web Apps on Google s Infrastructure Animal Guide 1st Edition Dan Sanderson
SQL? NoSQL? NewSQL?!? What’s a Java developer to do? - JDC2012 Cairo, EgyptChris Richardson
This document discusses different database options for developers including SQL, NoSQL, and NewSQL databases. It provides an overview of why developers may choose NoSQL databases like MongoDB or Cassandra over traditional SQL databases, as well as when a NewSQL database could be a better option. The document uses a fictional example of a food delivery application to illustrate how different database choices would work for persisting and querying application data.
Google App Engine is a platform for developing and hosting web applications at scale. Key features include the Datastore for scalable data storage, services like Mail and Images, and the Java runtime environment using Jetty and a Java Virtual Machine. Developers can code applications using Java and deploy them to run on Google's infrastructure.
How and why we evolved a legacy Java web application to Scala... and we are s...Katia Aresti
Applications get old, and technology moves fast. Overtime, adding or modifying functionalities might become as expensive as re-coding everything all from scratch. But rewriting a complete website and its functionalities it’s hard if we want to minimize the risks of breaking existing functionalities and specially when this application fits in a ecosystem and interacts with other pieces of software and teams.
In this session, you will learn how we moved from a legacy java monolithic website using scala PlayFramework, AngularJS, Elasticsearch and MongoDB, how we built a multi service and REST oriented architecture, which were the technical and human problems we encountered and how we managed to solved them.
This presentation introduces Google App Engine (GAE), covering its architecture, pricing, development process, and key services. GAE is a platform for building scalable web applications on Google's infrastructure. It provides automatic scaling, lower costs than traditional hosting, and services for user authentication, asynchronous tasks, storage, and more. Development involves using GAE's SDKs for local testing and the admin console for deploying and managing apps. Data can be stored in GAE's NoSQL datastore or relational Cloud SQL. Key services demonstrated include the datastore, blobstore, task queues, and transactions.
This document provides an introduction and overview of Google App Engine and developing applications with Python on the platform. It discusses what App Engine is, who uses it, how much it costs, recommended development tools and frameworks, and some of the key services provided like the datastore, blobstore, task queues, and URL fetch. It also notes some limitations of App Engine and alternatives to running your own version of the platform.
Oliver Gierke gave a presentation on Spring Data at SpringOne 2GX 2011. Spring Data provides a familiar and consistent Spring-based programming model for data access while not over-abstracting the traits of specific data stores. It includes support for relational databases, NoSQL databases, mapping, repositories, query languages, and geospatial queries across data stores.
The Duck Teaches Learn to debug from the masters. Local to production- kill ...ShaiAlmog1
The document outlines an agenda for a workshop on debugging techniques. The workshop covers installing tools, flow and breakpoints debugging, watching variables, Kubernetes debugging, and developer observability. Key techniques discussed include tracepoints, memory debugging, exception breakpoints, object marking, and logs, snapshots, and metrics for observability. The goal is to teach practical debugging skills that can be applied at scale in production environments like Kubernetes.
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
The document describes code for implementing the server-side functionality of a WhatsApp clone. It includes classes for representing users, messages, and server connections. The Server class initializes user and message data from files, handles login/signup, and establishes a websocket connection for real-time messaging. It can send and receive messages when connected, or queue messages when offline.
Creating a Whatsapp Clone - Part IX - Transcript.pdfShaiAlmog1
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
Creating a Whatsapp Clone - Part II - Transcript.pdfShaiAlmog1
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
Creating a Whatsapp Clone - Part V - Transcript.pdfShaiAlmog1
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
Creating a Whatsapp Clone - Part IV - Transcript.pdfShaiAlmog1
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
Creating a Whatsapp Clone - Part I - Transcript.pdfShaiAlmog1
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
This is a part of an online Codename One course published around 2017 see it all for free at https://debugagent.com/series/cn1
Maxx nft market place new generation nft marketing placeusersalmanrazdelhi
PREFACE OF MAXXNFT
MaxxNFT: Powering the Future of Digital Ownership
MaxxNFT is a cutting-edge Web3 platform designed to revolutionize how
digital assets are owned, traded, and valued. Positioned at the forefront of the
NFT movement, MaxxNFT views NFTs not just as collectibles, but as the next
generation of internet equity—unique, verifiable digital assets that unlock new
possibilities for creators, investors, and everyday users alike.
Through strategic integrations with OKT Chain and OKX Web3, MaxxNFT
enables seamless cross-chain NFT trading, improved liquidity, and enhanced
user accessibility. These collaborations make it easier than ever to participate
in the NFT ecosystem while expanding the platform’s global reach.
With a focus on innovation, user rewards, and inclusive financial growth,
MaxxNFT offers multiple income streams—from referral bonuses to liquidity
incentives—creating a vibrant community-driven economy. Whether you
'
re
minting your first NFT or building a digital asset portfolio, MaxxNFT empowers
you to participate in the future of decentralized value exchange.
https://maxxnft.xyz/
Introduction and Background:
Study Overview and Methodology: The study analyzes the IT market in Israel, covering over 160 markets and 760 companies/products/services. It includes vendor rankings, IT budgets, and trends from 2025-2029. Vendors participate in detailed briefings and surveys.
Vendor Listings: The presentation lists numerous vendors across various pages, detailing their names and services. These vendors are ranked based on their participation and market presence.
Market Insights and Trends: Key insights include IT market forecasts, economic factors affecting IT budgets, and the impact of AI on enterprise IT. The study highlights the importance of AI integration and the concept of creative destruction.
Agentic AI and Future Predictions: Agentic AI is expected to transform human-agent collaboration, with AI systems understanding context and orchestrating complex processes. Future predictions include AI's role in shopping and enterprise IT.
nnual (33 years) study of the Israeli Enterprise / public IT market. Covering sections on Israeli Economy, IT trends 2026-28, several surveys (AI, CDOs, OCIO, CTO, staffing cyber, operations and infra) plus rankings of 760 vendors on 160 markets (market sizes and trends) and comparison of products according to support and market penetration.
Marko.js - Unsung Hero of Scalable Web Frameworks (DevDays 2025)Eugene Fidelin
Marko.js is an open-source JavaScript framework created by eBay back in 2014. It offers super-efficient server-side rendering, making it ideal for big e-commerce sites and other multi-page apps where speed and SEO really matter. After over 10 years of development, Marko has some standout features that make it an interesting choice. In this talk, I’ll dive into these unique features and showcase some of Marko's innovative solutions. You might not use Marko.js at your company, but there’s still a lot you can learn from it to bring to your next project.
Contributing to WordPress With & Without Code.pptxPatrick Lumumba
Contributing to WordPress: Making an Impact on the Test Team—With or Without Coding Skills
WordPress survives on collaboration, and the Test Team plays a very important role in ensuring the CMS is stable, user-friendly, and accessible to everyone.
This talk aims to deconstruct the myth that one has to be a developer to contribute to WordPress. In this session, I will share with the audience how to get involved with the WordPress Team, whether a coder or not.
We’ll explore practical ways to contribute, from testing new features, and patches, to reporting bugs. By the end of this talk, the audience will have the tools and confidence to make a meaningful impact on WordPress—no matter the skill set.
Grannie’s Journey to Using Healthcare AI ExperiencesLauren Parr
AI offers transformative potential to enhance our long-time persona Grannie’s life, from healthcare to social connection. This session explores how UX designers can address unmet needs through AI-driven solutions, ensuring intuitive interfaces that improve safety, well-being, and meaningful interactions without overwhelming users.
Protecting Your Sensitive Data with Microsoft Purview - IRMS 2025Nikki Chapple
Session | Protecting Your Sensitive Data with Microsoft Purview: Practical Information Protection and DLP Strategies
Presenter | Nikki Chapple (MVP| Principal Cloud Architect CloudWay) & Ryan John Murphy (Microsoft)
Event | IRMS Conference 2025
Format | Birmingham UK
Date | 18-20 May 2025
In this closing keynote session from the IRMS Conference 2025, Nikki Chapple and Ryan John Murphy deliver a compelling and practical guide to data protection, compliance, and information governance using Microsoft Purview. As organizations generate over 2 billion pieces of content daily in Microsoft 365, the need for robust data classification, sensitivity labeling, and Data Loss Prevention (DLP) has never been more urgent.
This session addresses the growing challenge of managing unstructured data, with 73% of sensitive content remaining undiscovered and unclassified. Using a mountaineering metaphor, the speakers introduce the “Secure by Default” blueprint—a four-phase maturity model designed to help organizations scale their data security journey with confidence, clarity, and control.
🔐 Key Topics and Microsoft 365 Security Features Covered:
Microsoft Purview Information Protection and DLP
Sensitivity labels, auto-labeling, and adaptive protection
Data discovery, classification, and content labeling
DLP for both labeled and unlabeled content
SharePoint Advanced Management for workspace governance
Microsoft 365 compliance center best practices
Real-world case study: reducing 42 sensitivity labels to 4 parent labels
Empowering users through training, change management, and adoption strategies
🧭 The Secure by Default Path – Microsoft Purview Maturity Model:
Foundational – Apply default sensitivity labels at content creation; train users to manage exceptions; implement DLP for labeled content.
Managed – Focus on crown jewel data; use client-side auto-labeling; apply DLP to unlabeled content; enable adaptive protection.
Optimized – Auto-label historical content; simulate and test policies; use advanced classifiers to identify sensitive data at scale.
Strategic – Conduct operational reviews; identify new labeling scenarios; implement workspace governance using SharePoint Advanced Management.
🎒 Top Takeaways for Information Management Professionals:
Start secure. Stay protected. Expand with purpose.
Simplify your sensitivity label taxonomy for better adoption.
Train your users—they are your first line of defense.
Don’t wait for perfection—start small and iterate fast.
Align your data protection strategy with business goals and regulatory requirements.
💡 Who Should Watch This Presentation?
This session is ideal for compliance officers, IT administrators, records managers, data protection officers (DPOs), security architects, and Microsoft 365 governance leads. Whether you're in the public sector, financial services, healthcare, or education.
🔗 Read the blog: https://nikkichapple.com/irms-conference-2025/
Cyber Security Legal Framework in Nepal.pptxGhimire B.R.
The presentation is about the review of existing legal framework on Cyber Security in Nepal. The strength and weakness highlights of the major acts and policies so far. Further it highlights the needs of data protection act .
Introducing the OSA 3200 SP and OSA 3250 ePRCAdtran
Adtran's latest Oscilloquartz solutions make optical pumping cesium timing more accessible than ever. Discover how the new OSA 3200 SP and OSA 3250 ePRC deliver superior stability, simplified deployment and lower total cost of ownership. Built on a shared platform and engineered for scalable, future-ready networks, these models are ideal for telecom, defense, metrology and more.
UiPath Community Berlin: Studio Tips & Tricks and UiPath InsightsUiPathCommunity
Join the UiPath Community Berlin (Virtual) meetup on May 27 to discover handy Studio Tips & Tricks and get introduced to UiPath Insights. Learn how to boost your development workflow, improve efficiency, and gain visibility into your automation performance.
📕 Agenda:
- Welcome & Introductions
- UiPath Studio Tips & Tricks for Efficient Development
- Best Practices for Workflow Design
- Introduction to UiPath Insights
- Creating Dashboards & Tracking KPIs (Demo)
- Q&A and Open Discussion
Perfect for developers, analysts, and automation enthusiasts!
This session streamed live on May 27, 18:00 CET.
Check out all our upcoming UiPath Community sessions at:
👉 https://community.uipath.com/events/
Join our UiPath Community Berlin chapter:
👉 https://community.uipath.com/berlin/
Dev Dives: System-to-system integration with UiPath API WorkflowsUiPathCommunity
Join the next Dev Dives webinar on May 29 for a first contact with UiPath API Workflows, a powerful tool purpose-fit for API integration and data manipulation!
This session will guide you through the technical aspects of automating communication between applications, systems and data sources using API workflows.
📕 We'll delve into:
- How this feature delivers API integration as a first-party concept of the UiPath Platform.
- How to design, implement, and debug API workflows to integrate with your existing systems seamlessly and securely.
- How to optimize your API integrations with runtime built for speed and scalability.
This session is ideal for developers looking to solve API integration use cases with the power of the UiPath Platform.
👨🏫 Speakers:
Gunter De Souter, Sr. Director, Product Manager @UiPath
Ramsay Grove, Product Manager @UiPath
This session streamed live on May 29, 2025, 16:00 CET.
Check out all our upcoming UiPath Dev Dives sessions:
👉 https://community.uipath.com/dev-dives-automation-developer-2025/
Agentic AI Explained: The Next Frontier of Autonomous Intelligence & Generati...Aaryan Kansari
Agentic AI Explained: The Next Frontier of Autonomous Intelligence & Generative AI
Discover Agentic AI, the revolutionary step beyond reactive generative AI. Learn how these autonomous systems can reason, plan, execute, and adapt to achieve human-defined goals, acting as digital co-workers. Explore its promise, key frameworks like LangChain and AutoGen, and the challenges in designing reliable and safe AI agents for future workflows.
Sticky Note Bullets:
Definition: Next stage beyond ChatGPT-like systems, offering true autonomy.
Core Function: Can "reason, plan, execute and adapt" independently.
Distinction: Proactive (sets own actions for goals) vs. Reactive (responds to prompts).
Promise: Acts as "digital co-workers," handling grunt work like research, drafting, bug fixing.
Industry Outlook: Seen as a game-changer; Deloitte predicts 50% of companies using GenAI will have agentic AI pilots by 2027.
Key Frameworks: LangChain, Microsoft's AutoGen, LangGraph, CrewAI.
Development Focus: Learning to think in workflows and goals, not just model outputs.
Challenges: Ensuring reliability, safety; agents can still hallucinate or go astray.
Best Practices: Start small, iterate, add memory, keep humans in the loop for final decisions.
Use Cases: Limited only by imagination (e.g., drafting business plans, complex simulations).
As data privacy regulations become more pervasive across the globe and organizations increasingly handle and transfer (including across borders) meaningful volumes of personal and confidential information, the need for robust contracts to be in place is more important than ever.
This webinar will provide a deep dive into privacy contracting, covering essential terms and concepts, negotiation strategies, and key practices for managing data privacy risks.
Whether you're in legal, privacy, security, compliance, GRC, procurement, or otherwise, this session will include actionable insights and practical strategies to help you enhance your agreements, reduce risk, and enable your business to move fast while protecting itself.
This webinar will review key aspects and considerations in privacy contracting, including:
- Data processing addenda, cross-border transfer terms including EU Model Clauses/Standard Contractual Clauses, etc.
- Certain legally-required provisions (as well as how to ensure compliance with those provisions)
- Negotiation tactics and common issues
- Recent lessons from recent regulatory actions and disputes
European Accessibility Act & Integrated Accessibility TestingJulia Undeutsch
Emma Dawson will guide you through two important topics in this session.
Firstly, she will prepare you for the European Accessibility Act (EAA), which comes into effect on 28 June 2025, and show you how development teams can prepare for it.
In the second part of the webinar, Emma Dawson will explore with you various integrated testing methods and tools that will help you improve accessibility during the development cycle, such as Linters, Storybook, Playwright, just to name a few.
Focus: European Accessibility Act, Integrated Testing tools and methods (e.g. Linters, Storybook, Playwright)
Target audience: Everyone, Developers, Testers
Create Your First AI Agent with UiPath Agent BuilderDianaGray10
Join us for an exciting virtual event where you'll learn how to create your first AI Agent using UiPath Agent Builder. This session will cover everything you need to know about what an agent is and how easy it is to create one using the powerful AI-driven UiPath platform. You'll also discover the steps to successfully publish your AI agent. This is a wonderful opportunity for beginners and enthusiasts to gain hands-on insights and kickstart their journey in AI-powered automation.
Create Your First AI Agent with UiPath Agent BuilderDianaGray10
Creating a Facebook Clone - Part XVII - Transcript.pdf
1. Creating a Facebook Clone - Part XVII
Brace yourselves a bit. Server programming isn't as "exciting" as client side code. It includes lots of boilerplate code and some complex concepts. Please bare with
me…
Facebooks backend server logic is remarkably complex, what I built took roughly a day of work. Maybe a bit longer with debugging. I cut a lot of corners to get this
working especially in the complex data driven aspects. Some features such as search will be discussed later.
20. @SpringBootApplication
public class FacebookCloneServerApplication {
public static void main(String[] args) {
SpringApplication.run(FacebookCloneServerApplication.class, args);
}
}
FacebookCloneServerApplication
My preferred place to start when working on server code is the database. I might start with the webservice if I have an API in mind but I usually pick the database as it's
easier to quantify.
But before we go there we need to add some boilerplate. Assuming you created your app with the initializer you would have this class. If you don't have it then you need
this class as it's the entry point for your application.
21. @Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity.authorizeRequests().antMatchers("/").permitAll();
httpSecurity.csrf().disable();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
FacebookCloneServerApplication
Next to it we can place the SecurityConfiguration class which handles basic security boilerplate as such.
Here we disable some security protections in Spring Boot. These make sense for browser clients but not so much for native mobile clients where we might need to jump
through hoops to get things working
22. @Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity.authorizeRequests().antMatchers("/").permitAll();
httpSecurity.csrf().disable();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
FacebookCloneServerApplication
This is the password encoder that we will use later to hash the user password
24. @Entity
@Indexed
public class User {
@Id
private String id;
@Field
private String firstName;
@Field
private String familyName;
@Column(unique=true)
private String email;
@Column(unique=true)
private String phone;
private String gender;
private String verificationCode;
private String verifiedEmailAddress;
private String verifiedPhone;
User
Now that we got that out of the way lets go to the code. You will notice that the User object in the server is very similar to the User object in the client. There are some
differences but essentially they correlate to one another. We'll start with the field declarations.
This is the Sting id as mentioned before, notice it lacks the auto-generate annotation you often see in JPA entities
25. @Entity
@Indexed
public class User {
@Id
private String id;
@Field
private String firstName;
@Field
private String familyName;
@Column(unique=true)
private String email;
@Column(unique=true)
private String phone;
private String gender;
private String verificationCode;
private String verifiedEmailAddress;
private String verifiedPhone;
User
Most of the other fields are simple persistent fields with the exception of email & phone where we demand uniqueness from the SQL database
26. private String familyName;
@Column(unique=true)
private String email;
@Column(unique=true)
private String phone;
private String gender;
private String verificationCode;
private String verifiedEmailAddress;
private String verifiedPhone;
@Temporal(TemporalType.DATE)
private Date birthday;
@ManyToOne
private Media avatar;
@ManyToMany
private Set<User> friends;
@ManyToMany
private Set<User> friendRequests;
@ManyToMany
User
To verify an email or phone we send out a code and store it here. If we had a memory DB such as redis or memcached we'd use that but it's not a big deal to use the
database for this at first.
A user might change his email or phone after the fact so we need to maintain a reference to the value we verified.
27. private String familyName;
@Column(unique=true)
private String email;
@Column(unique=true)
private String phone;
private String gender;
private String verificationCode;
private String verifiedEmailAddress;
private String verifiedPhone;
@Temporal(TemporalType.DATE)
private Date birthday;
@ManyToOne
private Media avatar;
@ManyToMany
private Set<User> friends;
@ManyToMany
private Set<User> friendRequests;
@ManyToMany
User
Since dates in Java are technically timestamps we need to explicitly state the SQL data we need here
28. private String familyName;
@Column(unique=true)
private String email;
@Column(unique=true)
private String phone;
private String gender;
private String verificationCode;
private String verifiedEmailAddress;
private String verifiedPhone;
@Temporal(TemporalType.DATE)
private Date birthday;
@ManyToOne
private Media avatar;
@ManyToMany
private Set<User> friends;
@ManyToMany
private Set<User> friendRequests;
@ManyToMany
User
We store Media files such as pictures in a separate Media entity, we'll discuss that entity soon
29. private Date birthday;
@ManyToOne
private Media avatar;
@ManyToMany
private Set<User> friends;
@ManyToMany
private Set<User> friendRequests;
@ManyToMany
private Set<User> peopleYouMayKnow;
private String password;
@Column(unique=true)
private String authtoken;
public User() {
id = UUID.randomUUID().toString();
}
public boolean isFriendById(String id) {
return friends != null &&
friends.stream().anyMatch(f -> f.getId().equals(id));
}
User
We have 3 relations to other users for friend, friend requests & people you may know
30. private Date birthday;
@ManyToOne
private Media avatar;
@ManyToMany
private Set<User> friends;
@ManyToMany
private Set<User> friendRequests;
@ManyToMany
private Set<User> peopleYouMayKnow;
private String password;
@Column(unique=true)
private String authtoken;
public User() {
id = UUID.randomUUID().toString();
}
public boolean isFriendById(String id) {
return friends != null &&
friends.stream().anyMatch(f -> f.getId().equals(id));
}
User
This field stores a hashed version of the password which is encrypted, it's never exposed to the user. Passwords in the database are hashed & salted. This is handled
automatically by Spring as we'll see soon enough.
Hashing is a form of encryption that only goes one way. E.g. if my password is xyz I can hash it and generate a value that looks completely random. I can't decrypt it ever
again. However, if I know the password is xyz I can verify it against the hash. Salting means random data is inserted into the hash to make it even harder to break the
hash.
31. private Date birthday;
@ManyToOne
private Media avatar;
@ManyToMany
private Set<User> friends;
@ManyToMany
private Set<User> friendRequests;
@ManyToMany
private Set<User> peopleYouMayKnow;
private String password;
@Column(unique=true)
private String authtoken;
public User() {
id = UUID.randomUUID().toString();
}
public boolean isFriendById(String id) {
return friends != null &&
friends.stream().anyMatch(f -> f.getId().equals(id));
}
User
The token is a special field that allows us to edit a user. We expose it only to the logged in user and he can use that token to edit the data.
We have a unique id for every user but we don't use it for write operations. Our ID is public knowledge so if a user needs to refer to my user object he'd use my unique id.
This is efficient and accurate since id's never change (they are primary keys).
When a user logs in we provide the token so only the user can update his own data. This means the password isn't stored on the device and a token can be updated/
revoked. It's also long enough and random enough which isn't always the case for passwords. Naturally tokens can't be primary keys... Since tokens might need
resetting in case of a vulnerability and primary keys are forever.
If I was super concerned about security to a paranoid level I'd encrypt the tokens in the database in the same way we encrypt the passwords. That would mean we
would need to give a different token to every device (since hashing is a one way street). Naturally that's a pain to handle so I avoided it here.
32. private Set<User> peopleYouMayKnow;
private String password;
@Column(unique=true)
private String authtoken;
public User() {
id = UUID.randomUUID().toString();
}
public boolean isFriendById(String id) {
return friends != null &&
friends.stream().anyMatch(f -> f.getId().equals(id));
}
public boolean isFriendByToken(String token) {
return friends != null &&
friends.stream().anyMatch(f->f.getAuthtoken().equals(token));
}
public String fullName() {
return firstName + " " + familyName;
}
private Long longBirthday() {
User
We initialize the primary key in the constructor, this will be overriden when loading from database but makes sure we have a unique ID when saving a new user
33. private Set<User> peopleYouMayKnow;
private String password;
@Column(unique=true)
private String authtoken;
public User() {
id = UUID.randomUUID().toString();
}
public boolean isFriendById(String id) {
return friends != null &&
friends.stream().anyMatch(f -> f.getId().equals(id));
}
public boolean isFriendByToken(String token) {
return friends != null &&
friends.stream().anyMatch(f->f.getAuthtoken().equals(token));
}
public String fullName() {
return firstName + " " + familyName;
}
private Long longBirthday() {
User
These methods check the list of friends to see if a person with the given id or token is in our friend list, we'll use it later.
Codename One on the client doesn't support Java 8 streams at this time. They help writing some complex ideas a bit more concisely but we find them hard to compile to
efficient code for iOS. On the server this isn't a problem.
34. friends.stream().anyMatch(f -> f.getId().equals(id));
}
public boolean isFriendByToken(String token) {
return friends != null &&
friends.stream().anyMatch(f->f.getAuthtoken().equals(token));
}
public String fullName() {
return firstName + " " + familyName;
}
private Long longBirthday() {
return (birthday == null) ? null : birthday.getTime();
}
static List<UserDAO> toUserDAOList(Set<User> s) {
if(s != null) {
List<UserDAO> r = new ArrayList<>();
s.stream().forEach(f -> r.add(f.getDAO()));
return r;
}
return null;
}
public UserDAO getDAO() {
User
s.stream().forEach(f -> r.add(f.getDAO()));
for(User f : s)
r.add(f.getDAO());
Here we have another case of a stream with a forEach method.
This is pretty easy to explain with the block above, the stream code is roughly identical to the standard Java for loop. This method handles conversion of lists of users to
list of UserDAO. This is a common practice as we get a lot of those.
35. friends.stream().anyMatch(f -> f.getId().equals(id));
}
public boolean isFriendByToken(String token) {
return friends != null &&
friends.stream().anyMatch(f->f.getAuthtoken().equals(token));
}
public String fullName() {
return firstName + " " + familyName;
}
private Long longBirthday() {
return (birthday == null) ? null : birthday.getTime();
}
static List<UserDAO> toUserDAOList(Set<User> s) {
if(s != null) {
List<UserDAO> r = new ArrayList<>();
s.stream().forEach(f -> r.add(f.getDAO()));
return r;
}
return null;
}
public UserDAO getDAO() {
User
We'll use the full name a lot in the code so it makes sense to have this as a helper method
36. friends.stream().anyMatch(f -> f.getId().equals(id));
}
public boolean isFriendByToken(String token) {
return friends != null &&
friends.stream().anyMatch(f->f.getAuthtoken().equals(token));
}
public String fullName() {
return firstName + " " + familyName;
}
private Long longBirthday() {
return (birthday == null) ? null : birthday.getTime();
}
static List<UserDAO> toUserDAOList(Set<User> s) {
if(s != null) {
List<UserDAO> r = new ArrayList<>();
s.stream().forEach(f -> r.add(f.getDAO()));
return r;
}
return null;
}
public UserDAO getDAO() {
User
The birthday can be null so we need to check before converting to a long value
37. return r;
}
return null;
}
public UserDAO getDAO() {
return new UserDAO(id, firstName, familyName, email, phone, gender,
longBirthday(), avatar == null ? null : avatar.getId());
}
public UserDAO getLoginDAO() {
UserDAO u = getDAO();
u.setAuthtoken(authtoken);
u.setFriends(toUserDAOList(friends));
u.setFriendRequests(toUserDAOList(friendRequests));
u.setPeopleYouMayKnow(toUserDAOList(peopleYouMayKnow));
return u;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getFirstName() {
User
Here we create a DAO object matching this user. I’ll discuss the DAO in more detail soon but as you recall from before we use it to transfer data to the client.
Notice that no private information is passed when the DAO is created, not even the friend list! No password, token etc.
38. return r;
}
return null;
}
public UserDAO getDAO() {
return new UserDAO(id, firstName, familyName, email, phone, gender,
longBirthday(), avatar == null ? null : avatar.getId());
}
public UserDAO getLoginDAO() {
UserDAO u = getDAO();
u.setAuthtoken(authtoken);
u.setFriends(toUserDAOList(friends));
u.setFriendRequests(toUserDAOList(friendRequests));
u.setPeopleYouMayKnow(toUserDAOList(peopleYouMayKnow));
return u;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getFirstName() {
User
We pass the auth token here (but not the password) this method is invoked when a user logs in and returns to the user his own data
39. this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getFamilyName() {
return familyName;
}
public void setFamilyName(String familyName) {
this.familyName = familyName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
User
Looking over the rest of the code you will notice
40. }
public void setPhone(String phone) {
this.phone = phone;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Media getAvatar() {
return avatar;
}
public void setAvatar(Media avatar) {
this.avatar = avatar;
}
public Set<User> getFriends() {
return friends;
}
User
That the rest is just a lot of boilerplate setters & getters
41. }
public Set<User> getFriends() {
return friends;
}
public void setFriends(Set<User> friends) {
this.friends = friends;
}
public Set<User> getFriendRequests() {
return friendRequests;
}
public void setFriendRequests(Set<User> friendRequests) {
this.friendRequests = friendRequests;
}
public Set<User> getPeopleYouMayKnow() {
return peopleYouMayKnow;
}
public void setPeopleYouMayKnow(Set<User> peopleYouMayKnow) {
this.peopleYouMayKnow = peopleYouMayKnow;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAuthtoken() {
User
There is nothing interesting here
42. public void setPassword(String password) {
this.password = password;
}
public String getAuthtoken() {
return authtoken;
}
public void setAuthtoken(String authtoken) {
this.authtoken = authtoken;
}
public String getVerificationCode() {
return verificationCode;
}
public void setVerificationCode(String verificationCode) {
this.verificationCode = verificationCode;
}
public String getVerifiedEmailAddress() {
return verifiedEmailAddress;
}
public void setVerifiedEmailAddress(String verifiedEmailAddress) {
this.verifiedEmailAddress = verifiedEmailAddress;
}
public String getVerifiedPhone() {
return verifiedPhone;
}
public void setVerifiedPhone(String verifiedPhone) {
User
But we need this for JPA to function properly
43. return authtoken;
}
public void setAuthtoken(String authtoken) {
this.authtoken = authtoken;
}
public String getVerificationCode() {
return verificationCode;
}
public void setVerificationCode(String verificationCode) {
this.verificationCode = verificationCode;
}
public String getVerifiedEmailAddress() {
return verifiedEmailAddress;
}
public void setVerifiedEmailAddress(String verifiedEmailAddress) {
this.verifiedEmailAddress = verifiedEmailAddress;
}
public String getVerifiedPhone() {
return verifiedPhone;
}
public void setVerifiedPhone(String verifiedPhone) {
this.verifiedPhone = verifiedPhone;
}
}
User
These setters and getters are made through IDE refactoring so I didn't write them.
44. public class UserDAO {
private String id;
private String firstName;
private String familyName;
private String email;
private String phone;
private String gender;
private Long birthday;
private String avatar;
private List<UserDAO> friends;
private List<UserDAO> friendRequests;
private List<UserDAO> peopleYouMayKnow;
private String password;
private String authtoken;
public UserDAO() {
}
public UserDAO(String id, String firstName, String familyName,
String email, String phone, String gender,
Long birthday, String avatar) {
this.id = id;
this.firstName = firstName;
this.familyName = familyName;
UserDAO
Before we move to the methods I'd like to discuss the concept of a DAO. DAO stands for Data Access Object. This is a conceptual idea, there is no DAO API or
requirement. You can skip it entirely!
However, it's a very common "best practice" when working with backend systems. E.g. in our application we have 3 layers:
* WebServices - the user facing code
* Service - the backend logic
* Entities/JPA - the database
The roles are clearly separate, that's important as it means we can replace or change one layer significantly without impacting the others. E.g. we can move to
websockets replacing the WebServices layer or we can move to a NoSQL DB and throw away the entity layer.
So how do we transfer data between the layers while keeping them logically separate?
Enter the DAO objects, they aren't entities. Entities are too close to the data and are hard to modify. DAO's are in place simply to pass along the data. The cool part about
DAO's is that Spring Boot can automatically convert them to JSON when sending a response from the webservice and automatically create a new instance from JSON
when receiving a call. We could just pass the entity itself but that would break the separation of layers and might inadvertently expose private data to the client side!
So for the User object we have a similar UserDAO equivalent.
The fields are almost identical to the fields of the User object
45. public class UserDAO {
private String id;
private String firstName;
private String familyName;
private String email;
private String phone;
private String gender;
private Long birthday;
private String avatar;
private List<UserDAO> friends;
private List<UserDAO> friendRequests;
private List<UserDAO> peopleYouMayKnow;
private String password;
private String authtoken;
public UserDAO() {
}
public UserDAO(String id, String firstName, String familyName,
String email, String phone, String gender,
Long birthday, String avatar) {
this.id = id;
this.firstName = firstName;
this.familyName = familyName;
UserDAO
You will notice that even the relations are DAO objects
46. public class UserDAO {
private String id;
private String firstName;
private String familyName;
private String email;
private String phone;
private String gender;
private Long birthday;
private String avatar;
private List<UserDAO> friends;
private List<UserDAO> friendRequests;
private List<UserDAO> peopleYouMayKnow;
private String password;
private String authtoken;
public UserDAO() {
}
public UserDAO(String id, String firstName, String familyName,
String email, String phone, String gender,
Long birthday, String avatar) {
this.id = id;
this.firstName = firstName;
this.familyName = familyName;
UserDAO
Notice that the class includes private data such as password and auth!
As you might recall from the User object we never pass the password into the DAO and it’s hashed anyway. So why do we need the password in the DAO?
When the user is created or updated the password value can be set. The DAO is sent from the client side too and that value may come from there.
The token is returned in the DAO once after login or create.
47. private List<UserDAO> friendRequests;
private List<UserDAO> peopleYouMayKnow;
private String password;
private String authtoken;
public UserDAO() {
}
public UserDAO(String id, String firstName, String familyName,
String email, String phone, String gender,
Long birthday, String avatar) {
this.id = id;
this.firstName = firstName;
this.familyName = familyName;
this.email = email;
this.phone = phone;
this.gender = gender;
this.birthday = birthday;
this.avatar = avatar;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getFirstName() {
UserDAO
The DAO must include a no-arg constructor so it can be instantiated by Spring Boot. We also have a convenience constructor for our use.
48. public List<UserDAO> getFriendRequests() {
return friendRequests;
}
public void setFriendRequests(List<UserDAO> friendRequests) {
this.friendRequests = friendRequests;
}
public List<UserDAO> getPeopleYouMayKnow() {
return peopleYouMayKnow;
}
public void setPeopleYouMayKnow(List<UserDAO> peopleYouMayKnow) {
this.peopleYouMayKnow = peopleYouMayKnow;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAuthtoken() {
return authtoken;
}
public void setAuthtoken(String authtoken) {
this.authtoken = authtoken;
}
}
UserDAO
The rest of the code is all automatically generated getters and setters…
49. public interface UserRepository extends CrudRepository<User, String> {
public List<User> findByPhone(String phone);
public List<User> findByEmailIgnoreCase(String email);
public List<User> findByAuthtoken(String authtoken);
}
UserRepository
The one last missing piece for the User object is the UserRepository interface which allows us to query the user objects.
The implementation for these queries is generated automatically by Spring Boot based on the names of the JPA fields
50. public interface UserRepository extends CrudRepository<User, String> {
public List<User> findByPhone(String phone);
public List<User> findByEmailIgnoreCase(String email);
public List<User> findByAuthtoken(String authtoken);
}
UserRepository
IgnoreCase is a special keyword for Spring which works exactly as one would think.
With that we have the first entity in the data area and a basic Spring Boot server.