The document discusses testing JavaFX applications using TestFX and JUnit. It provides a simple "Hello World" JavaFX application example and extracts the application logic into separate classes that can be tested independently. This allows testing the logic with JUnit unit tests while avoiding the need to launch the full JavaFX application. The document also recommends using JMH microbenchmarks to test the performance of application services as part of a Test Driven Development approach.
This document discusses test-driven development with JavaFX. It covers testing JavaFX applications at the unit, integration, and system levels. It also discusses continuous integration/continuous delivery and different tools that can be used for testing JavaFX applications, including TestFX, MarvinFX, JemmyFX, and Automaton. TestFX is highlighted as the recommended tool, with details provided on how to interact with JavaFX applications using its fluent API. The document also discusses using the view object pattern to write more readable tests and testing JavaFX applications that use DataFX or Afterburner.fx frameworks. It provides an example of using CDI to inject mocks when testing.
The document summarizes the JavaFX ecosystem, which includes many open source libraries, frameworks, and tools. It covers layout libraries like MigLayout, widgets like Medusa and TilesFX, rich text editors, charts, UI elements, testing tools like TestFX, frameworks like Afterburner.fx and TornadoFX, IDE plugins, and Groovy integration. The ecosystem is large and constantly evolving to provide many options for building desktop and mobile JavaFX applications.
The document discusses testing legacy Rails applications. It provides steps to get testing set up on a legacy Rails app, including creating a test database, running migrations, and getting Rake tasks to run tests. It emphasizes starting with one test at a time, finding and fixing bugs, and refactoring code. Examples are given of writing a model test based on application logs and fixing a failure by updating code. The document stresses treating methods as isolated boxes and only testing one thing at a time to incrementally add tests to a legacy codebase.
This document discusses JavaFX and provides tips for working with it. It recommends using JavaFX with any Java IDE or "oldschool" without an IDE. It also recommends creating a class that extends Application and overriding start() to launch the application. The document also discusses project management with JavaFX, including using Maven and providing native builds on different platforms.
Documentation: https://izumi.7mind.io/latest/release/doc/distage/
Github: https://github.com/pshirshov/izumi-r2
Pavel Shirshov - DIStage: purely functional programming without sacrificing modularity with modern dependency injection for Scala
- Modularity and its importance
- DI-like mechanisms and their issues in Scala
- Why people think that "DI doesn't compose with functional programming", and why that's not true
- Designing a staged DI, for wiring at runtime, at compile-time, or mixed
- Staging programs for reliability, power and performance
- The pains of supporting rich Scala types (incl. How to emulate kind-polymorphism in Scala 2)
- Garbage collection in DI for better tests and deployments
Pavel's bio: Language-agnostic software engineer, coding for 18 years,
10 years of hands-on commercial engineering experience.
Led a cluster orchestration team at Yandex, "the Russian Google"; implemented an internal orchestration solution, "ISS" (Scala/Java/C++), managing 50K+ physical hosts across 6 datacenters.
Today, Pavel owns Irish R&D company Septimal Mind.
Scala, Functional Programming and Team Productivity7mind
Many engineers spend a lot of time doing repetitive things. In this talk we examine typical productivity issues, which observed in many different companies, and show how to deal with them. We cover:
* Microservices and Monoliths,
* Introspection and Debugging,
* Logging,
* Modular Design,
* Functional Programming,
* RPC and REST,
* Tests and Delivery Pipeline.
This talk is a retrospective of our actions that helped our customer to cut development costs by 50%. We expect our experience to be applicable to most small and medium-sized teams and companies using Scala.
This document discusses test-driven development with JavaFX. It covers testing JavaFX applications at the unit, integration, and system levels. It also discusses continuous integration/continuous delivery and different tools that can be used for testing JavaFX applications, including TestFX, MarvinFX, JemmyFX, and Automaton. TestFX is highlighted as the recommended tool, with details provided on how to interact with JavaFX applications using its fluent API. The document also discusses using the view object pattern to write more readable tests and testing JavaFX applications that use DataFX or Afterburner.fx frameworks. It provides an example of using CDI to inject mocks when testing.
The document summarizes the JavaFX ecosystem, which includes many open source libraries, frameworks, and tools. It covers layout libraries like MigLayout, widgets like Medusa and TilesFX, rich text editors, charts, UI elements, testing tools like TestFX, frameworks like Afterburner.fx and TornadoFX, IDE plugins, and Groovy integration. The ecosystem is large and constantly evolving to provide many options for building desktop and mobile JavaFX applications.
The document discusses testing legacy Rails applications. It provides steps to get testing set up on a legacy Rails app, including creating a test database, running migrations, and getting Rake tasks to run tests. It emphasizes starting with one test at a time, finding and fixing bugs, and refactoring code. Examples are given of writing a model test based on application logs and fixing a failure by updating code. The document stresses treating methods as isolated boxes and only testing one thing at a time to incrementally add tests to a legacy codebase.
This document discusses JavaFX and provides tips for working with it. It recommends using JavaFX with any Java IDE or "oldschool" without an IDE. It also recommends creating a class that extends Application and overriding start() to launch the application. The document also discusses project management with JavaFX, including using Maven and providing native builds on different platforms.
Documentation: https://izumi.7mind.io/latest/release/doc/distage/
Github: https://github.com/pshirshov/izumi-r2
Pavel Shirshov - DIStage: purely functional programming without sacrificing modularity with modern dependency injection for Scala
- Modularity and its importance
- DI-like mechanisms and their issues in Scala
- Why people think that "DI doesn't compose with functional programming", and why that's not true
- Designing a staged DI, for wiring at runtime, at compile-time, or mixed
- Staging programs for reliability, power and performance
- The pains of supporting rich Scala types (incl. How to emulate kind-polymorphism in Scala 2)
- Garbage collection in DI for better tests and deployments
Pavel's bio: Language-agnostic software engineer, coding for 18 years,
10 years of hands-on commercial engineering experience.
Led a cluster orchestration team at Yandex, "the Russian Google"; implemented an internal orchestration solution, "ISS" (Scala/Java/C++), managing 50K+ physical hosts across 6 datacenters.
Today, Pavel owns Irish R&D company Septimal Mind.
Scala, Functional Programming and Team Productivity7mind
Many engineers spend a lot of time doing repetitive things. In this talk we examine typical productivity issues, which observed in many different companies, and show how to deal with them. We cover:
* Microservices and Monoliths,
* Introspection and Debugging,
* Logging,
* Modular Design,
* Functional Programming,
* RPC and REST,
* Tests and Delivery Pipeline.
This talk is a retrospective of our actions that helped our customer to cut development costs by 50%. We expect our experience to be applicable to most small and medium-sized teams and companies using Scala.
Frameworks are bulky, quirky, and non-compositional, which has led to a rejection of Spring and similar frameworks in the Scala ecosystem. Yet, despite their drawbacks, frameworks have been used to boost team productivity in many large companies. In this presentation, Pavel and Kai will introduce Izumi 1.0, a Scala microframework based on compositional functional programming. Designed to help you and your team achieve new levels of productivity, Izumi now includes full compile-time checks for your configurable applications and completely reworked Tagless Final hierarchy for Bifunctors and Trifunctors.
Hyper-pragmatic Pure FP testing with distage-testkit7mind
Having a proper test suite can turn ongoing application maintenance and development into pure joy – the best tests check meaningful properties, not the implementation details, and hold no impliict assumptions about their test environment - every test case must be self-contained and portable. To ensure that tests are free of implementation details and environment dependency, we may simply run them in a different test environment, with different implementations of components. But the boileplate and manual work involved in rewiring components, writing hardcoded fixtures and setting up different test environments make this very hard to do at scale. To tackle this problem we've created distage & distage-testkit, distage-testkit gives you the following superpowers:
* ability to easily swap out individual components or entire test environments
* principled & leak-free control of global resources for integration testing – docker containers, DBs, DDLs
* execute effects or allocate resources per-test, e.g. generate random fixtures per-test
* first-class testing of functional effects
* write tests as lambdas – access test fixtures via parameters or ZIO Environment
...and more! We'll also discuss general testing practices and what really distinguishes good tests from great tests.
Many Scala developers nowadays consider using Dependency Injection frameworks an anti-pattern incompatible with modern FP settings. We argue that it's just a consequence of a bad experience with legacy Java runtime reflection-based implementations that lack features important for modern functional programming, such as a first-class support for higher-kinded types. We argue that as a paradigm for structuring purely functional programs, DI with automatic wiring compares favorably against implicits, monad transformers, free monads, algebraic effects, cake pattern et al, enabling scaling and a degree of modularity unachievable by any manual wiring approach. This talk covers DIStage – a transparent, flexible and efficient DI framework for Scala that enables late binding, testability, effect separation and modular resource management at scale, working with, instead of compromising the Scala type system.
Documentation: https://izumi.7mind.io/latest/release/doc/distage/
Dart is a productive way to develop future JavaScript apps today. It comes with a complete set of development tools and will help ease development of EcmaScript 6 in 2016. Dart simplifies development by allowing optional variable types and single inheritance for classes. It supports concurrency without threads. Popular IDEs like IntelliJ, WebStorm, and Eclipse support Dart development. Code can run in the Dart VM for fast feedback or compile to JavaScript to run in browsers.
This document discusses testing AngularJS applications. It introduces popular testing frameworks like Jasmine and Karma that can be used to write unit tests and automate testing. Jasmine is typically used for testing AngularJS code and examples are given of writing tests with Jasmine. Karma is presented as a tool to automate testing by running tests in browsers. Protractor is introduced for end-to-end testing of front-end DOM elements. The document argues that front-end testing will become more important and integrated into development as tools continue to improve.
This document provides an introduction to unit testing JavaScript code with Jasmine and Karma. It discusses the basics of Jasmine including test suites, specs, expectations, and matchers. It then covers how to set up and run tests with Karma, including configuring Karma, running tests in browsers, handling failures, and testing AngularJS code. Specific topics covered include spies, $httpBackend for mocking HTTP requests, and testing controllers and dependencies injection.
Efficient JavaScript Unit Testing, May 2012Hazem Saleh
One of the biggest challenges of many web applications is the support on the different browsers with different versions. JavaScript code that runs on Safari does not necessarily mean it will work on IE or Firefox or Google chrome. This challenge is inherited from the lack of testing the JavaScript code that lives in the presentation tier from day one. Without unit testing the JavaScript code, organization will pay much money for testing, re-testing, and re-testing web applications for just deciding upgrading or supporting new browsers. This presentation shows the solution of this problem.
A presentation made for the AngularJS-IL meetup group that took place in May 2014 at Google TLV Campus. its a demonstration of Unit testing an AngularJS component with jasmine and karma.
Unit testing helps improving the quality of your code and greatly simplifies dealing with complex code. The testing framework of choice for React.js is Jest.
Unit testing of java script and angularjs application using Karma Jasmine Fra...Samyak Bhalerao
The document discusses unit testing of JavaScript and AngularJS applications using the Karma-Jasmine framework. It covers what testing and unit testing are, introduces the Karma test runner and Jasmine testing framework, and provides details on setting up Karma configuration files and writing tests using Jasmine specifications and matchers. The document also outlines how to test various aspects of AngularJS applications like controllers, services, directives and HTTP requests.
Stopping the Rot - Putting Legacy C++ Under TestSeb Rose
The document discusses introducing unit testing to legacy C++ code. It covers choosing a testing framework, writing initial tests and mocks, and various refactoring techniques like wrapping dependencies, extracting components, and adding non-intrusive C seams to facilitate testing. The goal is to incrementally make the code more testable while maintaining functionality through practices like test-driven development.
This document discusses test-driven development with Jasmine and Karma. It justifies TDD for JavaScript, provides an overview of TDD and its benefits. It then explains the basics of Jasmine including suites, specifications, matchers and spies. Finally it covers configuring Karma and using tools like PhantomJS for running tests and karma-coverage for generating code coverage reports.
Intro to testing Javascript with jasmineTimothy Oxley
Testing with Jasmine provides a framework for writing and running unit tests in JavaScript. It uses a behavior-driven development (BDD) style in which each test specifies the expected behavior it is testing using a describe and it blocks. Within the it block, expect statements make assertions about the code being tested using matchers like toEqual. Jasmine provides spies for mocking function calls and stubs. Running tests involves including Jasmine library files and specs in an HTML page and executing them with a simple HTTP server. Jasmine can also be used to test views by creating DOM fixtures and making assertions about the rendered markup.
Unit testing frameworks like Jasmine and Mocha can be used to write unit tests in Angular. Jasmine requires less setup and is fully BDD compliant. Tests are organized into describe blocks for test suites and it blocks for individual specs. Expectations are made using the expect function and matcher functions. Spies can mock and spy on functions. Karma is a test runner that runs tests across browsers and re-runs on file changes. It is configured via a karma.conf.js file. Unit tests validate controllers, services, and other application code. End-to-end tests using Protractor validate full user workflows and interactions.
AngularJS Unit Testing w/Karma and Jasminefoxp2code
This document provides instructions for setting up Angular unit testing with Karma and Jasmine. It discusses initializing Karma and Jasmine via NPM, configuring Karma, adding Angular and Angular mocks via Bower, writing describe and it blocks for tests, and using matchers and mocks like $httpBackend. The live coding section at the end indicates the document will demonstrate these concepts in real tests.
JavaScript Test-Driven Development with Jasmine 2.0 and Karma Christopher Bartling
This document discusses JavaScript test-driven development using Jasmine 2.0 and Karma. It introduces test-driven development principles and benefits, then covers the Karma test runner, PhantomJS browser, and features of the Jasmine testing framework including describe blocks, expectations, matchers, spies, and custom matchers. It also provides an example of mapping earthquakes and testing color-coded circles using magnitude and discusses code coverage and sustaining test-driven practices.
Practical tips for dealing with projects involving legacy code. Covers investigating past projects, static analysis of existing code, and methods for changing legacy code.
Presented at PHP Benelux '10
Frameworks are bulky, quirky, and non-compositional, which has led to a rejection of Spring and similar frameworks in the Scala ecosystem. Yet, despite their drawbacks, frameworks have been used to boost team productivity in many large companies. In this presentation, Pavel and Kai will introduce Izumi 1.0, a Scala microframework based on compositional functional programming. Designed to help you and your team achieve new levels of productivity, Izumi now includes full compile-time checks for your configurable applications and completely reworked Tagless Final hierarchy for Bifunctors and Trifunctors.
Hyper-pragmatic Pure FP testing with distage-testkit7mind
Having a proper test suite can turn ongoing application maintenance and development into pure joy – the best tests check meaningful properties, not the implementation details, and hold no impliict assumptions about their test environment - every test case must be self-contained and portable. To ensure that tests are free of implementation details and environment dependency, we may simply run them in a different test environment, with different implementations of components. But the boileplate and manual work involved in rewiring components, writing hardcoded fixtures and setting up different test environments make this very hard to do at scale. To tackle this problem we've created distage & distage-testkit, distage-testkit gives you the following superpowers:
* ability to easily swap out individual components or entire test environments
* principled & leak-free control of global resources for integration testing – docker containers, DBs, DDLs
* execute effects or allocate resources per-test, e.g. generate random fixtures per-test
* first-class testing of functional effects
* write tests as lambdas – access test fixtures via parameters or ZIO Environment
...and more! We'll also discuss general testing practices and what really distinguishes good tests from great tests.
Many Scala developers nowadays consider using Dependency Injection frameworks an anti-pattern incompatible with modern FP settings. We argue that it's just a consequence of a bad experience with legacy Java runtime reflection-based implementations that lack features important for modern functional programming, such as a first-class support for higher-kinded types. We argue that as a paradigm for structuring purely functional programs, DI with automatic wiring compares favorably against implicits, monad transformers, free monads, algebraic effects, cake pattern et al, enabling scaling and a degree of modularity unachievable by any manual wiring approach. This talk covers DIStage – a transparent, flexible and efficient DI framework for Scala that enables late binding, testability, effect separation and modular resource management at scale, working with, instead of compromising the Scala type system.
Documentation: https://izumi.7mind.io/latest/release/doc/distage/
Dart is a productive way to develop future JavaScript apps today. It comes with a complete set of development tools and will help ease development of EcmaScript 6 in 2016. Dart simplifies development by allowing optional variable types and single inheritance for classes. It supports concurrency without threads. Popular IDEs like IntelliJ, WebStorm, and Eclipse support Dart development. Code can run in the Dart VM for fast feedback or compile to JavaScript to run in browsers.
This document discusses testing AngularJS applications. It introduces popular testing frameworks like Jasmine and Karma that can be used to write unit tests and automate testing. Jasmine is typically used for testing AngularJS code and examples are given of writing tests with Jasmine. Karma is presented as a tool to automate testing by running tests in browsers. Protractor is introduced for end-to-end testing of front-end DOM elements. The document argues that front-end testing will become more important and integrated into development as tools continue to improve.
This document provides an introduction to unit testing JavaScript code with Jasmine and Karma. It discusses the basics of Jasmine including test suites, specs, expectations, and matchers. It then covers how to set up and run tests with Karma, including configuring Karma, running tests in browsers, handling failures, and testing AngularJS code. Specific topics covered include spies, $httpBackend for mocking HTTP requests, and testing controllers and dependencies injection.
Efficient JavaScript Unit Testing, May 2012Hazem Saleh
One of the biggest challenges of many web applications is the support on the different browsers with different versions. JavaScript code that runs on Safari does not necessarily mean it will work on IE or Firefox or Google chrome. This challenge is inherited from the lack of testing the JavaScript code that lives in the presentation tier from day one. Without unit testing the JavaScript code, organization will pay much money for testing, re-testing, and re-testing web applications for just deciding upgrading or supporting new browsers. This presentation shows the solution of this problem.
A presentation made for the AngularJS-IL meetup group that took place in May 2014 at Google TLV Campus. its a demonstration of Unit testing an AngularJS component with jasmine and karma.
Unit testing helps improving the quality of your code and greatly simplifies dealing with complex code. The testing framework of choice for React.js is Jest.
Unit testing of java script and angularjs application using Karma Jasmine Fra...Samyak Bhalerao
The document discusses unit testing of JavaScript and AngularJS applications using the Karma-Jasmine framework. It covers what testing and unit testing are, introduces the Karma test runner and Jasmine testing framework, and provides details on setting up Karma configuration files and writing tests using Jasmine specifications and matchers. The document also outlines how to test various aspects of AngularJS applications like controllers, services, directives and HTTP requests.
Stopping the Rot - Putting Legacy C++ Under TestSeb Rose
The document discusses introducing unit testing to legacy C++ code. It covers choosing a testing framework, writing initial tests and mocks, and various refactoring techniques like wrapping dependencies, extracting components, and adding non-intrusive C seams to facilitate testing. The goal is to incrementally make the code more testable while maintaining functionality through practices like test-driven development.
This document discusses test-driven development with Jasmine and Karma. It justifies TDD for JavaScript, provides an overview of TDD and its benefits. It then explains the basics of Jasmine including suites, specifications, matchers and spies. Finally it covers configuring Karma and using tools like PhantomJS for running tests and karma-coverage for generating code coverage reports.
Intro to testing Javascript with jasmineTimothy Oxley
Testing with Jasmine provides a framework for writing and running unit tests in JavaScript. It uses a behavior-driven development (BDD) style in which each test specifies the expected behavior it is testing using a describe and it blocks. Within the it block, expect statements make assertions about the code being tested using matchers like toEqual. Jasmine provides spies for mocking function calls and stubs. Running tests involves including Jasmine library files and specs in an HTML page and executing them with a simple HTTP server. Jasmine can also be used to test views by creating DOM fixtures and making assertions about the rendered markup.
Unit testing frameworks like Jasmine and Mocha can be used to write unit tests in Angular. Jasmine requires less setup and is fully BDD compliant. Tests are organized into describe blocks for test suites and it blocks for individual specs. Expectations are made using the expect function and matcher functions. Spies can mock and spy on functions. Karma is a test runner that runs tests across browsers and re-runs on file changes. It is configured via a karma.conf.js file. Unit tests validate controllers, services, and other application code. End-to-end tests using Protractor validate full user workflows and interactions.
AngularJS Unit Testing w/Karma and Jasminefoxp2code
This document provides instructions for setting up Angular unit testing with Karma and Jasmine. It discusses initializing Karma and Jasmine via NPM, configuring Karma, adding Angular and Angular mocks via Bower, writing describe and it blocks for tests, and using matchers and mocks like $httpBackend. The live coding section at the end indicates the document will demonstrate these concepts in real tests.
JavaScript Test-Driven Development with Jasmine 2.0 and Karma Christopher Bartling
This document discusses JavaScript test-driven development using Jasmine 2.0 and Karma. It introduces test-driven development principles and benefits, then covers the Karma test runner, PhantomJS browser, and features of the Jasmine testing framework including describe blocks, expectations, matchers, spies, and custom matchers. It also provides an example of mapping earthquakes and testing color-coded circles using magnitude and discusses code coverage and sustaining test-driven practices.
Practical tips for dealing with projects involving legacy code. Covers investigating past projects, static analysis of existing code, and methods for changing legacy code.
Presented at PHP Benelux '10
How do we go from your Java code to the CPU assembly that actually runs it? Using high level constructs has made us forget what happens behind the scenes, which is however key to write efficient code.
Starting from a few lines of Java, we explore the different layers that constribute to running your code: JRE, byte code, structure of the OpenJDK virtual machine, HotSpot, intrinsic methds, benchmarking.
An introductory presentation to these low-level concerns, based on the practical use case of optimizing 6 lines of code, so that hopefully you to want to explore further!
Presentation given at the Toulouse (FR) Java User Group.
Video (in french) at https://www.youtube.com/watch?v=rB0ElXf05nU
Slideshow with animations at https://docs.google.com/presentation/d/1eIcROfLpdTU2_Z_IKiMG-AwqZGZgbN1Bs2E0nGShpbk/pub?start=true&loop=false&delayms=60000
Ob1k is a new open source RPC container. it belongs to a new breed of frameworks that tries to improve on the classic J2EE model by embedding the server and reducing redundant bloatware. Ob1k supports two modes of operations: sync and async, the async mode aims for maximum performance by adopting reactive principals like using non-blocking code and functional composition using futures. Ob1k also aims to be ops/devops friendly by being self contained and easily configured.
The document discusses how the Java Virtual Machine (JVM) supports dynamic languages through the invokedynamic bytecode instruction. This simplifies the implementation of compilers and runtime systems for dynamically typed languages on the JVM by allowing method dispatch to be deferred until runtime. It also describes how method handles in Java 7 provide a more efficient and flexible way to access methods compared to reflection by embedding access restrictions and allowing faster invocation and combination of methods.
GraalVM allows building native applications from Java and other JVM languages. It includes a new just-in-time compiler called Graal and the Truffle framework for building language interpreters. GraalVM also includes Sulong, which allows running LLVM-based languages on the JVM. The presenter discussed using GraalVM to build a native executable for a Zookeeper CLI tool called zkstat from Java code using techniques like ahead-of-time compilation with SubstrateVM, configuring reflection, and building a Docker image for distribution.
Java 7 introduced several new features including underscore in numeric literals to improve readability (e.g. 1_000), binary literals prefixed with "0b", string switching to allow string comparisons, diamond operator <> in collections to simplify generic type instantiation, improved exception handling with multi-catch functionality, automatic resource management with try-with-resources, and new NIO 2.0 APIs including file change notifications. Other enhancements included fork/join framework for parallel programming, dynamic language support improvements, and Swing component decorator JLayer. The presentation proposed upgrading an existing Etrali project to Java 7 for benefits such as improved performance and reduced code size.
The document provides an overview of servlet basics, including:
- The main job of a servlet is to read data from the client request, generate a response, and send data back to the client.
- A simple "Hello World" servlet is presented that generates plain text. Another example generates HTML output.
- Helper classes can be used to avoid duplicating code across servlets.
- Servlets are given URLs either through the @WebServlet annotation or by mapping in the web.xml file.
- The servlet life cycle and debugging strategies are briefly discussed. Advanced topics like the service method are also covered.
This document provides an overview of JavaFX, including:
- What JavaFX is and its main components like the JavaFX Framework and JavaFX Script language
- Demos of shapes, animations, and other graphics capabilities in JavaFX
- An overview of the JavaFX architecture and scene graph project for building user interfaces
- Resources for learning more about and getting started with JavaFX development
JavaFX 8 est disponible depuis mars 2014 et apporte son lot de nouveautés. Gradle est en version 2 depuis juillet 2014. Deux technologies plus que prometteuses: JavaFX donne un coup de jeune au développement d’applications desktop en Java en apportant un navigateur web intégré, le support des WebSockets, de la 3D, et bien d’autres. Gradle est l’outil de d’automatisation de build à la mode, apportant de superbes possibilités par rapport rapport à maven, outil vieillissant, grâce à l’engouement de la communauté vis à vis de cet outil mais aussi par le fait de la technologie utilisée en son sein: groovy. Venez découvrir comment il est possible de réaliser rapidement une application à la mode en JavaFX avec un outil à la mode également. Bref venez à une session trendy.
JavaFX is a set of graphics and media packages that enables developers to design, create, test, debug, and deploy rich client applications that operate consistently across diverse platforms.
This document discusses concurrency and concurrent programming in Java. It introduces the built-in concurrency primitives like wait(), notify(), synchronized, and volatile. It then discusses higher-level concurrency utilities and data structures introduced in JDK 5.0 like Executors, ExecutorService, ThreadPools, Future, Callable, ConcurrentHashMap, CopyOnWriteArrayList that provide safer and more usable concurrency constructs. It also briefly covers topics like Java Memory Model, memory barriers, and happens-before ordering.
This document provides an overview of Spring Boot and some of its key features. It discusses the origins and modules of Spring, how Spring Boot simplifies configuration and dependency management. It then covers examples of building Spring Boot applications that connect to a SQL database, use RabbitMQ for messaging, and schedule and run asynchronous tasks.
This document discusses JavaFX and its capabilities for incorporating media and animation. It provides an overview of the JavaFX platform and roadmap, and describes features of the JavaFX Script programming language like binding, animation, and media playback. It also covers tools for JavaFX development and deployment basics, including software requirements and the JavaFX SDK.
Building non-blocking JavaFX 8 applications with JacpFX [CON1823]Andy Moncsek
Event bus, message passing, and async execution are concepts that are getting more and more popular for server-side applications. JacpFX brings this approach to the client, combining JavaFX with an actorlike component model. It is an UI application framework based on JavaFX, supporting developers in structuring applications with loosely coupled, reusable components. It frees you from the pitfalls of traditional multithreaded programming, helping you separate the task execution from UI changes in your client application. Furthermore, this component model works well with common communication technologies such as WebSocket, SSE, and JMS.
RCP (Rich Client Platform) is a framework for developing desktop applications using Java and Eclipse. It allows building applications with a native look and feel, rich user interfaces, and capabilities like drag and drop. The key classes involved in building an RCP application include Application, ApplicationWorkbenchAdvisor, ApplicationWorkbenchWindowAdvisor, Perspective, and ViewPart. These classes work together to define the overall application, window and perspective configurations, and user interface components.
In this presentation, we (Jonatan and Marco) investigated the new official and hidden features of Java 12.
We collected code examples and stories behind this release. We were happy about some features and disappointed with others.
We hope that with these slides you can learn quickly and with fun what's coming with the new version of Java.
This document provides an overview of embedded GlassFish, including its history and key features. Embedded GlassFish allows running a GlassFish application server within a JVM without requiring a full GlassFish installation. It provides benefits like very fast startup times, running web applications like regular Java applications, and using GlassFish for testing without a separate domain. Examples are provided demonstrating how to embed GlassFish using the API and via command line. The schedule outlines upcoming support for Java standards and references provide links to related projects.
Introduction to JavaFX on Raspberry PiBruno Borges
The document discusses using JavaFX to build applications on Raspberry Pi. It provides instructions on configuring the Raspberry Pi for JavaFX, including overclocking the CPU, allocating memory, and configuring the framebuffer. It also demonstrates how to create a basic JavaFX application for Raspberry Pi using FXML, properties, bindings, and threads. The document recommends libraries for using JAX-RS to interface with REST services and code examples of doing so.
Java Bytecode For Discriminating Developers - GeeCON 2011Anton Arhipov
The document discusses Java bytecode and how it is used to represent compiled Java code. It provides an overview of bytecode basics like the bytecode instruction set and taxonomy. It then gives examples of decompiling simple "Hello World" Java code and analyzing the resulting bytecode instructions. Key details like the stack-based execution model and how frames are used are also outlined.
JUnit5 Custom TestEngines intro - version 2020-06Sven Ruppert
JUnit5 has been out for some time now, but what are the hidden pearls you can find inside the new Junit Platform? This session explores the possibilities, from @Test over custom extensions up to your own TestEngine. The presentation shows you how to manage a full-stack test in different flavours, based on the JUnit5 possibilities. The main focus is on the development of a custom TestEngine to support project-specific needs. After this, you’ll have all the bits and bytes you need for starting your journey with JUnit5.
Hidden pearls for High-Performance-PersistenceSven Ruppert
Small UseCases with a significant amount of data for internal company usage, most developers had this in their career, already. However, no Ops Team, no Kubernetes, no Cluster is available as part of the solution.
In this talk, I will show a few tech stacks that are helping to deal with persistent data without dealing with the classic horizontal scaling tech monsters like Kubernetes, Hadoop and many more.
Sit down, relax and enjoy the journey through a bunch of lightning-fast persistence alternatives for pure java devs.
Vaadin Flow - How to start - a short intro for Java DevsSven Ruppert
Do you want to write a web application with Core Java? Then you are exactly right here. With Core Java and Vaadin Flow, we will develop a web application from the ground up in this session. We will only use Java, HTML and CSS will not be used during programming. The result, however, will be a web-based application based on web-components that meets the latest standards.
Functional Reactive With Core Java - Voxxed MelbourneSven Ruppert
There are a lot of reactive frameworks in the field, some with functional languages for the JVM. But Java9 give you both. But how you could combine this and use this without adding the next big framework to your project? We will have a Core Java journey to explore a lot of nice possibilities based on the the JDK.
Functional Reactive with Core Java - Workshop - SlidesSven Ruppert
The theme of this workshop is to learn the latest Java features, with an emphasis on picking up a couple of paradigms along the way - namely Functional Reactive Programming and how this fits in with the latest Java releases.
There are a lot of reactive frameworks in the field, some with functional languages for the JVM. But Java9 give you both. But how you could combine this and use this without adding the next big framework to your project? We will have a Core Java journey to explore a lot of nice possibilities based on the the JDK.
From Mess To Masterpiece - JFokus 2017Sven Ruppert
How a migration to MicroServices could change the team, architecture and coding culture. What you could you do and how you could transform a "Jurassic Park" into a lightweight environment. In this talk we will explore the strategy, techniques, pattern and tools I used to transform a team and the architecture that was grown over 15yrs. This will be a mix of pattern, tools and techniques that was able to migrate old systems, used inside insurance and banks. We had to migrate fat systems with a few million lines of code...
How a migration to MicroServices could change the team, architecture and coding culture.
What you could you do and how you could transform a "Jurassic Park" into a lightweight environment.
In this talk we will explore the strategy, techniques, pattern and tools I used to
transform a team and the architecture that was grown over 15yrs.
This will be a mix of pattern, tools and techniques that was able to migrate
old systems, used inside insurance and banks.
The document discusses mutation testing as a way to write better unit tests. Mutation testing involves making small changes or "mutations" to the production code and then running the test suite to see if the tests can detect the changes, or "kill" the mutations. It is recommended to generate mutants, run the unit tests, check the reports, and write more or improved tests until reaching a quality target where most or all mutants are killed. Different types of common code mutations are discussed such as replacing operators, variables, or removing conditionals. The goal of mutation testing is to help write a test suite that can detect as many small defects as possible in the code.
Dependency Injection is now part of nearly every Java project. But what is the difference between DI and CDI. How to decide what I could use better, what frameworks are available and what are the differences for me as a programmer? What could be an option for the IoT-, Desktop- or Webproject?
In this talk we will get an overview over different frameworks and how they are working. We are not checking the well known big one only, but we are looking at some small sometimes specialized implementations.
CDI (Context Dependency Injection) ermöglicht es dem Entwickler skalierbare und flexible Architekturen aufzubauen die auf einem Java(EE) Server als auch auf dem Desktop laufen. Wie aber sollten DesignPattern aufgebaut werden unter Verwendung von CDI? Was für einen Einfluss hat Java 8 auf die DesignPattern, wie wird es mit der neuen Streams API kombiniert?
Höhepunkt ist die Kombination von klassischen Reflection-Einsatzgebieten wie z.B. dynamic Proxies mit CDI und Cross-Language Injections.
Everybody knows the pattern proxy, but how can you use it effectively?
What kind of proxy patterns are available, and how can you
build patterns more effectively with it? Why is reflection needed for this?
Importantly, we need only the core JDK in most cases.
This tutorial starts from the basics and continues on to
DynamicProxies, DynamicObjectAdapter and DynamicStaticProxies at runtime, StaticObjectAdapters, and more.
The session, based on the German book Dynamic Proxies,
by Heinz Kabutz and the session’s presenter, takes a deep dive into this pattern group.
http://www.jug.ch/html/events/2014/javafx_jumpstart.html
JavaFX - nun endlich ist es soweit. Swing ist offiziell seit Java8 im reinen Wartungsmodus, JavaFX ist der Nachfolger und nun endlich Teil des JDK. Also alles deutet auf neue Zeiten in der Desktopentwicklung hin.. ABER..
Wie kann ich mit JavaFX beginnen?
Wie kann ich es mit Swing Projekten kombinieren?
Gibt es Test-Tools?
Wie beginne ich mit der Migration von Swing auf JavaFX?
Diese oder ähnliche Fragen stellen sich zu Beginn der Arbeit mit JavaFX
Wir werden uns den Start mit JavaFX, Werkzeuge wie TestFX und Kombinationen mit CDI und Swing ansehen.
Proxy Deep Dive JUG Saxony Day 2015-10-02Sven Ruppert
Ein wenig über Proxy´s. Wer mehr Hintergrundinfos dazu haben möchte, empfehle ich das Buch von Dr. Kabutz und mir :
http://www.amazon.de/Dynamic-Proxies-Dr-Heinz-Kabutz/dp/3868021531/ref=asap_bc?ie=UTF8
At this talk we will start from the basics and come shortly to DynamicProxies, generated type-save DynamicObjectAdapterBuilder and more. We will have a deep dive to this pattern group , and I am sure you will like it ;-)
This talk is based on the german book "Dynamic Proxies" written from Dr. Heinz Kabutz and me.
SOCRadar's Aviation Industry Q1 Incident Report is out now!
The aviation industry has always been a prime target for cybercriminals due to its critical infrastructure and high stakes. In the first quarter of 2024, the sector faced an alarming surge in cybersecurity threats, revealing its vulnerabilities and the relentless sophistication of cyber attackers.
SOCRadar’s Aviation Industry, Quarterly Incident Report, provides an in-depth analysis of these threats, detected and examined through our extensive monitoring of hacker forums, Telegram channels, and dark web platforms.
E-commerce Application Development Company.pdfHornet Dynamics
Your business can reach new heights with our assistance as we design solutions that are specifically appropriate for your goals and vision. Our eCommerce application solutions can digitally coordinate all retail operations processes to meet the demands of the marketplace while maintaining business continuity.
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppGoogle
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
👉👉 Click Here To Get More Info 👇👇
https://sumonreview.com/ai-fusion-buddy-review
AI Fusion Buddy Review: Key Features
✅Create Stunning AI App Suite Fully Powered By Google's Latest AI technology, Gemini
✅Use Gemini to Build high-converting Converting Sales Video Scripts, ad copies, Trending Articles, blogs, etc.100% unique!
✅Create Ultra-HD graphics with a single keyword or phrase that commands 10x eyeballs!
✅Fully automated AI articles bulk generation!
✅Auto-post or schedule stunning AI content across all your accounts at once—WordPress, Facebook, LinkedIn, Blogger, and more.
✅With one keyword or URL, generate complete websites, landing pages, and more…
✅Automatically create & sell AI content, graphics, websites, landing pages, & all that gets you paid non-stop 24*7.
✅Pre-built High-Converting 100+ website Templates and 2000+ graphic templates logos, banners, and thumbnail images in Trending Niches.
✅Say goodbye to wasting time logging into multiple Chat GPT & AI Apps once & for all!
✅Save over $5000 per year and kick out dependency on third parties completely!
✅Brand New App: Not available anywhere else!
✅ Beginner-friendly!
✅ZERO upfront cost or any extra expenses
✅Risk-Free: 30-Day Money-Back Guarantee!
✅Commercial License included!
See My Other Reviews Article:
(1) AI Genie Review: https://sumonreview.com/ai-genie-review
(2) SocioWave Review: https://sumonreview.com/sociowave-review
(3) AI Partner & Profit Review: https://sumonreview.com/ai-partner-profit-review
(4) AI Ebook Suite Review: https://sumonreview.com/ai-ebook-suite-review
#AIFusionBuddyReview,
#AIFusionBuddyFeatures,
#AIFusionBuddyPricing,
#AIFusionBuddyProsandCons,
#AIFusionBuddyTutorial,
#AIFusionBuddyUserExperience
#AIFusionBuddyforBeginners,
#AIFusionBuddyBenefits,
#AIFusionBuddyComparison,
#AIFusionBuddyInstallation,
#AIFusionBuddyRefundPolicy,
#AIFusionBuddyDemo,
#AIFusionBuddyMaintenanceFees,
#AIFusionBuddyNewbieFriendly,
#WhatIsAIFusionBuddy?,
#HowDoesAIFusionBuddyWorks
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j
Dr. Jesús Barrasa, Head of Solutions Architecture for EMEA, Neo4j
Découvrez les dernières innovations de Neo4j, et notamment les dernières intégrations cloud et les améliorations produits qui font de Neo4j un choix essentiel pour les développeurs qui créent des applications avec des données interconnectées et de l’IA générative.
OpenMetadata Community Meeting - 5th June 2024OpenMetadata
The OpenMetadata Community Meeting was held on June 5th, 2024. In this meeting, we discussed about the data quality capabilities that are integrated with the Incident Manager, providing a complete solution to handle your data observability needs. Watch the end-to-end demo of the data quality features.
* How to run your own data quality framework
* What is the performance impact of running data quality frameworks
* How to run the test cases in your own ETL pipelines
* How the Incident Manager is integrated
* Get notified with alerts when test cases fail
Watch the meeting recording here - https://www.youtube.com/watch?v=UbNOje0kf6E
GraphSummit Paris - The art of the possible with Graph TechnologyNeo4j
Sudhir Hasbe, Chief Product Officer, Neo4j
Join us as we explore breakthrough innovations enabled by interconnected data and AI. Discover firsthand how organizations use relationships in data to uncover contextual insights and solve our most pressing challenges – from optimizing supply chains, detecting fraud, and improving customer experiences to accelerating drug discoveries.
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsPeter Muessig
The UI5 tooling is the development and build tooling of UI5. It is built in a modular and extensible way so that it can be easily extended by your needs. This session will showcase various tooling extensions which can boost your development experience by far so that you can really work offline, transpile your code in your project to use even newer versions of EcmaScript (than 2022 which is supported right now by the UI5 tooling), consume any npm package of your choice in your project, using different kind of proxies, and even stitching UI5 projects during development together to mimic your target environment.
Revolutionizing Visual Effects Mastering AI Face Swaps.pdfUndress Baby
The quest for the best AI face swap solution is marked by an amalgamation of technological prowess and artistic finesse, where cutting-edge algorithms seamlessly replace faces in images or videos with striking realism. Leveraging advanced deep learning techniques, the best AI face swap tools meticulously analyze facial features, lighting conditions, and expressions to execute flawless transformations, ensuring natural-looking results that blur the line between reality and illusion, captivating users with their ingenuity and sophistication.
Web:- https://undressbaby.com/
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemPeter Muessig
Learn about the latest innovations in and around OpenUI5/SAPUI5: UI5 Tooling, UI5 linter, UI5 Web Components, Web Components Integration, UI5 2.x, UI5 GenAI.
Recording:
https://www.youtube.com/live/MSdGLG2zLy8?si=INxBHTqkwHhxV5Ta&t=0
Using Query Store in Azure PostgreSQL to Understand Query PerformanceGrant Fritchey
Microsoft has added an excellent new extension in PostgreSQL on their Azure Platform. This session, presented at Posette 2024, covers what Query Store is and the types of information you can get out of it.
Zoom is a comprehensive platform designed to connect individuals and teams efficiently. With its user-friendly interface and powerful features, Zoom has become a go-to solution for virtual communication and collaboration. It offers a range of tools, including virtual meetings, team chat, VoIP phone systems, online whiteboards, and AI companions, to streamline workflows and enhance productivity.
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Łukasz Chruściel
No one wants their application to drag like a car stuck in the slow lane! Yet it’s all too common to encounter bumpy, pothole-filled solutions that slow the speed of any application. Symfony apps are not an exception.
In this talk, I will take you for a spin around the performance racetrack. We’ll explore common pitfalls - those hidden potholes on your application that can cause unexpected slowdowns. Learn how to spot these performance bumps early, and more importantly, how to navigate around them to keep your application running at top speed.
We will focus in particular on tuning your engine at the application level, making the right adjustments to ensure that your system responds like a well-oiled, high-performance race car.
Flutter is a popular open source, cross-platform framework developed by Google. In this webinar we'll explore Flutter and its architecture, delve into the Flutter Embedder and Flutter’s Dart language, discover how to leverage Flutter for embedded device development, learn about Automotive Grade Linux (AGL) and its consortium and understand the rationale behind AGL's choice of Flutter for next-gen IVI systems. Don’t miss this opportunity to discover whether Flutter is right for your project.
WhatsApp offers simple, reliable, and private messaging and calling services for free worldwide. With end-to-end encryption, your personal messages and calls are secure, ensuring only you and the recipient can access them. Enjoy voice and video calls to stay connected with loved ones or colleagues. Express yourself using stickers, GIFs, or by sharing moments on Status. WhatsApp Business enables global customer outreach, facilitating sales growth and relationship building through showcasing products and services. Stay connected effortlessly with group chats for planning outings with friends or staying updated on family conversations.
Unveiling the Advantages of Agile Software Development.pdfbrainerhub1
Learn about Agile Software Development's advantages. Simplify your workflow to spur quicker innovation. Jump right in! We have also discussed the advantages.
E-commerce Development Services- Hornet DynamicsHornet Dynamics
For any business hoping to succeed in the digital age, having a strong online presence is crucial. We offer Ecommerce Development Services that are customized according to your business requirements and client preferences, enabling you to create a dynamic, safe, and user-friendly online store.
Essentials of Automations: The Art of Triggers and Actions in FMESafe Software
In this second installment of our Essentials of Automations webinar series, we’ll explore the landscape of triggers and actions, guiding you through the nuances of authoring and adapting workspaces for seamless automations. Gain an understanding of the full spectrum of triggers and actions available in FME, empowering you to enhance your workspaces for efficient automation.
We’ll kick things off by showcasing the most commonly used event-based triggers, introducing you to various automation workflows like manual triggers, schedules, directory watchers, and more. Plus, see how these elements play out in real scenarios.
Whether you’re tweaking your current setup or building from the ground up, this session will arm you with the tools and insights needed to transform your FME usage into a powerhouse of productivity. Join us to discover effective strategies that simplify complex processes, enhancing your productivity and transforming your data management practices with FME. Let’s turn complexity into clarity and make your workspaces work wonders!
Takashi Kobayashi and Hironori Washizaki, "SWEBOK Guide and Future of SE Education," First International Symposium on the Future of Software Engineering (FUSE), June 3-6, 2024, Okinawa, Japan
1. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 2/164
Sven Ruppert
has been coding java since 1996
Fellow / Senior Manager
reply Group
Germany - Munich
@SvenRuppert
@SvenRuppert 3/165
2. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 3/164
JavaFX 8 - JumpStart
Intro
Swing was yesterday.... now JavaFX ;-)
@SvenRuppert 4/165
3. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 4/164
JavaFX 8 - JumpStart
Intro
Swing was yesterday.... now JavaFX ;-)
Since Java8...
.. JavaFX8 is part of the JDK
@SvenRuppert 5/165
4. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 5/164
JavaFX 8 - JumpStart
Intro
Swing was yesterday.... now JavaFX ;-)
Since Java8...
.. JavaFX8 is part of the JDK
.. you could use it with JDK7, but you have to add it by yourself.
@SvenRuppert 6/165
5. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 6/164
JavaFX 8 - JumpStart
Intro
Swing was yesterday.... now JavaFX ;-)
Since Java8...
.. JavaFX8 is part of the JDK
.. you could use it with JDK7, but you have to add it by yourself.
BUT:
The switch from JavaFX 2.2 to JavaFX8 could be a lot of work..
@SvenRuppert 7/165
6. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 7/164
JavaFX 8 - JumpStart
Intro
Swing was yesterday.... now JavaFX ;-)
Since Java8...
.. JavaFX8 is part of the JDK
.. you could use it with JDK7, but you have to add it by yourself.
BUT:
The switch from JavaFX 2.2 to JavaFX8 could be a lot of work..
for example: Builder-API is now deprecated and a lot of the constructors are
changed.
@SvenRuppert 8/165
7. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 8/164
JavaFX 8 - JumpStart
Hello World - only to remember
a simple example with a button and a service...
@SvenRuppert 9/165
8. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 9/164
JavaFX 8 - JumpStart
Hello World - only to remember
a simple example with a button and a service...
different ways to implement..
@SvenRuppert 10/165
9. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 10/164
JavaFX 8 - JumpStart
Hello World - only to remember
a simple example with a button and a service...
different ways to implement..
.. lets start without fxml
@SvenRuppert 11/165
10. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 11/164
JavaFX 8 - JumpStart
Hello World - only to remember
@SvenRuppert
public class JavaFXPlain extends Application {
public static void main(String[] args) { launch(args); }
@Override
public void start(Stage primaryStage) {
final AnchorPane rootNode = new AnchorPane();
HBox hBox = new HBox();
final TextField tf1 = new TextField(), tf2 = new TextField(), tfResult = new TextField();
final Button button = new Button();
button.setText("Ohhh press me..");
button.setOnAction(event -> {
String v1 = tf1.getText(); String v2 = tf2.getText();
int result = valueOf(v1) + valueOf(v2);
tfResult.setText(result+"");
});
hBox.getChildren().addAll(tf1, tf2, button, tfResult);
rootNode.getChildren().add(hBox);
final Scene scene = new Scene(rootNode, 640, 60);
primaryStage.setScene(scene);
primaryStage.show();
}
}
JAVA
12/165
11. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 12/164
JavaFX 8 - JumpStart
Hello World - only to remember
Application:
The main class from an JavaFX Application will extend
javafx.application.Application.
@SvenRuppert 13/165
12. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 13/164
JavaFX 8 - JumpStart
Hello World - only to remember
Application:
The main class from an JavaFX Application will extend
javafx.application.Application.
Method: start
The start() Method will be the main start-point of the application.
@SvenRuppert 14/165
13. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 14/164
JavaFX 8 - JumpStart
Hello World - only to remember
Application:
The main class from an JavaFX Application will extend
javafx.application.Application.
Method: start
The start() Method will be the main start-point of the application.
Stage:
This instance is the top level container for all JavaFX Components
@SvenRuppert 15/165
14. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 15/164
JavaFX 8 - JumpStart
Hello World - only to remember
Application:
The main class from an JavaFX Application will extend
javafx.application.Application.
Method: start
The start() Method will be the main start-point of the application.
Stage:
This instance is the top level container for all JavaFX Components
Scene:
This instance will be the container for the your content.
@SvenRuppert 16/165
15. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 16/164
JavaFX 8 - JumpStart
Hello World - only to remember
@SvenRuppert
public class JavaFXPlain extends Application {
public static void main(String[] args) { launch(args); }
@Override
public void start(Stage primaryStage) {
final AnchorPane rootNode = new AnchorPane();
HBox hBox = new HBox();
final TextField tf1 = new TextField(), tf2 = new TextField(), tfResult = new TextField();
final Button button = new Button();
button.setText("Ohhh press me..");
button.setOnAction(event -> {
String v1 = tf1.getText(); String v2 = tf2.getText();
int result = valueOf(v1) + valueOf(v2);
tfResult.setText(result+"");
});
hBox.getChildren().addAll(tf1, tf2, button, tfResult);
rootNode.getChildren().add(hBox);
final Scene scene = new Scene(rootNode, 640, 60);
primaryStage.setScene(scene);
primaryStage.show();
}
}
JAVA
17/165
16. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 17/164
JavaFX 8 - JumpStart
Hello World - only to remember
oh now..... how to test it ???
@SvenRuppert 18/165
17. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 18/164
JavaFX 8 - JumpStart
Hello World - only to remember
oh now..... how to test it ???
we will start with jUnit....
@SvenRuppert 19/165
18. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 19/164
JavaFX 8 - JumpStart
Hello World - only to remember
oh now..... how to test it ???
we will start with jUnit....
.. so we have to extract the logic
@SvenRuppert 20/165
19. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 20/164
JavaFX 8 - JumpStart
Hello World - only to remember
oh now..... how to test it ???
we will start with jUnit....
.. so we have to extract the logic
@SvenRuppert
publicclassAddService{
publicintadd(inta,intb){returna+b;}
}
JAVA
21/165
20. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 21/164
JavaFX 8 - JumpStart
Hello World - only to remember
@SvenRuppert
publicclassAddService{
publicintadd(inta,intb){returna+b;}
}
@TestpublicvoidtestAdd001()throwsException{
AddServiceservice=newAddService();
intr=service.add(0,0);
Assert.assertEquals(0,r);
}
JAVA
22/165
21. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 22/164
JavaFX 8 - JumpStart
Hello World - only to remember
@SvenRuppert
publicclassAddService{
publicintadd(inta,intb){returna+b;}
}
@TestpublicvoidtestAdd001()throwsException{
AddServiceservice=newAddService();
intr=service.add(0,0);
Assert.assertEquals(0,r);
}
publicclassString2Int{
publicintconvert(Strings){returnInteger.valueOf(s);}
}
JAVA
23/165
22. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 23/164
JavaFX 8 - JumpStart
Hello World - only to remember
@SvenRuppert
public class AddService {
public int add(int a, int b){ return a +b; }
}
@Test public void testAdd001() throws Exception {
AddService service = new AddService();
int r = service.add(0, 0);
Assert.assertEquals(0, r);
}
public class String2Int {
public int convert(String s){ return Integer.valueOf(s); }
}
@Test public void test001() throws Exception {
String2Int s = new String2Int();
int r = s.convert("0");
Assert.assertEquals(r, 0);
}
JAVA
24/165
23. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 24/164
JavaFX 8 - JumpStart
Hello World - only to remember
What is reached?
@SvenRuppert 25/165
24. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 25/164
JavaFX 8 - JumpStart
Hello World - only to remember
What is reached?
.. UI with less logic
@SvenRuppert 26/165
25. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 26/164
JavaFX 8 - JumpStart
Hello World - only to remember
What is reached?
.. UI with less logic
.. we could test the logic with jUnit
@SvenRuppert 27/165
26. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 27/164
JavaFX 8 - JumpStart
Hello World - only to remember
What is reached?
.. UI with less logic
.. we could test the logic with jUnit
.. we increased the code coverage
@SvenRuppert 28/165
27. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 28/164
JavaFX 8 - JumpStart
Hello World - only to remember
What is reached?
.. UI with less logic
.. we could test the logic with jUnit
.. we increased the code coverage
but how much?
@SvenRuppert 29/165
28. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 29/164
JavaFX 8 - JumpStart
Hello World - only to remember
@SvenRuppert
private AddService addService = new AddService();
private String2Int string2Int = new String2Int();
public void start(Stage primaryStage) {
final AnchorPane rootNode = new AnchorPane();
HBox hBox = new HBox();
final TextField tf1 = new TextField(), tf2 = new TextField(), tfResult = new TextField();
final Button button = new Button();
button.setText("Ohhh press me..");
button.setOnAction(event -> {
String v1 = tf1.getText(); String v2 = tf2.getText();
int intA = string2Int.convert(v1); int intB = string2Int.convert(v2);
int result = addService.add(intA, intB);
tfResult.setText(result+"");
});
hBox.getChildren().addAll(tf1, tf2, button, tfResult);
rootNode.getChildren().add(hBox);
final Scene scene = new Scene(rootNode, 640, 60);
primaryStage.setScene(scene);
primaryStage.show();
}
JAVA
30/165
29. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 30/164
JavaFX 8 - JumpStart
Hello World - only to remember
performance is part of TDD
@SvenRuppert 31/165
30. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 31/164
JavaFX 8 - JumpStart
Hello World - only to remember
performance is part of TDD
.. how fast are the services?
@SvenRuppert 32/165
31. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 32/164
JavaFX 8 - JumpStart
Hello World - only to remember
performance is part of TDD
.. how fast are the services?
.. start with microbenchmarks
@SvenRuppert 33/165
32. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 33/164
JavaFX 8 - JumpStart
Hello World - only to remember
performance is part of TDD
.. how fast are the services?
.. start with microbenchmarks
.. use JMH -> http://openjdk.java.net/projects/code-tools/jmh/
@SvenRuppert 34/165
33. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 34/164
JavaFX 8 - JumpStart
Hello World - only to remember
performance is part of TDD
.. how fast are the services?
.. start with microbenchmarks
.. use JMH -> http://openjdk.java.net/projects/code-tools/jmh/
show the code v003 ;-)
@SvenRuppert 35/165
39. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 40/164
JavaFX 8 - TestFX
integration tests - including UI ?
but....
unit tests - how to test a UI component
@SvenRuppert 41/165
40. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 41/164
JavaFX 8 - TestFX
integration tests - including UI ?
but....
unit tests - how to test a UI component
system tests - how to test an UI workflow
@SvenRuppert 42/165
41. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 42/164
JavaFX 8 - TestFX
manual testing
a tester tests the complete app
@SvenRuppert 43/165
42. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 43/164
JavaFX 8 - TestFX
manual testing
a tester tests the complete app
create a test plan
@SvenRuppert 44/165
43. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 44/164
JavaFX 8 - TestFX
manual testing
a tester tests the complete app
create a test plan
update the test plan for each release
@SvenRuppert 45/165
44. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 45/164
JavaFX 8 - TestFX
manual testing
a tester tests the complete app
create a test plan
update the test plan for each release
test each release
@SvenRuppert 46/165
45. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 46/164
JavaFX 8 - TestFX
CI / CD
update the test plan for each commit
@SvenRuppert 47/165
46. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 47/164
JavaFX 8 - TestFX
CI / CD
update the test plan for each commit
test each commit
@SvenRuppert 48/165
47. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 48/164
JavaFX 8 - TestFX
IDE based Tools like Selenium
QF-Test
@SvenRuppert 49/165
48. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 49/164
JavaFX 8 - TestFX
IDE based Tools like Selenium
QF-Test
commercial product
@SvenRuppert 50/165
49. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 50/164
JavaFX 8 - TestFX
IDE based Tools like Selenium
QF-Test
commercial product
developer licence costs around 1995 €
@SvenRuppert 51/165
50. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 51/164
JavaFX 8 - TestFX
IDE based Tools like Selenium
QF-Test
commercial product
developer licence costs around 1995 €
no JUnit approach
@SvenRuppert 52/165
51. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 52/164
JavaFX 8 - TestFX
IDE based Tools like Selenium
QF-Test
commercial product
developer licence costs around 1995 €
no JUnit approach
CI integration
@SvenRuppert 53/165
52. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 53/164
JavaFX 8 - TestFX
IDE based Tools like Selenium
QF-Test
commercial product
developer licence costs around 1995 €
no JUnit approach
CI integration
nearly the same as froglogic...
@SvenRuppert 54/165
53. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 54/164
JavaFX 8 - TestFX
JemmyFX
is for JavaFX 2.2
last commit is over 2 yearsago
looks like there is no development activity
@SvenRuppert 55/165
54. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 55/164
JavaFX 8 - TestFX
JemmyFX
is for JavaFX 2.2
last commit is over 2 yearsago
looks like there is no development activity
Don´t use it
@SvenRuppert 56/165
56. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 57/164
JavaFX 8 - TestFX
MarvinFX
https://github.com/guigarage/MarvinFX
Provides Supervisors for JavaFX Properties
we (Hendrik Ebbers and Sven) are merging into TestFX
@SvenRuppert 58/165
57. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 58/164
JavaFX 8 - TestFX
MarvinFX
https://github.com/guigarage/MarvinFX
Provides Supervisors for JavaFX Properties
we (Hendrik Ebbers and Sven) are merging into TestFX
Don´t use it
@SvenRuppert 59/165
62. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 63/164
JavaFX 8 - TestFX
finally TestFX
active development
LTS branch for Java7 is available
active branch JavaFX8 only
@SvenRuppert 64/165
63. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 64/164
JavaFX 8 - TestFX
finally TestFX
verifying the behavior of JavaFX applications
@SvenRuppert 65/165
64. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 65/164
JavaFX 8 - TestFX
finally TestFX
verifying the behavior of JavaFX applications
API for interacting with JavaFX applications.
@SvenRuppert 66/165
65. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 66/164
JavaFX 8 - TestFX
finally TestFX
verifying the behavior of JavaFX applications
API for interacting with JavaFX applications.
fluent and clean API
@SvenRuppert 67/165
66. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 67/164
JavaFX 8 - TestFX
finally TestFX
verifying the behavior of JavaFX applications
API for interacting with JavaFX applications.
fluent and clean API
Supports Hamcrest Matchers and Lambda expressions.
@SvenRuppert 68/165
67. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 68/164
JavaFX 8 - TestFX
finally TestFX
verifying the behavior of JavaFX applications
API for interacting with JavaFX applications.
fluent and clean API
Supports Hamcrest Matchers and Lambda expressions.
Screenshots of failed tests.
@SvenRuppert 69/165
68. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 69/164
JavaFX 8 - TestFX
finally TestFX
verifying the behavior of JavaFX applications
API for interacting with JavaFX applications.
fluent and clean API
Supports Hamcrest Matchers and Lambda expressions.
Screenshots of failed tests.
internal used by Oracle for JavaFX
@SvenRuppert 70/165
69. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 70/164
JavaFX 8 - TestFX
finally TestFX
start with a Login Screen.
@SvenRuppert 71/165
70. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 71/164
JavaFX 8 - TestFX
finally TestFX
start with a Login Screen.
... TextField / Password-Field / Button
@SvenRuppert 72/165
72. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 73/164
JavaFX 8 - TestFX
finally TestFX
each test must extend the GUITest class
@SvenRuppert
publicclassMyTestextendsGuiTest{
@Test
publicvoidtestLogin(){...}
}
JAVA
74/165
73. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 74/164
JavaFX 8 - TestFX
finally TestFX
each test must extend the GUITest class
.. and provide the the root node
@SvenRuppert
publicclassMyTestextendsGuiTest{
protectedNodegetRootNode(){..}
@Test
publicvoidtestLogin(){...}
}
JAVA
75/165
74. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 75/164
JavaFX 8 - TestFX
finally TestFX
The GuiTest class provides a lot of functions that can be used to interact with
JavaFX
.. and provide the the root node
@SvenRuppert
publicclassMyTestextendsGuiTest{
protectedNodegetRootNode(){..}
@Test
publicvoidtestLogin(){
click(".text-field");
type("steve");
//...
}
}
JAVA
76/165
75. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 76/164
JavaFX 8 - TestFX
finally TestFX
ok, how we would do it ?
@SvenRuppert 77/165
76. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 77/164
JavaFX 8 - TestFX
finally TestFX
ok, how we would do it ?
..extract a component
@SvenRuppert 78/165
77. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 78/164
JavaFX 8 - TestFX
finally TestFX
@SvenRuppert
public class AddComponent extends HBox {
private Controller controller = new Controller();
final private TextField tf1 = new TextField();
final private TextField tf2 = new TextField();
final private TextField tfResult = new TextField();
final Button button = new Button();
{
tf1.setId("tf1");
tf2.setId("tf2");
tfResult.setId("tfResult");
button.setId("btnAdd");
button.setText("Ohhh press me..");
button.setOnAction(event -> {
String v1 = tf1.getText(); String v2 = tf2.getText();
String result = controller.add(v1, v2);
tfResult.setText(result);
});
this.getChildren().addAll(tf1, tf2, button, tfResult);
}
}
JAVA
79/165
78. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 79/164
JavaFX 8 - TestFX
finally TestFX
@SvenRuppert
public class JavaFXPlain extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
final AnchorPane rootNode = new AnchorPane();
rootNode.getChildren().add(new AddComponent());
final Scene scene = new Scene(rootNode, 640, 60);
primaryStage.setScene(scene);
primaryStage.show();
}
}
JAVA
80/165
80. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 81/164
JavaFX 8 - TestFX
finally TestFX
Controller is tested !
the main class is nearly only pure JDK/JavaFX8
@SvenRuppert 82/165
81. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 82/164
JavaFX 8 - TestFX
finally TestFX
Controller is tested !
the main class is nearly only pure JDK/JavaFX8
the component AddComponent needs to be tested at the Button Action Event
@SvenRuppert 83/165
82. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 83/164
JavaFX 8 - TestFX
finally TestFX
Controller is tested !
the main class is nearly only pure JDK/JavaFX8
the component AddComponent needs to be tested at the Button Action Event
if the Button Action Event is tested -> code coverage is increased
@SvenRuppert 84/165
83. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 84/164
JavaFX 8 - TestFX
finally TestFX
Controller is tested !
the main class is nearly only pure JDK/JavaFX8
the component AddComponent needs to be tested at the Button Action Event
if the Button Action Event is tested -> code coverage is increased
.. extend from GUITest
@SvenRuppert 85/165
84. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 85/164
JavaFX 8 - TestFX
finally TestFX
Controller is tested !
the main class is nearly only pure JDK/JavaFX8
the component AddComponent needs to be tested at the Button Action Event
if the Button Action Event is tested -> code coverage is increased
.. extend from GUITest
.. create RootNode
@SvenRuppert 86/165
85. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 86/164
JavaFX 8 - TestFX
finally TestFX
Controller is tested !
the main class is nearly only pure JDK/JavaFX8
the component AddComponent needs to be tested at the Button Action Event
if the Button Action Event is tested -> code coverage is increased
.. extend from GUITest
.. create RootNode
.. write your tests
@SvenRuppert 87/165
86. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 87/164
JavaFX 8 - TestFX
finally TestFX
@SvenRuppert
public class AddComponentTest extends GuiTest {
@Override
protected Parent getRootNode() {
AddComponent addComponent = new AddComponent();
addComponent.setId("c");
return addComponent;
}
JAVA
88/165
90. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 91/164
JavaFX 8 - TestFX
finally TestFX
Now... FXML
.. with FXML you could describe the UI
@SvenRuppert 92/165
91. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 92/164
JavaFX 8 - TestFX
finally TestFX
Now... FXML
.. with FXML you could describe the UI
.. but how ?
@SvenRuppert 93/165
92. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 93/164
JavaFX 8 - TestFX
finally TestFX
Now... FXML
.. with FXML you could describe the UI
.. but how ?
Create Components... beginning from the top.
@SvenRuppert 94/165
93. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 94/164
JavaFX 8 - TestFX
finally TestFX
Now... FXML
.. with FXML you could describe the UI
.. but how ?
Create Components... beginning from the top.
.. every Component will have
@SvenRuppert 95/165
94. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 95/164
JavaFX 8 - TestFX
finally TestFX
Now... FXML
.. with FXML you could describe the UI
.. but how ?
Create Components... beginning from the top.
.. every Component will have
.. .. a class called XYZPane
@SvenRuppert 96/165
95. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 96/164
JavaFX 8 - TestFX
finally TestFX
Now... FXML
.. with FXML you could describe the UI
.. but how ?
Create Components... beginning from the top.
.. every Component will have
.. .. a class called XYZPane
.. .. a class called XYZPaneController
@SvenRuppert 97/165
96. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 97/164
JavaFX 8 - TestFX
finally TestFX
Now... FXML
.. with FXML you could describe the UI
.. but how ?
Create Components... beginning from the top.
.. every Component will have
.. .. a class called XYZPane
.. .. a class called XYZPaneController
.. .. a file called XYZPane.fxml
@SvenRuppert 98/165
97. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 98/164
JavaFX 8 - TestFX
finally TestFX
@SvenRuppert
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
MainPane root = new MainPane();
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
JAVA
99/165
104. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 105/164
Why CDI
we want to get rid of hard connections
@SvenRuppert 106/165
105. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 106/164
Why CDI
we want to get rid of hard connections
Have a look at the definition of a List. List will be the return value -> List.
@SvenRuppert
publicList<Data>execute(){...}; JAVA
107/165
106. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 107/164
Why CDI
the caller of the method dont know if it is an ArrayList or LinkedList... but
@SvenRuppert
importjava.util.List;
importjava.util.ArrayList;
publicList<Data>execute(){
finalList<Data>result=newArrayList<>();
//....
returnresult;
}
JAVA
108/165
107. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 108/164
Why CDI
the caller of the method dont know if it is an ArrayList or LinkedList... but
.. inside the method you will have a static ref to ArrayList
@SvenRuppert
importjava.util.List;
importjava.util.ArrayList;
publicList<Data>execute(){
finalList<Data>result=newArrayList<>();
//....
returnresult;
}
JAVA
109/165
108. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 109/164
Why CDI
if you are not using a special method from ArrayList ... -> trimToSize()
@SvenRuppert 110/165
109. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 110/164
Why CDI
if you are not using a special method from ArrayList ... -> trimToSize()
Why not get rid of the static ref ??
@SvenRuppert 111/165
110. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 111/164
Why CDI
if you are not using a special method from ArrayList ... -> trimToSize()
Why not get rid of the static ref ??
Maybe at runtime a LinkedList would be better.. we dont want to compile all
again..
@SvenRuppert 112/165
111. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 112/164
Why CDI
if you are not using a special method from ArrayList ... -> trimToSize()
Why not get rid of the static ref ??
Maybe at runtime a LinkedList would be better.. we dont want to compile all
again..
ok, we could use Factories..
@SvenRuppert 113/165
112. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 113/164
Why CDI
we are using plain SE
.. an example of a factory implementation
@SvenRuppert
importjava.util.ArrayList;
importjava.util.LinkedList;
importjava.util.List;
publicclassListFactory{
publicListcreateArrayList() {returnnewArrayList();}
publicListcreateLinkedList(){returnnewLinkedList();}
publicListcreateList() {returnnewArrayList();}
}
JAVA
114/165
113. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 114/164
Why CDI
Do we have something better reached?
@SvenRuppert 115/165
114. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 115/164
Why CDI
Do we have something better reached?
the developers in your project are using this factory...
@SvenRuppert 116/165
115. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 116/164
Why CDI
Do we have something better reached?
the developers in your project are using this factory... if they will know that there
is a factory ;-)
@SvenRuppert 117/165
118. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 119/164
Why CDI
ok, no static ref to ArrayList..
@SvenRuppert 120/165
119. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 120/164
Why CDI
ok, no static ref to ArrayList..
but we have a static ref to the factory method
@SvenRuppert 121/165
120. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 121/164
Why CDI
ok, no static ref to ArrayList..
but we have a static ref to the factory method
The implementation of the ListFactory itself will have all ref to all
implementations
@SvenRuppert 122/165
121. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 122/164
Solution Nr 1
based on Java SE
a little bit more dynamic..
@SvenRuppert 123/165
122. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 123/164
Solution Nr 1
based on Java SE
a little bit more dynamic..
@SvenRuppert
importjava.util.ArrayList;
importjava.util.LinkedList;
importjava.util.List;
importorg.rapidpm.demo.cdi.commons.registry.ContextResolver;
publicclassListFactory{
publicListcreateList(finalContextResolvercontextResolver){
if(contextResolver==null){returncreateArrayList();}
else{
if(contextResolver.resolveContext()){returncreateArrayList();}
else{returncreateLinkedList();}
}
}
}
JAVA
124/165
123. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 124/164
Solution Nr 1
based on Java SE
a little bit more dynamic..
the complexity is now -> ContextResolver
@SvenRuppert 125/165
124. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 125/164
Solution Nr 1
based on Java SE
a little bit more dynamic..
the complexity is now -> ContextResolver
Added dep to the ContextResolver
@SvenRuppert 126/165
125. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 126/164
Solution Nr 1
based on Java SE
a little bit more dynamic..
the complexity is now -> ContextResolver
Added dep to the ContextResolver
you got: at runtime you could switch the implementation
@SvenRuppert 127/165
126. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 127/164
Solution Nr 1
based on Java SE
if you want to get rid of the deps inside the factory.. create a registry
@SvenRuppert 128/165
127. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 128/164
Solution Nr 1
based on Java SE
if you want to get rid of the deps inside the factory.. create a registry
at runtime you could register / unregister implemenattaions..
@SvenRuppert 129/165
128. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 129/164
Solution Nr 1
based on Java SE
if you want to get rid of the deps inside the factory.. create a registry
at runtime you could register / unregister implemenattaions..
CDI will help...
@SvenRuppert 130/165
129. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 130/164
finally CDI ;-)
based on Weld / WELD-SE
instances are given from the container via @Inject
@SvenRuppert 131/165
130. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 131/164
finally CDI ;-)
based on Weld / WELD-SE
instances are given from the container via @Inject
@SvenRuppert
@InjectListlist; JAVA
132/165
131. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 132/164
finally CDI ;-)
based on Weld / WELD-SE
instances are given from the container via @Inject
@SvenRuppert
@Inject@CDILegacyTestListlist; JAVA
133/165
132. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 133/164
finally CDI ;-)
based on Weld / WELD-SE
instances are given from the container via @Inject
@SvenRuppert
@Inject@CDILegacyTestListlist;
@Produces@CDILegacyTest
publicListcreateList(...){...}
JAVA
134/165
133. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 134/164
finally CDI ;-)
based on Weld / WELD-SE
instances are given from the container via @Inject
@SvenRuppert
@Inject@CDILegacyTestListlist;
@Produces@CDILegacyTest
publicListcreateList(InjectionPointinjectionPoint,
BeanManagerbeanManager,ContextResolvercontextResolver){
....
}
JAVA
135/165
134. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 135/164
finally CDI ;-)
based on Weld / WELD-SE
instances are given from the container via @Inject
@SvenRuppert
@Inject@CDILegacyTestListlist;
@Produces@CDILegacyTest
publicListcreateList(InjectionPointinjectionPoint,
BeanManagerbeanManager,ContextResolvercontextResolver){
booleanb=contextResolver.resolveContext(...); //treffenderEntscheidungen...
if(b){returnnewLinkedList();}else{returnnewArrayList();}
}
JAVA
136/165
135. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 136/164
finally CDI ;-)
based on Weld / WELD-SE
instances are given from the container via @Inject
the time to create the instance is to early..
@SvenRuppert
@Inject@CDILegacyTestListlist;
@Produces@CDILegacyTest
publicListcreateList(InjectionPointinjectionPoint,
BeanManagerbeanManager,ContextResolvercontextResolver){
booleanb=contextResolver.resolveContext(...); //treffenderEntscheidungen...
if(b){returnnewLinkedList();}else{returnnewArrayList();}
}
JAVA
137/165
136. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 137/164
finally CDI ;-)
based on Weld / WELD-SE
but it could be done at runtime..
@SvenRuppert 138/165
137. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 138/164
finally CDI ;-)
based on Weld / WELD-SE
but it could be done at runtime..
decide as late as possible
@SvenRuppert 139/165
138. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 139/164
finally CDI ;-)
based on Weld / WELD-SE
but it could be done at runtime..
decide as late as possible
@SvenRuppert
@Inject@CDILegacyTestInstance<List>listInstance; JAVA
140/165
139. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 140/164
finally CDI ;-)
based on Weld / WELD-SE
but it could be done at runtime..
decide as late as possible
@SvenRuppert
@Inject@CDILegacyTestInstance<List>listInstance;
//..später
finalListlist=listInstance.get();
JAVA
141/165
140. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 141/164
finally CDI ;-)
based on Weld / WELD-SE
but it could be done at runtime..
decide as late as possible
@SvenRuppert
@Inject@CDILegacyTestInstance<List>listInstance;
//..später
finalListlist=listInstance.get();
@Produces@CDILegacyTest
publicListcreateList(InjectionPointinjectionPoint,
BeanManagerbeanManager,ContextResolvercontextResolver){
booleanb=contextResolver.resolveContext(...); //treffenderEntscheidungen...
if(b){returnnewLinkedList();}else{returnnewArrayList();}
}
JAVA
142/165
141. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 142/164
finally CDI ;-)
based on Weld / WELD-SE
static bound via AnnotationsLiteral:
@SvenRuppert
@Inject@MyQualifierListliste; JAVA
143/165
142. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 143/164
finally CDI ;-)
based on Weld / WELD-SE
static bound via AnnotationsLiteral:
Generics are not well supported
@SvenRuppert
@Inject@MyQualifierListliste; JAVA
144/165
143. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 144/164
finally CDI ;-)
based on Weld / WELD-SE
static bound via AnnotationsLiteral:
Generics are not well supported
but still complex to use
@SvenRuppert
@Inject@MyQualifierListliste; JAVA
145/165
144. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 145/164
CDI explained by code
Qualifier und AnnotationsLiterale
@SvenRuppert
@Inject@CDILoggerLoggerlogger; JAVA
146/165
145. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 146/164
CDI explained by code
Qualifier und AnnotationsLiterale
@SvenRuppert
@Inject@CDILoggerLoggerlogger; JAVA
147/165
146. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 147/164
CDI explained by code
Qualifier und AnnotationsLiterale
@SvenRuppert
@Inject@CDILoggerLoggerlogger; JAVA
@Producer@CDILoggerLoggercreate(...); JAVA
148/165
147. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 148/164
CDI explained by code
Qualifier und AnnotationsLiterale
@SvenRuppert
@Inject@CDILoggerLoggerlogger; JAVA
@Producer@CDILoggerLoggercreate(...); JAVA
@Producer@CDILoggerLoggercreate(..){
AnnotationsLiteralprodAL=contextResolver.resolve(..);
};
JAVA
149/165
148. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 149/164
CDI explained by code
Qualifier und AnnotationsLiterale
@SvenRuppert
@Inject@CDILoggerLoggerlogger; JAVA
@Producer@CDILoggerLoggercreate(...); JAVA
@Producer@CDILoggerLoggercreate(BeanManagerbm,ContextResolvercr){
AnnotationsLiteralprodAL=contextResolver.resolve(..);
returncreator.getManagedInstance(Logger.class,annotationLiteral);
};
JAVA
150/165
149. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 150/164
CDI explained by code
Qualifier und AnnotationsLiterale
you will get a dynamic AnnotationLiteral
@SvenRuppert
@Inject@CDILoggerLoggerlogger; JAVA
@Producer@CDILoggerLoggercreate(...); JAVA
@Producer@CDILoggerLoggercreate(BeanManagerbm,ContextResolvercr){
AnnotationsLiteralprodAL=contextResolver.resolve(..);
returncreator.getManagedInstance(Logger.class,annotationLiteral);
};
JAVA
151/165
150. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 151/164
CDI explained by code
Qualifier und AnnotationsLiterale
you will get a dynamic AnnotationLiteral
AnnotationsLiteral and class -> select the Producers
@SvenRuppert
@Inject@CDILoggerLoggerlogger; JAVA
@Producer@CDILoggerLoggercreate(...); JAVA
@Producer@CDILoggerLoggercreate(BeanManagerbm,ContextResolvercr){
AnnotationsLiteralprodAL=contextResolver.resolve(..);
returncreator.getManagedInstance(Logger.class,annotationLiteral);
};
JAVA
152/165
151. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 152/164
CDI explained by code
Qualifier und AnnotationsLiterale
Now... JavaFX with afterburner ...
@SvenRuppert 153/165
152. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 153/164
CDI explained by code
Qualifier und AnnotationsLiterale
Now... JavaFX with afterburner ...
apache licensed
@SvenRuppert 154/165
153. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 154/164
CDI explained by code
Qualifier und AnnotationsLiterale
Now... JavaFX with afterburner ...
apache licensed
as lean as possible: 3 classes, no external dependencies
@SvenRuppert 155/165
154. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 155/164
CDI explained by code
Qualifier und AnnotationsLiterale
Now... JavaFX with afterburner ...
apache licensed
as lean as possible: 3 classes, no external dependencies
combines: FXML, Convention over Configuration and JSR-330 / @Inject
integrated with maven 3
@SvenRuppert 156/165
155. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 156/164
CDI explained by code
Qualifier und AnnotationsLiterale
Now... JavaFX with afterburner ...
apache licensed
as lean as possible: 3 classes, no external dependencies
combines: FXML, Convention over Configuration and JSR-330 / @Inject
integrated with maven 3
under active development
@SvenRuppert 157/165
156. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 157/164
CDI explained by code
Qualifier und AnnotationsLiterale
Now... JavaFX with afterburner ...
apache licensed
as lean as possible: 3 classes, no external dependencies
combines: FXML, Convention over Configuration and JSR-330 / @Inject
integrated with maven 3
under active development
injection over a few steps is working
@SvenRuppert 158/165
157. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 158/164
CDI explained by code
Qualifier und AnnotationsLiterale
Now... JavaFX with afterburner ...
apache licensed
as lean as possible: 3 classes, no external dependencies
combines: FXML, Convention over Configuration and JSR-330 / @Inject
integrated with maven 3
under active development
injection over a few steps is working
postconstruct is working
@SvenRuppert 159/165
158. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 159/164
CDI explained by code
Qualifier und AnnotationsLiterale
Now... JavaFX with afterburner ...
apache licensed
as lean as possible: 3 classes, no external dependencies
combines: FXML, Convention over Configuration and JSR-330 / @Inject
integrated with maven 3
under active development
injection over a few steps is working
postconstruct is working
using existing CDI Services with Annotations (Scopes and so on) is not working with afterburner
@SvenRuppert 160/165
159. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 160/164
CDI explained by code
Qualifier und AnnotationsLiterale
Now... JavaFX with afterburner ...
apache licensed
as lean as possible: 3 classes, no external dependencies
combines: FXML, Convention over Configuration and JSR-330 / @Inject
integrated with maven 3
under active development
injection over a few steps is working
postconstruct is working
using existing CDI Services with Annotations (Scopes and so on) is not working with afterburner
no mixed mode with CDI and afterburner.fx
@SvenRuppert 161/165
160. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 161/164
CDI explained by code
Qualifier und AnnotationsLiterale
Now... JavaFX with afterburner.fx ... show the code ..
@SvenRuppert 162/165
161. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 162/164
CDI explained by code
Qualifier und AnnotationsLiterale
Now... JavaFX with CDI bootstrap ... code only..
@SvenRuppert 163/165
162. 20.10.2015 JavaFX8 - TestFX - CDI - JUG
http://localhost:63342/java-courses/doc/javafx-testfx-tdd.html#1 163/164
@SvenRuppert
http://www.rapidpm.org // http://www.codecentric.de
(privater) Tech - Newsletter -> Core Java, Reflection, IoT, uvm
Bei Interesse bitte bei mir eintragen -> plain old Zettel ;-)
g+: www.google.com/+SvenRuppert
github : github.com/svenruppert