The XPages Jakarta EE Support project on OpenNTF adds an array of modern capabilities to NSF-based Java development. These improvements can be used for wholly-new applications or added incrementally to existing ones.
In this webinar Jesse Gallagher will demonstrate how to use this project to perform common tasks in better ways, such as creating and consuming REST services, writing managed beans with CDI, and using new EL features in XPages. Though these examples will largely use Java, they do not require any knowledge of OSGi or extension library development, nor any tools other than Designer.
Overview of Java EE 6 by Roberto Chinnici at SFJUGMarakana Inc.
Roberto Chinnici, Java EE 6 spec lead, gives an overview of Java EE 6 for San Francisco Java User Group on August 10th, 2010.
http://www.sfjava.org/calendar/13940755/
Jakarta EE is now over 20 years old and despite its age, it is as relevant today as it was back in 1999. It is one of the few open standards for developing enterprise applications with multiple independent vendor implementations. Its APIs are central to developing Java based cloud solutions. It is as relevant today as it was back in 1999. This presentation will provide context to Jakarta EE and why businesses choose to use it.
Overview of Java EE 6 by Roberto Chinnici at SFJUGMarakana Inc.
Roberto Chinnici, Java EE 6 spec lead, gives an overview of Java EE 6 for San Francisco Java User Group on August 10th, 2010.
http://www.sfjava.org/calendar/13940755/
Jakarta EE is now over 20 years old and despite its age, it is as relevant today as it was back in 1999. It is one of the few open standards for developing enterprise applications with multiple independent vendor implementations. Its APIs are central to developing Java based cloud solutions. It is as relevant today as it was back in 1999. This presentation will provide context to Jakarta EE and why businesses choose to use it.
Beyond Fluffy Bunny. How I leveraged WebObjects in my lean startup.WO Community
This session will go over why I chose WO and WOnder as my application foundation, and how I applied the best practices from some of the best in our business to build my product. How I setup my applications and frameworks to maximize reuse and flexibility. And I will review other processes that allows me to run my business as a one plus (?) person shop.
Intro to node.js - Ran Mizrahi (27/8/2014)Ran Mizrahi
Node.js is a platform built on Chrome V8 javascript runtime engine for building fast and scalable, non-blocking, real-time and network applications. In this session Ran will introduce node.js and how to develop large code bases using it. He'll cover the following aspects:
• What is node.js?
• Apache vs. Nginx performance (One thread per connection vs. event loop) and what it has to do with node.js.
• Why node was written in Javascript?
• Main tools and frameworks (Express, socket.io, mongoose etc.)
• TDD/BDD with node.js using mocha and Chai.
Ran Mizrahi, Founder of CoCycles, Passionate entrepreneur and software engineer who loves to continuously innovate and deliver meaningful products while having true fun with the right team.
Java EE 8 Overview (Sept 2015). A lot of work is already done by the Expert Groups so lets have a brief look for what we can expect in the some areas.
- Servlet 4 will embrace the new HTTP/2 protocol.
- JSON-B will bring the same high level features of JAXB to the JSON data format.
- Server-Sent Events(SSE) is the WebSocket variant where you only send data from the server to the client.
- MVC will be the Action based MVC complement of the Component based MVC of JSF.
- Some major restructuring of CDI so that we can use it standardised in Java SE to mention one thing.
The Java EE security API will be covered in more detail. Security related things became old and dusty and needs to move away from proprietary configuration to be able to make the transition to the cloud. An introduction to JSR 375 is given, which promotes self-contained application portability across Java EE servers, and promotes the use of modern programming concepts such as Expression Language, and CDI. It will holistically attempt to simplify, standardize, and modernize the Security API across the platform in areas identified by the community.
JavaScript and jQuery for SharePoint DevelopersRob Windsor
If you’re a SharePoint developer you either are doing JavaScript development now or you will be doing JavaScript development in the near future. There has been an increased focus on client-side development with each of the recent versions of SharePoint and now, with the introduction of the SharePoint 2013 App model, understanding client-side development is a must. In this session, we`ll look at JavaScript development from a SharePoint perspective. In addition to effective use of JavaScript and jQuery in your applications, we`ll look where you can deploy JavaScript files and how to reference those files in your pages and web parts.
Unlocking the power of the APEX Plugin ArchitectureMatt Nolan
Slides from AUSOUG Webinar 24-Aug-2017. Sorry most of the good stuff was in the Live demos.
Abstract: Get an in depth look into the APEX plugin architecture focusing on region plugins and dynamic actions. In this session you’ll learn about some of the techniques used for developing plugin interoperability and explore the best practices when in comes to designing plugins. We’ll focus on how you can communicate between plugins, increase code centralization, decrease maintenance and plug the functionality gaps in your APEX application.
Scalable server component using NodeJS & ExpressJSAndhy Koesnandar
Talk that Andhy Koesnandar and Oby Sumampouw gave at Jakarta JS 12-15-2014
Title: Scalable server component using NodeJS & ExpressJS
Description: Today is a wonderful time to be a JS developer. JS is the lingua franca in the web browser, apps and now server. I am going to talk about How JS developers can build server scalable component using NodeJS + ExpressJS .
About Cermati:
Cermati is a financial comparison site in Indonesia. We compare credit cards and promotions
What’s new in Java SE, EE, ME, Embedded world & new StrategyMohamed Taman
In this presentation, I have presented the history of Java EE from v1.0 to our latest Java EE 7.0, what is new and a brief introduction to each minor and major change to existing JSRs, and new JSRs with code to show simplifications and enhancements.
Also talked about our future Java EE 8 components alongside JDK 8 with major updates and JSRs, profiling concepts and more.
In addition, I have explained the IoT concepts with demo. Intro to the importance of Java Embedded systems world. With intro to Raspberry Pi and dukePad.
Agenda:
http://egjug.org/page/java_ee_7_8_and_beyond
Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...J V
Alfresco Summit 2014 (London)
Though best practice is to leverage Alfresco through the well defined API's, it can be useful to understand the internals of the repository so that your development efforts are the most effective. A deep understanding of the repository will help you to evaluate performance bottlenecks, look for bugs, or make contributions. This session provides an overview of the repository internals, including the major components, the key services, subsystems, and database. We then provide an example where we leverage the repository in a micro-service architecture while building Alfresco's future cloud products and show how the different parts of the repository interact to fulfill requests.
http://summit.alfresco.com/london/sessions/diving-deep-alfresco-repository
https://www.youtube.com/watch?v=TAE9UjC0xxc
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...Jesse Gallagher
Though Domino makes working with build servers and CI/CD pipelines difficult, it is possible to do so even with complex applications. This session will discuss the specifics of using several OpenNTF projects - NSF ODP Tooling, the Jakarta XPages Runtime, and XPages Jakarta EE Support - as well as open-source technologies such as Docker to build, test, and deploy Java-based Domino applications for testing and staging. This builds on previous sessions about the NSF ODP Tooling and Maven generally.
Beyond Fluffy Bunny. How I leveraged WebObjects in my lean startup.WO Community
This session will go over why I chose WO and WOnder as my application foundation, and how I applied the best practices from some of the best in our business to build my product. How I setup my applications and frameworks to maximize reuse and flexibility. And I will review other processes that allows me to run my business as a one plus (?) person shop.
Intro to node.js - Ran Mizrahi (27/8/2014)Ran Mizrahi
Node.js is a platform built on Chrome V8 javascript runtime engine for building fast and scalable, non-blocking, real-time and network applications. In this session Ran will introduce node.js and how to develop large code bases using it. He'll cover the following aspects:
• What is node.js?
• Apache vs. Nginx performance (One thread per connection vs. event loop) and what it has to do with node.js.
• Why node was written in Javascript?
• Main tools and frameworks (Express, socket.io, mongoose etc.)
• TDD/BDD with node.js using mocha and Chai.
Ran Mizrahi, Founder of CoCycles, Passionate entrepreneur and software engineer who loves to continuously innovate and deliver meaningful products while having true fun with the right team.
Java EE 8 Overview (Sept 2015). A lot of work is already done by the Expert Groups so lets have a brief look for what we can expect in the some areas.
- Servlet 4 will embrace the new HTTP/2 protocol.
- JSON-B will bring the same high level features of JAXB to the JSON data format.
- Server-Sent Events(SSE) is the WebSocket variant where you only send data from the server to the client.
- MVC will be the Action based MVC complement of the Component based MVC of JSF.
- Some major restructuring of CDI so that we can use it standardised in Java SE to mention one thing.
The Java EE security API will be covered in more detail. Security related things became old and dusty and needs to move away from proprietary configuration to be able to make the transition to the cloud. An introduction to JSR 375 is given, which promotes self-contained application portability across Java EE servers, and promotes the use of modern programming concepts such as Expression Language, and CDI. It will holistically attempt to simplify, standardize, and modernize the Security API across the platform in areas identified by the community.
JavaScript and jQuery for SharePoint DevelopersRob Windsor
If you’re a SharePoint developer you either are doing JavaScript development now or you will be doing JavaScript development in the near future. There has been an increased focus on client-side development with each of the recent versions of SharePoint and now, with the introduction of the SharePoint 2013 App model, understanding client-side development is a must. In this session, we`ll look at JavaScript development from a SharePoint perspective. In addition to effective use of JavaScript and jQuery in your applications, we`ll look where you can deploy JavaScript files and how to reference those files in your pages and web parts.
Unlocking the power of the APEX Plugin ArchitectureMatt Nolan
Slides from AUSOUG Webinar 24-Aug-2017. Sorry most of the good stuff was in the Live demos.
Abstract: Get an in depth look into the APEX plugin architecture focusing on region plugins and dynamic actions. In this session you’ll learn about some of the techniques used for developing plugin interoperability and explore the best practices when in comes to designing plugins. We’ll focus on how you can communicate between plugins, increase code centralization, decrease maintenance and plug the functionality gaps in your APEX application.
Scalable server component using NodeJS & ExpressJSAndhy Koesnandar
Talk that Andhy Koesnandar and Oby Sumampouw gave at Jakarta JS 12-15-2014
Title: Scalable server component using NodeJS & ExpressJS
Description: Today is a wonderful time to be a JS developer. JS is the lingua franca in the web browser, apps and now server. I am going to talk about How JS developers can build server scalable component using NodeJS + ExpressJS .
About Cermati:
Cermati is a financial comparison site in Indonesia. We compare credit cards and promotions
What’s new in Java SE, EE, ME, Embedded world & new StrategyMohamed Taman
In this presentation, I have presented the history of Java EE from v1.0 to our latest Java EE 7.0, what is new and a brief introduction to each minor and major change to existing JSRs, and new JSRs with code to show simplifications and enhancements.
Also talked about our future Java EE 8 components alongside JDK 8 with major updates and JSRs, profiling concepts and more.
In addition, I have explained the IoT concepts with demo. Intro to the importance of Java Embedded systems world. With intro to Raspberry Pi and dukePad.
Agenda:
http://egjug.org/page/java_ee_7_8_and_beyond
Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...J V
Alfresco Summit 2014 (London)
Though best practice is to leverage Alfresco through the well defined API's, it can be useful to understand the internals of the repository so that your development efforts are the most effective. A deep understanding of the repository will help you to evaluate performance bottlenecks, look for bugs, or make contributions. This session provides an overview of the repository internals, including the major components, the key services, subsystems, and database. We then provide an example where we leverage the repository in a micro-service architecture while building Alfresco's future cloud products and show how the different parts of the repository interact to fulfill requests.
http://summit.alfresco.com/london/sessions/diving-deep-alfresco-repository
https://www.youtube.com/watch?v=TAE9UjC0xxc
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...Jesse Gallagher
Though Domino makes working with build servers and CI/CD pipelines difficult, it is possible to do so even with complex applications. This session will discuss the specifics of using several OpenNTF projects - NSF ODP Tooling, the Jakarta XPages Runtime, and XPages Jakarta EE Support - as well as open-source technologies such as Docker to build, test, and deploy Java-based Domino applications for testing and staging. This builds on previous sessions about the NSF ODP Tooling and Maven generally.
Domino applications, stored in NSFs, have been historically difficult to add to Continuous Integration tools like Jenkins and to have participate in Continous Delivery workflows. This session will discuss the NSF ODP Tooling project on OpenNTF, which allows you to take Domino-based projects - whether targetting the Notes client or web, XPages or not - and integrate them with modern tooling and flows. It will demonstrate use with projects ranging from a single NSF to a suite of a dozen OSGi plguins and two dozen NSFs, showing how they can be built and packaged automatically and consistently.
AD106: Expand Your Apps And Skills To The Wider World. This was a discussion of where we've been as Domino developers and how we can move on from here.
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Neuro-symbolic is not enough, we need neuro-*semantic*Frank van Harmelen
Neuro-symbolic (NeSy) AI is on the rise. However, simply machine learning on just any symbolic structure is not sufficient to really harvest the gains of NeSy. These will only be gained when the symbolic structures have an actual semantics. I give an operational definition of semantics as “predictable inference”.
All of this illustrated with link prediction over knowledge graphs, but the argument is general.
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualityInflectra
In this insightful webinar, Inflectra explores how artificial intelligence (AI) is transforming software development and testing. Discover how AI-powered tools are revolutionizing every stage of the software development lifecycle (SDLC), from design and prototyping to testing, deployment, and monitoring.
Learn about:
• The Future of Testing: How AI is shifting testing towards verification, analysis, and higher-level skills, while reducing repetitive tasks.
• Test Automation: How AI-powered test case generation, optimization, and self-healing tests are making testing more efficient and effective.
• Visual Testing: Explore the emerging capabilities of AI in visual testing and how it's set to revolutionize UI verification.
• Inflectra's AI Solutions: See demonstrations of Inflectra's cutting-edge AI tools like the ChatGPT plugin and Azure Open AI platform, designed to streamline your testing process.
Whether you're a developer, tester, or QA professional, this webinar will give you valuable insights into how AI is shaping the future of software delivery.
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Ramesh Iyer
In today's fast-changing business world, Companies that adapt and embrace new ideas often need help to keep up with the competition. However, fostering a culture of innovation takes much work. It takes vision, leadership and willingness to take risks in the right proportion. Sachin Dev Duggal, co-founder of Builder.ai, has perfected the art of this balance, creating a company culture where creativity and growth are nurtured at each stage.
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on the notifications, alerts, and approval requests using Slack for Bonterra Impact Management. The solutions covered in this webinar can also be deployed for Microsoft Teams.
Interested in deploying notification automations for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
3. AGENDA
• What are Jakarta EE and MicroProfile?
• What is the XPages Jakarta EE Support project?
• Components:
• Expression Language
• Managed Beans (CDI)
• Data access
• Producing REST Services
• Consuming REST Services
• User Interface Options
4. PREREQUISITES
• Comfort with (or willingness to learn) Java
• Familiarity with annotations and Java 8 constructs (Optional, etc.) a plus
• Ability to install plugins into Designer and Domino
YOU DO NOT NEED:
• Knowledge of OSGi
• To start a new app from scratch
6. WHAT IS JAKARTA EE?
• The current form of Java EE
• Originally run by Sun, then Oracle, and
now the Eclipse Foundation
• Now fully open-source
• Releases 8 and 9 focused on open-
sourcing and moving to jakarta.*
• Jakarta EE 10, releasing this month,
makes new spec changes and moves
to Java 11
• https://jakarta.ee
7. WHAT IS MICROPROFILE?
• Eclipse project started during JEE's
stagnation
• Now serves as a sort of focused
incubator
• Targeted for microservice
architectures, but most tools are
useful generally
• https://microprofile.io/
8. THE STANDARDS AND THIS PROJECT
• Jakarta EE and MicroProfile are normally deployed in a server like GlassFish or Liberty as
.war or .ear files
• They're not needed here: Domino is our server and NSFs are our packages
• This project implements a large subset of both, but not all of either
• Some specs - like Authentication - are largely inapplicable on Domino
• Some - like EJB - are on the way out
• Some - like WebSocket - face technical limitations
• Some I just haven't gotten around to yet
10. XPAGES JAKARTA EE SUPPORT
• Began as adding a few utility specs: CDI for managed beans and JAX-RS for REST
• Grown to encompass a ton of specs, such as JSON-B, JSP, and Jakarta NoSQL
• It further expanded to include a selection of MicroProfile specs useful for Domino
• Primarily focuses on in-NSF development in Designer
• Has some support for OSGi-based apps, but that takes extra knowledge
11. USAGE
• Download from OpenNTF
• Install the plugins in Designer and the
server
• Enable the libraries in the "Xsp
Properties" editor
• There's a ton - this will likely be
simplified in 3.x
• Get to coding! (in Java, mostly)
12. EXAMPLES
• Almost all code in this presentation is from the in-development OpenNTF home DB
• It's not publicly available yet, but I'll aim to make it so
• The XPages JEE project contains a DB in eclipse/nsfs/nsf-example, though it's a bit
packed
• (It doubles as the DB for the integration-test suite)
• Fortunately, most examples online of each spec should work - JAX-RS here is the
same JAX-RS as on Stack Overflow
14. EXPRESSION LANGUAGE
• Our old friend!
• The current spec grew out of what started in JSF (as in XPages)
• Existing EL expressions will still work, including SSJS
• This EL interpreter is stricter about nulls, which is actually useful
• No configuration necessary: enable the library and it will take over
15. WHAT YOU GET
• All the same stuff as before!
• #{foo.bar}, #{foo[bar]}, etc.
• Function calls
• ${el:messages.format('helloMessage', session.effectiveUserName)}
• The "el:" prefix avoids an error marker in Designer
• String concatenation
• ${'hi ' += session.effectiveUserName += '; good to see you!'}
19. MANAGED BEANS
• The spec covering managed beans is CDI: Components & Dependency Injection
• You don't have to care about why it's called that
• You also don't have to care about EJB (don't ask if you don't know)
• Uses annotations instead of XML configuration (for our needs)
• Cooperates with EL and general XPages variable resolution
• You can (and should) replace beans in faces-config.xml entirely
20. EXAMPLE BEAN
@ApplicationScoped
@Named("markdown")
public class MarkdownBean {
private Parser markdown = Parser.builder().build();
private HtmlRenderer markdownHtml = HtmlRenderer.builder()
.build();
public String toHtml(final String text) {
Node parsed = markdown.parse(text);
return markdownHtml.render(parsed);
}
}
21. EXAMPLE BEAN - INJECTION
@RequestScoped
@Named("encoder")
public class EncoderBean {
@Inject @Named("dominoSession")
private Session session;
public String abbreviateName(String name) throws NotesException {
Name dominoName = session.createName(name);
try {
return dominoName.getAbbreviated();
} finally {
dominoName.recycle();
}
}
}
22. EXAMPLE BEAN - EVENTS AND SCOPES
@RequestScoped
@Named("requestGuy")
public class RequestGuy {
@Inject
private ApplicationGuy applicationGuy;
private final long time = System.currentTimeMillis();
public String getMessage() {
return "I'm request guy at " + time + ", using applicationGuy: " + applicationGuy.getMessage();
}
@PostConstruct
public void postConstruct() { System.out.println("Created requestGuy!"); }
@PreDestroy
public void preDestroy() { System.out.println("Destroying requestGuy!"); }
}
23. CDI BEYOND BEANS
• Managed beans are the "basic" case for CDI and most of what we'll use
• It goes beyond that, providing foundational layers for other techs:
• JAX-RS
• MVC
• Jakarta NoSQL
• Pretty much all of MicroProfile
• Things get... weird when you dive in, but normal apps don't need that
26. JAX-RS
• JAX-RS, officially "Jakarta RESTful Web Services" or "Jakarta REST", is a long-
standing framework for REST services
• Primarily serves JSON, but can work with anything
• Domino ships with an ancient implementation - Wink - that powers DAS in the ExtLib
• JAX-RS focuses on using annotations and implicit conversion to keep code clean and
meaningful
27. JAX-RS EXAMPLE
@Path("/config")
public class ApplicationConfigResource {
// CDI managed bean
@Inject
ApplicationConfig config;
@GET
@Produces(MediaType.APPLICATION_JSON)
public ApplicationConfig get() {
// The @Produces above causes automatic
// JSON conversion
return config;
}
}
curl http://server.com/foo.nsf/xsp/app/config | jq
28. JAX-RS EXAMPLE - POSTING FORMS
// Takes a standard HTML form format and returns JSON
// URL like "/foo.nsf/xsp/app/people/create"
@Path("create")
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public Person createPerson(
@FormParam("firstName") @NotEmpty String firstName,
@FormParam("lastName") String lastName
) {
Person person = new Person();
person.setFirstName(firstName);
person.setLastName(lastName);
return personRepository.save(person);
}
29. JAX-RS EXAMPLE - POSTING JSON
// Consumes and returns JSON, validating the object on input
// URL like "/foo.nsf/xsp/app/people/some-person-id"
@Path("{id}")
@PUT
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Person createJson(@PathParam("id") String id, @Valid Person person) {
person.setUnid(id);
return personRepository.save(person, true);
}
32. MICROPROFILE REST CLIENT
• Uses JAX-RS annotations to make it easy to access remote services
• Pairs with JSON-B to translate between remote JSON and local Java classes
• Tools like https://openapi-generator.tech/ can generate bindings for it automatically
• (These may need translation from javax.* to jakarta.*)
36. JAKARTA NOSQL
• Jakarta NoSQL is a beta specification not yet officially included in JEE releases
• It's meant to be similar to JPA, but suited to various kinds of NoSQL databases
• Thanks to DQL, Domino is now a practical data source for it
• Provides standard behavior for databases, but encourages per-DB customization
• The Domino driver is extended with support for item flags, views, etc.
• https://jakarta.ee/specifications/nosql/1.0/
• https://www.baeldung.com/eclipse-jnosql
37. ENTITY OBJECTS
@Entity("Project") // Maps to Form value
public class Project {
@RepositoryProvider("projectsRepository") // Pull from a different NSF
public interface Repository extends DominoRepository<Project, String> {
// Auto-synthesized query based on method name
Optional<Project> findByProjectName(String projectName);
}
@Id
private String id;
@Column("ProjectName")
private String name;
@Column("ProjectOverview")
private String overview;
@Column("Details")
@ItemStorage(type=ItemStorage.Type.MIME) // Domino-specific extension
private String details;
@Column("DownloadsProject")
private int downloads;
@Column("MasterChef")
private List<String> chefs;
@Column("Entry_Date")
private OffsetDateTime created;
// Getters and setters
}
38. USING A REPOSITORY
@Inject
Project.Repository projectRepository;
@Path("{projectName}")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Project getProject(@PathParam("projectName") String projectName) {
String key = projectName.replace('+', ' ');
// java.util.Optional includes .orElseThrow(...), perfect for this case.
// Throwing NotFoundException leads to a 404
Project project = projectRepository.findByProjectName(key)
.orElseThrow(() -> new NotFoundException("Unable to find project for name: " + key));
return project;
}
39. USING REPOSITORIES
• By default, JNoSQL repositories have a few methods for CRUD operations
• DominoRepository adds a few more, such as methods to add/remove from folders and
options to call computeWithForm on save
• The Domino driver also includes a number of extensions for reading from views
41. OPTION 1: XPAGES
• XPages works as well as ever in an NSF using these libraries
• Applicable specs work here: Expression Language, CDI beans, MP REST Client, etc.
• Other than EL improvements, the act of writing XSP markup is the same, with the
same components and capabilities
• XPages can work alongside JAX-RS and the other UI technologies without issue
• JAX-RS can be a bit more pleasant than the ExtLib components
42. OPTION 2: REST + CLIENT JS
• You can write all of your server logic in JAX-RS
• Use React, Angular, vanilla JS, etc.
• Heck, use C if you want to
• The app could live outside of the NSF or inside as design elements
• (Try the NSF ODP Tooling project for automated-build options!)
• Inside an NSF, you can enforce access with an ACL and share the login with pages
43. OPTION 3: MVC + JSP
• MVC is a newer spec, not in the full release but not in beta
• It builds on top of JAX-RS
• It's an action-oriented framework, as opposed to XPages's component-based
approach
• In general, you're "closer to the metal"
• MVC can work with multiple UI techs, but JSP is in this project
44. controller/HomeController.java WebContent/WEB-INF/views/home.jsp
OPTION 3: MVC + JSP
// URL like /foo.nsf/xsp/app
@Path("/")
@Controller
public class HomeController {
@Inject Models models;
@Inject ProjectReleases releases;
@Inject BlogEntries blogEntries;
@GET
@Produces(MediaType.TEXT_HTML)
public String get() {
// Put objects you need in "models", like viewScope
models.put("recentReleases", releases.get(30));
models.put("blogEntries", blogEntries.getEntries(5));
// Return the name of the JSP file to render
return "home.jsp";
}
}
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<t:layout>
<section class="main-content">
<div class="home-layout">
<section id="blog">
<c:forEach items="${blogEntries}" var="entry">
<t:blogEntry value="${entry}"/>
</c:forEach>
</section>
<section id="recent-releases" class="activity-feed">
<h2><c:out items="${translation.recentReleases}"/></h2>
<ol>
<c:forEach items="${recentReleases}" var="release">
<!-- snip -->
</c:forEach>
</ol>
</section>
</div>
</section>
</t:layout>
45. FUTURE OPTIONS
• XPages + MVC?
• I did an early trial, but there are parts of the XPages stack that need workarounds
• Jakarta Faces (JSF)?
• JSF 3.0 is present in the project, but not PrimeFaces or Apache Tobago
• It generally works as-is, but doesn't have a lot of niceties
• Other view engines, like Thymeleaf?
• MVC has extensions for several of these, so I may bring them in
49. REQUIREMENTS AND COMPATIBILITY
• Domino 9.0.1FP10 for most pieces, Domino 12.0.1+ with FPs for NoSQL
• Should work with most or all existing libraries
• Used in production alongside ODA and POI4XPages
• Can be used in OSGi bundles with some knowledge
50. GETTING INVOLVED
• Try it out!
• Report bugs and request features
• Documentation: guides, specific feature details, etc.
• Example applications
• https://github.com/OpenNTF/org.openntf.xsp.jakartaee/issues/307
• Chip in on the code directly