1 00:00:06,000 --> 00:00:11,000 Hello, distance in Prius lesson, we have learned what modules are in decay? 2 00:00:11,000 --> 00:00:14,000 We also created our first modular application. 3 00:00:14,000 --> 00:00:21,000 In case you skipped the previous lesson, please make sure you watched it because in this lesson, we'll 4 00:00:21,000 --> 00:00:23,000 keep talking about modules. 5 00:00:24,000 --> 00:00:28,000 But this time will not create our module application from scratch. 6 00:00:28,000 --> 00:00:35,000 But instead, we'll focus our attention on the questions of migration of Nano Modular Java application 7 00:00:35,000 --> 00:00:37,000 to modular Java application. 8 00:00:37,000 --> 00:00:44,000 Also, this lesson will be interesting for architects who are in charge of Java migration and responsible 9 00:00:44,000 --> 00:00:47,000 for making decisions and planning next migration steps. 10 00:00:48,000 --> 00:00:53,000 You need to be aware about issues and solutions that we are going to discuss in this lesson. 11 00:00:54,000 --> 00:01:00,000 This is a super important topic, especially if your organization made a decision to migrate from Java 12 00:01:00,000 --> 00:01:07,000 eight to NAS, a long term support version like Java Plans that includes support of modules. 13 00:01:07,000 --> 00:01:14,000 And also, this is super important in case you decide to pass Oracle Java certifications, because some 14 00:01:14,000 --> 00:01:22,000 of the Oracle certifications include questions about migration to modular application, including top 15 00:01:22,000 --> 00:01:29,000 down and bottom up migration, and Split Ajala Agile Associates application into modules for migration. 16 00:01:30,000 --> 00:01:36,000 We'll start our lesson from learning and understanding of general algorithm for migration of our court 17 00:01:36,000 --> 00:01:41,000 to the new environment, including migration to the new version of Dedicate. 18 00:01:41,000 --> 00:01:47,000 Special focus today will be the migration of application to modular architecture. 19 00:01:47,000 --> 00:01:54,000 I will explain in one Java Class Dependency Analyzer tool is and what Java deprecated API is. 20 00:01:54,000 --> 00:01:57,000 Current tool is also we're going to learn today. 21 00:01:57,000 --> 00:02:04,000 Different migration strategies will review Bottom-Up and top-down migration strategies that start our 22 00:02:04,000 --> 00:02:05,000 lesson. 23 00:02:06,000 --> 00:02:13,000 And before I start diving in details, let's come up with steps and migration algorithm first, the 24 00:02:13,000 --> 00:02:15,000 step number zero and super important one. 25 00:02:16,000 --> 00:02:21,000 If you great internet, not sure that you would find this advice anywhere, but exactly as you said, 26 00:02:21,000 --> 00:02:23,000 was help make them a great deal. 27 00:02:23,000 --> 00:02:29,000 Worse software products two different versions and environments before any movements were scored that 28 00:02:29,000 --> 00:02:36,000 potentially may impact the way our program works, no matter whether this is refactoring or migrating 29 00:02:36,000 --> 00:02:41,000 and in what may impact or change code and the way how it is executed. 30 00:02:42,000 --> 00:02:45,000 Make sure that you have for libel suit of tests on different levels. 31 00:02:46,000 --> 00:02:51,000 The general recommendation here would be to automate as much as possible. 32 00:02:51,000 --> 00:02:57,000 Some of my clients say to me that this automation is a huge investments and they have dedicated manual 33 00:02:57,000 --> 00:03:04,000 regression time and cost wise, easy to understand the point you were talking about short periods of 34 00:03:04,000 --> 00:03:07,000 time and a not complex project. 35 00:03:07,000 --> 00:03:11,000 But I also saw projects where regression takes months. 36 00:03:11,000 --> 00:03:13,000 Nowadays, probably it is crazy. 37 00:03:13,000 --> 00:03:19,000 Amount of times it will add this software product to survive in the current environment, where your 38 00:03:19,000 --> 00:03:26,000 competitors are releasing new features each week or two weeks and your product only has regression for 39 00:03:26,000 --> 00:03:26,000 one months. 40 00:03:27,000 --> 00:03:27,000 Definitely. 41 00:03:27,000 --> 00:03:30,000 Is there a different areas and domains? 42 00:03:30,000 --> 00:03:31,000 Some of them more competitive? 43 00:03:32,000 --> 00:03:33,000 Some of them less. 44 00:03:33,000 --> 00:03:35,000 But I am sure you understood my point. 45 00:03:36,000 --> 00:03:42,000 So when my clients send me about not having enough resources on the creation of automation test and 46 00:03:42,000 --> 00:03:48,000 framework that includes small tests, use regression tests, etc., I'm asking a simple question. 47 00:03:49,000 --> 00:03:55,000 I am sure that in this case, you have enough resources and needs to halt any migrations. 48 00:03:56,000 --> 00:04:02,000 Probably it is better to put resources into product development, marketing to the market, find investments 49 00:04:02,000 --> 00:04:09,000 and come to the point where we have enough resources to scale and grow because otherwise we are not 50 00:04:09,000 --> 00:04:12,000 doing any migration just to do migration. 51 00:04:12,000 --> 00:04:20,000 We need to identify purposes of the migration and be sure that our migration brings some value and it 52 00:04:20,000 --> 00:04:21,000 is needed. 53 00:04:21,000 --> 00:04:27,000 And if it is needed, we're happy to accept all imports and provide everything what is necessary to 54 00:04:27,000 --> 00:04:28,000 make this happen. 55 00:04:29,000 --> 00:04:31,000 Here's where the first principle comes from. 56 00:04:32,000 --> 00:04:39,000 We need to identify goals of our migration and measures to stay specific and objective. 57 00:04:39,000 --> 00:04:46,000 What we are trying to achieve by performance, better security, better code design in order to be able 58 00:04:46,000 --> 00:04:48,000 to scale application faster. 59 00:04:49,000 --> 00:04:53,000 This is super important and once goal is defined. 60 00:04:53,000 --> 00:04:56,000 Make measurements of the current system. 61 00:04:56,000 --> 00:04:58,000 You need to have something and other. 62 00:04:58,000 --> 00:05:00,000 You can say communication has been successful. 63 00:05:00,000 --> 00:05:06,000 Often, migration trends are the goals were achieved because at the end of the day, we never the a 64 00:05:06,000 --> 00:05:09,000 factor on migration just for fun. 65 00:05:09,000 --> 00:05:12,000 We do it to get advantage of measurable benefits. 66 00:05:13,000 --> 00:05:14,000 Never forget about this. 67 00:05:15,000 --> 00:05:21,000 Let's agree it's within the scope of this particular demo will hold migration to another long term support 68 00:05:21,000 --> 00:05:28,000 Java release in order to achieve better structure in order to simplify introducing of new features, 69 00:05:29,000 --> 00:05:35,000 improving court architecture to make each release predictable and reduce impact of introducing new changes 70 00:05:35,000 --> 00:05:37,000 on already released codes. 71 00:05:38,000 --> 00:05:39,000 Improved security. 72 00:05:39,000 --> 00:05:46,000 We are achieving better encapsulation of components, greater platform integrity, improved performance. 73 00:05:47,000 --> 00:05:52,000 These are goals of Java platform Model S system and in case you missed the previous lesson. 74 00:05:52,000 --> 00:06:00,000 Please watch it because we discussed goals and benefits of modules in detail in previous lesson, and 75 00:06:00,000 --> 00:06:03,000 we agreed to migrate our app to the modular architecture. 76 00:06:04,000 --> 00:06:06,000 Let's review the following steps for this. 77 00:06:07,000 --> 00:06:14,000 The next thing that we need to do is to download the updated JDK version Java Platform Modular System 78 00:06:14,000 --> 00:06:17,000 finally was introduced in Java version nine. 79 00:06:18,000 --> 00:06:25,000 But as we discussed in the first lesson about JDK, I would recommend you to use long term support Java 80 00:06:25,000 --> 00:06:25,000 versions. 81 00:06:26,000 --> 00:06:28,000 Nowadays, we have two long term support versions. 82 00:06:29,000 --> 00:06:35,000 They are eight and 11 considering that we want to migrate our app to have modular application. 83 00:06:36,000 --> 00:06:39,000 Most likely, we would opt for Java version 11. 84 00:06:39,000 --> 00:06:43,000 But you also can opt for Java version nine if you wish. 85 00:06:44,000 --> 00:06:46,000 Wrong application was near adjudicate. 86 00:06:46,000 --> 00:06:48,000 This is also important step. 87 00:06:48,000 --> 00:06:54,000 Java ensures backwards compatibility, but still, there might be some changes. 88 00:06:55,000 --> 00:07:02,000 For example, if you used some options for garbage collector, pay attention that, for example, indicate, 89 00:07:02,000 --> 00:07:04,000 well, some of them removed. 90 00:07:05,000 --> 00:07:11,000 That's why, even despite Java guarantees backwards compatibility, it is never redundant to compile 91 00:07:12,000 --> 00:07:14,000 and run your app with new adjudication. 92 00:07:15,000 --> 00:07:20,000 Also, this might be important to ensure compatibility was a by your libraries. 93 00:07:20,000 --> 00:07:26,000 So the main goal is to run your app on the use adjudicate mission and to deal with this task. 94 00:07:26,000 --> 00:07:32,000 You need to be aware about new features in Japanese that you want to use for immigration. 95 00:07:32,000 --> 00:07:35,000 This can be easily found on the official websites. 96 00:07:36,000 --> 00:07:40,000 The first step would be to update third party dependencies if needed. 97 00:07:40,000 --> 00:07:47,000 So we need to make sure that your app was all external dependencies may be compiled, built and started 98 00:07:47,000 --> 00:07:51,000 successfully Ranji DApps against your project. 99 00:07:52,000 --> 00:07:53,000 Enthusiasm for familiar with J. 100 00:07:53,000 --> 00:07:55,000 DApps and don't know what it is. 101 00:07:56,000 --> 00:07:57,000 Let me quickly explain. 102 00:07:58,000 --> 00:08:05,000 Basically, this is a tool that is present in JDK to identify dependencies between classes, modules, 103 00:08:05,000 --> 00:08:07,000 packages in your app. 104 00:08:07,000 --> 00:08:12,000 It is a common line to runs a Java Class Dependency Analyzer tool. 105 00:08:13,000 --> 00:08:20,000 It processes Java bytecode, meaning the class files all the jars that contains them and analyzes the 106 00:08:20,000 --> 00:08:23,000 statically declared dependencies between the classes. 107 00:08:23,000 --> 00:08:30,000 The results can be filtered in various ways and can be aggregated to package or jar level. 108 00:08:31,000 --> 00:08:34,000 Knapp's is also fully aware of the module system. 109 00:08:34,000 --> 00:08:41,000 This is super important and useful for you to understand before you plan and immigration, and before 110 00:08:41,000 --> 00:08:47,000 you make any final decision about your modules and packages structured a little bit later. 111 00:08:47,000 --> 00:08:54,000 In this lesson, I am going to show you how to work with Jade DApps program Ramji that are scrum against 112 00:08:54,000 --> 00:08:55,000 your project. 113 00:08:55,000 --> 00:08:59,000 If you're not familiar with this, though, let me quickly explain what it is. 114 00:09:00,000 --> 00:09:07,000 This tool is a static analysis tools its concept jar file or some other aggregation of class files for 115 00:09:07,000 --> 00:09:10,000 usages of deprecated API elements. 116 00:09:10,000 --> 00:09:18,000 When you upgrade to the new version, you might be interested in this information to to update your 117 00:09:18,000 --> 00:09:19,000 code accordingly. 118 00:09:19,000 --> 00:09:26,000 Do not accumulate dependencies on deprecated classes and masses a little bit later today on the real 119 00:09:26,000 --> 00:09:30,000 example, I'm going to show you how to apply this to now. 120 00:09:30,000 --> 00:09:36,000 After all these steps, we're safe to proceed with the next steps on this stage. 121 00:09:36,000 --> 00:09:43,000 Having all necessary input information, we are ready to make a decision and plan the duration we need 122 00:09:43,000 --> 00:09:45,000 to select the migration strategy. 123 00:09:45,000 --> 00:09:47,000 Today, we'll discuss a few of them. 124 00:09:48,000 --> 00:09:53,000 Once you select migration strategy and plan migration steps, we're going to proceed with migration 125 00:09:53,000 --> 00:09:54,000 execution. 126 00:09:55,000 --> 00:10:02,000 Usually, Oracle and community release migration guides for each new version that contains important 127 00:10:02,000 --> 00:10:06,000 information that you need to consider during the migration of your app. 128 00:10:06,000 --> 00:10:10,000 One of such goods, I will leave in attachments to the lesson. 129 00:10:10,000 --> 00:10:17,000 But you can easily find similar guides for other versions, and each migration should be followed by 130 00:10:17,000 --> 00:10:18,000 regression testing. 131 00:10:18,000 --> 00:10:25,000 We already discussed that even before starting doing steps like this, we need to make sure that we 132 00:10:25,000 --> 00:10:32,000 have reliable sort of tests that will allow us to confirm that at least nothing is broken and migration 133 00:10:32,000 --> 00:10:33,000 goals are achieved. 134 00:10:34,000 --> 00:10:39,000 After that, we are ready to proceed with a step where you can apply measurements that you did before 135 00:10:39,000 --> 00:10:42,000 migration to verify region of migration goals. 136 00:10:43,000 --> 00:10:49,000 For example, if the goal was to improve performance, measure performance of your app after migration 137 00:10:49,000 --> 00:10:52,000 and if performance become even worse. 138 00:10:52,000 --> 00:10:55,000 The question is was immigration was successful? 139 00:10:55,000 --> 00:10:57,000 I don't think so. 140 00:10:57,000 --> 00:11:02,000 That means is that some steps still need to be done and planned. 141 00:11:02,000 --> 00:11:08,000 This migration should be adjusted to include additional steps to reach the goal of migration. 142 00:11:08,000 --> 00:11:09,000 Does it make sense? 143 00:11:10,000 --> 00:11:14,000 So now, like the reviews it, I'll Google one more time. 144 00:11:15,000 --> 00:11:16,000 Press pause if needed. 145 00:11:17,000 --> 00:11:24,000 And once you are sure about each step and the sequence of actions we are glad to proceed is a step number 146 00:11:24,000 --> 00:11:25,000 zero. 147 00:11:25,000 --> 00:11:26,000 I have separate course for that. 148 00:11:27,000 --> 00:11:30,000 You can check my course got and test during development. 149 00:11:30,000 --> 00:11:33,000 I elaborated a lot on this topic. 150 00:11:33,000 --> 00:11:36,000 Step number one is up to you and your organization. 151 00:11:37,000 --> 00:11:42,000 You should identify goals of migration internally, and I wouldn't be able to help you with that. 152 00:11:43,000 --> 00:11:45,000 Do not forget to perform any measurements. 153 00:11:45,000 --> 00:11:51,000 How long was a goal to compare these before immigration and after migration? 154 00:11:52,000 --> 00:11:57,000 Regarding the loading of the latest duplicate version, I believe if you already watching this lesson, 155 00:11:58,000 --> 00:12:03,000 you are smart and mature enough to download Oracle JDK or open JDK. 156 00:12:04,000 --> 00:12:07,000 After that, you need to run your project with new JDK. 157 00:12:07,000 --> 00:12:13,000 I'm sure you will be able to those that want the same as updates and third party dependencies too, 158 00:12:14,000 --> 00:12:18,000 and with the next step, probably let me help you with that one. 159 00:12:19,000 --> 00:12:26,000 Let me explain to you more about the app's program, how to use it and show this on live demo. 160 00:12:27,000 --> 00:12:33,000 So as we have discussed, GDP is a Java dependency analysis tool, probably the first questions that 161 00:12:33,000 --> 00:12:39,000 students ask me is where they can get the depth and the words they should download. 162 00:12:39,000 --> 00:12:45,000 I want to say that you don't need to worry about that if you have dedicated, download it on your PC. 163 00:12:46,000 --> 00:12:47,000 This program is already is. 164 00:12:47,000 --> 00:12:55,000 They're waiting for you in bin folder since Java version eight will work with this tool directly from 165 00:12:55,000 --> 00:12:56,000 Command Prompt. 166 00:12:57,000 --> 00:13:03,000 So make sure that you JDK pass configure it properly and that Jane Daps Version Command returns your 167 00:13:04,000 --> 00:13:05,000 result in command line. 168 00:13:06,000 --> 00:13:11,000 Let me show you a quick them in order you could understand how to work with this still. 169 00:13:12,000 --> 00:13:15,000 This told me on the last group of classes. 170 00:13:15,000 --> 00:13:21,000 Let me show you two examples now in the first example, I will show you how to analyze old fashioned 171 00:13:21,000 --> 00:13:25,000 clean Java project as a simple project we are going to use. 172 00:13:25,000 --> 00:13:32,000 My Java project was examples, the ones that are used to demonstrate different topics to students of 173 00:13:32,000 --> 00:13:32,000 mine. 174 00:13:33,000 --> 00:13:40,000 And then the second example will analyze more single modular project that doesn't have too much dependencies 175 00:13:40,000 --> 00:13:44,000 between different packages and modules in case you have a general project. 176 00:13:44,000 --> 00:13:51,000 The first thing that you need to do is to aggregate all components resources in one folder miserably 177 00:13:51,000 --> 00:14:01,000 Jr. Archive in separate lessons were learned such build tools and maven granule, et cetera, that those 178 00:14:01,000 --> 00:14:08,000 in charge of building your project, creating some deployable pieces like jars or walls, and now a 179 00:14:08,000 --> 00:14:14,000 specific case would need to generate just by our cells in the clips. 180 00:14:14,000 --> 00:14:21,000 I can easily do this by mouse, right click on the project, find them experts option and select the 181 00:14:21,000 --> 00:14:21,000 jar. 182 00:14:21,000 --> 00:14:23,000 File some options here. 183 00:14:23,000 --> 00:14:32,000 Now we need to specify jar pots and place where archive will be located and generated zen numerous of 184 00:14:32,000 --> 00:14:32,000 other options. 185 00:14:33,000 --> 00:14:37,000 Majority of them are so describing I want a stop on those. 186 00:14:37,000 --> 00:14:44,000 But even in case you have some questions, let me know in comments below this video and I will be happy 187 00:14:44,000 --> 00:14:44,000 to answer. 188 00:14:45,000 --> 00:14:47,000 Now one, we have jar file. 189 00:14:47,000 --> 00:14:49,000 We are ready to analyze it. 190 00:14:49,000 --> 00:14:56,000 I open it bush terminal in this folder and now executes my script in this directory. 191 00:14:57,000 --> 00:15:02,000 Commands that I'm going to execute is stored in a common dirt file. 192 00:15:03,000 --> 00:15:08,000 I store the script on the Zagat index so that you could investigate it later. 193 00:15:08,000 --> 00:15:12,000 Let me open this script and I will explain what is the reason here. 194 00:15:13,000 --> 00:15:16,000 This is actually to invoke Java dependency analysis. 195 00:15:17,000 --> 00:15:25,000 That output is a command line option to specify a destination directory for the file output, not file 196 00:15:25,000 --> 00:15:32,000 content is simple tags that can be copied and pasted into the online editor, for example, or other 197 00:15:32,000 --> 00:15:39,000 editors to generate graphs that visualizes dependencies will generate one in the middle. 198 00:15:40,000 --> 00:15:44,000 You can see that they use Dot after dot output option. 199 00:15:44,000 --> 00:15:51,000 If you are familiar with this character, then you already know that Daughtery first is a current directory. 200 00:15:52,000 --> 00:15:59,000 So this means is a dirt file will be generated in the current directory, whereas this command will 201 00:15:59,000 --> 00:16:00,000 be executed. 202 00:16:01,000 --> 00:16:03,000 The next option is recursive. 203 00:16:03,000 --> 00:16:11,000 This option recursive the traverses or runtime dependencies plus force option specifies directory was 204 00:16:11,000 --> 00:16:19,000 ClassPass, including external dependencies in our particular cases, with few external dependencies 205 00:16:19,000 --> 00:16:20,000 on different lessons. 206 00:16:20,000 --> 00:16:24,000 And I don't know that these jurors into my downloads folder. 207 00:16:25,000 --> 00:16:32,000 That's why I also included those here, and the last program argument is just to analyze. 208 00:16:33,000 --> 00:16:35,000 Basically, that is the ones that we built. 209 00:16:36,000 --> 00:16:42,000 It contains all classes from all packages of my training project that's executed the script. 210 00:16:43,000 --> 00:16:48,000 I wrote the name of the script to console and press enter. 211 00:16:49,000 --> 00:16:56,000 It takes some time to analyze dependencies, but finally, not file is generated in the current directory. 212 00:16:57,000 --> 00:17:02,000 Let's open it, and you can see that the content of this file is just text. 213 00:17:03,000 --> 00:17:05,000 It contains some specific structure. 214 00:17:06,000 --> 00:17:13,000 You can see dependency of each package on another package, probably when you have session load of packages. 215 00:17:14,000 --> 00:17:21,000 It is even better to use this text representation to analyze this data and think about structuring new 216 00:17:21,000 --> 00:17:21,000 modules. 217 00:17:22,000 --> 00:17:27,000 But still, if you want to visualize it, let's use special tools for that. 218 00:17:27,000 --> 00:17:31,000 We can find online tools to visualize our dependencies. 219 00:17:32,000 --> 00:17:36,000 For example, we can use just one of those I'm talking about. 220 00:17:36,000 --> 00:17:45,000 Map Graph is just Scorpion's based content of the file based here and press generate graphs button. 221 00:17:45,000 --> 00:17:50,000 That was easy, but you can see how much gross dependencies we are. 222 00:17:51,000 --> 00:17:51,000 Definitely. 223 00:17:51,000 --> 00:17:57,000 There is a lot of work here, considering this is a project and a lot of different topics. 224 00:17:57,000 --> 00:18:04,000 Some of them very often reuses some common glosses or packages, and that's why we have something like 225 00:18:04,000 --> 00:18:04,000 this. 226 00:18:05,000 --> 00:18:08,000 You can spend time after the lesson and used to get this. 227 00:18:09,000 --> 00:18:11,000 I added these files in to get this. 228 00:18:12,000 --> 00:18:16,000 So you will be able to find those in the directory of the project. 229 00:18:17,000 --> 00:18:23,000 Most likely, if you would, any great all project that doesn't have more destruction, you would see 230 00:18:23,000 --> 00:18:24,000 something like this. 231 00:18:25,000 --> 00:18:26,000 Or even worse. 232 00:18:26,000 --> 00:18:29,000 Well, most likely you will see worse. 233 00:18:30,000 --> 00:18:31,000 Sorry, but this is true. 234 00:18:32,000 --> 00:18:39,000 OK, let's move on, and now I'd like to show you how to work with this, though, if you would like 235 00:18:39,000 --> 00:18:41,000 to analyze modular application. 236 00:18:41,000 --> 00:18:46,000 And you remember, is it a previous lesson of the creative modular application? 237 00:18:46,000 --> 00:18:49,000 Let's analyze dependencies for that app. 238 00:18:50,000 --> 00:18:56,000 The idea is similar, but instead of Java, you can pass a reference to the director with your modules 239 00:18:56,000 --> 00:18:59,000 so you already can make a conclusion. 240 00:18:59,000 --> 00:19:06,000 ZG Depths Program has separate group of command line options for modular and non modular applications. 241 00:19:07,000 --> 00:19:12,000 These are common ones that they want to execute is also stored in shell script. 242 00:19:12,000 --> 00:19:16,000 Let me open the file and we'll discuss what is written here. 243 00:19:17,000 --> 00:19:22,000 Also to execute shell script in the other directory, I open terminal. 244 00:19:23,000 --> 00:19:30,000 As you can see, I use Module First Command Line option and pauses a reference to the directory where 245 00:19:30,000 --> 00:19:32,000 all my module is located. 246 00:19:33,000 --> 00:19:39,000 Another option is that modules to add modules to zero set for analysis. 247 00:19:39,000 --> 00:19:46,000 I use custom to add all modules in the directory as the last option here is the list is pretty familiar 248 00:19:46,000 --> 00:19:47,000 to you. 249 00:19:47,000 --> 00:19:49,000 This is for the output. 250 00:19:49,000 --> 00:19:55,000 Let's execute this script in the terminal and we have generated summary file. 251 00:19:55,000 --> 00:20:02,000 Let's copy content from here and let me paste this content on the website to generate the graph. 252 00:20:03,000 --> 00:20:09,000 As you can see, code I think moves at depends on coal. 253 00:20:09,000 --> 00:20:16,000 I think moves greetings module and Moses and the pass on Java based module. 254 00:20:16,000 --> 00:20:18,000 Is it clear for you? 255 00:20:18,000 --> 00:20:23,000 Press a pause for a minute and sync one more time about this live demo. 256 00:20:24,000 --> 00:20:24,000 Thank you. 257 00:20:24,000 --> 00:20:26,000 Samsung is still not clear for you. 258 00:20:27,000 --> 00:20:32,000 Please do not hesitate to pose your question below this video, and I will be happy to answer. 259 00:20:34,000 --> 00:20:40,000 On the screen, you can find common long options that you may use with great depths on the slide, you 260 00:20:40,000 --> 00:20:42,000 can find possible options. 261 00:20:43,000 --> 00:20:45,000 Module dependency analysis options. 262 00:20:46,000 --> 00:20:48,000 Options to filter dependencies. 263 00:20:48,000 --> 00:20:51,000 Options to filter closest to be analyzed. 264 00:20:51,000 --> 00:20:54,000 And as you can see, there are a lot of them. 265 00:20:54,000 --> 00:20:58,000 Probably it doesn't make any sense to me holding them off each option. 266 00:20:58,000 --> 00:21:03,000 I believe you understood the main principle, and so I would demo was few options. 267 00:21:03,000 --> 00:21:06,000 You can just play with other options if you want. 268 00:21:07,000 --> 00:21:11,000 Feel free to pause the Ouija if you want to read all comments on the slide. 269 00:21:12,000 --> 00:21:14,000 OK, let's proceed. 270 00:21:15,000 --> 00:21:21,000 The next thing that I am going to demo you is depressed, can't program, you have a deprecated API 271 00:21:21,000 --> 00:21:25,000 kind of tool is a common line tool to scan for users. 272 00:21:25,000 --> 00:21:29,000 So deprecated API elements of given Java class files. 273 00:21:29,000 --> 00:21:38,000 Input glosses can be given as a bosnich to a class file and directory or jar file, the same as G Deps 274 00:21:38,000 --> 00:21:44,000 G Deeper Scan also has been included in genica installation since adjudicate. 275 00:21:44,000 --> 00:21:48,000 That means you can find that in bin folder of Dedicate. 276 00:21:48,000 --> 00:21:54,000 And if you configure Java POS properly, you can access it from command line. 277 00:21:55,000 --> 00:22:01,000 I'm going to show you example, Wisconsin, of my learning project, I put Judy Proskauer in Shell script. 278 00:22:02,000 --> 00:22:08,000 The simplest way how to use this command is to invoke it and pass journal names that we would like to 279 00:22:08,000 --> 00:22:09,000 scan. 280 00:22:09,000 --> 00:22:12,000 I want to execute this script and get the bus. 281 00:22:12,000 --> 00:22:21,000 And again, it takes some time because Project has a lot of files and it is done on the top. 282 00:22:21,000 --> 00:22:24,000 You can see notifications in which classes are used. 283 00:22:24,000 --> 00:22:32,000 Deprecated masses Knowing this information, you can just check deprecated masses, usually in documentation 284 00:22:32,000 --> 00:22:38,000 is deprecated mass that it is specified which other mass that you should use instead. 285 00:22:38,000 --> 00:22:39,000 That is simple. 286 00:22:40,000 --> 00:22:40,000 I agree. 287 00:22:41,000 --> 00:22:45,000 And this command also has few important command line options. 288 00:22:45,000 --> 00:22:47,000 Definitely Zionism's MS engine. 289 00:22:47,000 --> 00:22:55,000 That program has but still something for you, at least to be aware of response if you want to explore 290 00:22:55,000 --> 00:22:56,000 all these in details. 291 00:22:57,000 --> 00:22:59,000 And if you're OK, I will continue. 292 00:23:00,000 --> 00:23:03,000 Now, let's review immigration strategies. 293 00:23:03,000 --> 00:23:09,000 We will cover case when a regional application is based on gender versions that is less than juvenile 294 00:23:10,000 --> 00:23:17,000 or it is Java nine or higher, but the modular approach wasn't originally implemented since the use 295 00:23:17,000 --> 00:23:19,000 of this mechanism is fully optional. 296 00:23:20,000 --> 00:23:26,000 M. relearned tools and went through the step where we did the line, which modules draft files are present 297 00:23:26,000 --> 00:23:30,000 in application and what dependencies exist between them. 298 00:23:30,000 --> 00:23:37,000 Also, another way to do that besides such automated tools of static code analysis as DApps is through 299 00:23:37,000 --> 00:23:42,000 an Iraqi eagle diagram, whereas these dependencies are represented in their way. 300 00:23:43,000 --> 00:23:49,000 This will help give an overview of the components of the application and of each of them, and in which 301 00:23:49,000 --> 00:23:51,000 orders it can be migrated. 302 00:23:51,000 --> 00:23:57,000 Identifying those who will not be able to adopt temporally or definitively. 303 00:23:58,000 --> 00:24:04,000 The later case can be given, for example, insert various libraries that have stopped offering support, 304 00:24:04,000 --> 00:24:06,000 and that will hardly become modules. 305 00:24:07,000 --> 00:24:12,000 There are two different migration mechanisms that responds to different initial situations. 306 00:24:13,000 --> 00:24:20,000 To illustrate the process in each of them, let's imagine the next scenario we plan to migrate an application 307 00:24:20,000 --> 00:24:25,000 that consists of three jars representing the different layers of the application. 308 00:24:26,000 --> 00:24:32,000 They are application services and utilize the diagrams that you can see on the screen. 309 00:24:32,000 --> 00:24:35,000 Now shows the dependencies between these lists. 310 00:24:36,000 --> 00:24:42,000 Where application depends on services and the tiers and services depends on the utils only. 311 00:24:42,000 --> 00:24:45,000 Let's review Bottom-Up migration first. 312 00:24:45,000 --> 00:24:52,000 In this strategy, initially, all jar files that are part of the application will be located at its 313 00:24:52,000 --> 00:24:53,000 ClassPass. 314 00:24:54,000 --> 00:24:56,000 All of them can be migrated one by one. 315 00:24:56,000 --> 00:24:58,000 Does the module POS? 316 00:24:58,000 --> 00:25:01,000 To do this, we need to follow describes steps. 317 00:25:02,000 --> 00:25:08,000 The first thing that we need to do is to choose a project package or layer was the lowest position in 318 00:25:08,000 --> 00:25:09,000 dependencies. 319 00:25:09,000 --> 00:25:12,000 Iraqi yet has not yet been migrated to module. 320 00:25:13,000 --> 00:25:17,000 That means to select the project that has less dependencies. 321 00:25:17,000 --> 00:25:20,000 In our case, this is your deals there. 322 00:25:20,000 --> 00:25:26,000 After that and the module info Java file to the project, it will be needed to. 323 00:25:26,000 --> 00:25:33,000 Ads are quite explicit statements to make current module packages available to Iraqi Higher Level Modules 324 00:25:33,000 --> 00:25:41,000 Moves Integrated Project as a named module from application's class bus to its module bus ensure that 325 00:25:41,000 --> 00:25:43,000 all not yet migrated. 326 00:25:43,000 --> 00:25:48,000 The modules remain as unnamed modules in application's class bus. 327 00:25:48,000 --> 00:25:52,000 What is unnamed modules were discussed in previous lesson. 328 00:25:52,000 --> 00:26:00,000 One of the learned modules types please refer to the previous lesson through use that, if needed after 329 00:26:00,000 --> 00:26:07,000 we did all this is this seems it remains to do is to repeat this process was the next lowest level packages 330 00:26:08,000 --> 00:26:10,000 list of projects in the Iraqi. 331 00:26:10,000 --> 00:26:15,000 That is not migrated yet, and we are progressing in the bottom direction. 332 00:26:15,000 --> 00:26:23,000 Can you understand now why this strategy is called bottom up when this approach works the best and when 333 00:26:23,000 --> 00:26:24,000 we need to apply? 334 00:26:24,000 --> 00:26:27,000 The bottom up migration strategy was the best one. 335 00:26:27,000 --> 00:26:33,000 We have the ability to modify any jar that has not yet been converted to module. 336 00:26:33,000 --> 00:26:41,000 It makes easier as a migration of the project's packages was a whole layers that are at the top of the 337 00:26:41,000 --> 00:26:47,000 dependency diagram and encourages care in what is exposed to other modules. 338 00:26:48,000 --> 00:26:54,000 The modules of the lower levels of the Iraqi will be found in the module costs without access to the 339 00:26:54,000 --> 00:26:56,000 packages of unnamed modules. 340 00:26:57,000 --> 00:27:03,000 While these unnamed modules that have not been migrated and allocated in the class, ClassPass will 341 00:27:03,000 --> 00:27:09,000 be able to access zip packages located in both class and module bus. 342 00:27:10,000 --> 00:27:11,000 Does it make sense so far? 343 00:27:13,000 --> 00:27:19,000 And now is immigration strategy would be top down in this strategy, initially, all jar files that 344 00:27:19,000 --> 00:27:25,000 are part of the application will be located at its model bus, so all non-immigrant its projects are 345 00:27:25,000 --> 00:27:27,000 treated as automatic modules. 346 00:27:28,000 --> 00:27:31,000 Greatest lesson I current or what automatic modules are. 347 00:27:32,000 --> 00:27:36,000 So please make sure you watch the previous lesson about modules. 348 00:27:36,000 --> 00:27:44,000 If you forget, this is example when I didn't use modular approach since it is optional in this case, 349 00:27:44,000 --> 00:27:47,000 it is recommended to frozen next steps. 350 00:27:47,000 --> 00:27:54,000 The first thing to do is to choose a high level project and the dependencies Iraqi that has not yet 351 00:27:54,000 --> 00:27:56,000 been integrated the module. 352 00:27:56,000 --> 00:28:03,000 After that, we need to add some module info gel file to the project to transform it from an automatic 353 00:28:03,000 --> 00:28:05,000 module to a named module. 354 00:28:06,000 --> 00:28:12,000 Also, we shouldn't forget to add necessary expert statements to make current module packages available 355 00:28:12,000 --> 00:28:20,000 to other modules and the necessary require statements that makes available OSM modules expose packages 356 00:28:20,000 --> 00:28:25,000 to the current one in case of the reference to a module not yet migrated. 357 00:28:26,000 --> 00:28:29,000 It should be done through its automatic module name. 358 00:28:29,000 --> 00:28:36,000 Once these have been migrated, these references should be changed to Z definitive module names. 359 00:28:37,000 --> 00:28:41,000 Repeat this process was the next high level component. 360 00:28:41,000 --> 00:28:44,000 Is Iraqi citizens not migrated yet? 361 00:28:44,000 --> 00:28:49,000 Then the stunt in which case is top down strategy needs to be applied and robust at best. 362 00:28:50,000 --> 00:28:55,000 This strategy is the best when you don't have the possibility of one day on the horizon. 363 00:28:55,000 --> 00:29:00,000 All the dependencies of the application was a temporarily or definitively. 364 00:29:01,000 --> 00:29:06,000 Also, the lower dependencies of the application have not yet been modularized. 365 00:29:06,000 --> 00:29:10,000 The application itself can be converted into morning. 366 00:29:10,000 --> 00:29:15,000 Named modules that have already been integrated will be found in the module. 367 00:29:15,000 --> 00:29:22,000 Boss was access to the entire code contained in the automatic modules that are also found in module 368 00:29:22,000 --> 00:29:22,000 path. 369 00:29:23,000 --> 00:29:23,000 Is that clear? 370 00:29:24,000 --> 00:29:26,000 And remember another important sync? 371 00:29:27,000 --> 00:29:31,000 In all cases, we have to avoid circle of dependencies between modules. 372 00:29:32,000 --> 00:29:34,000 That's all what I wanted to share with you in this lesson. 373 00:29:35,000 --> 00:29:37,000 Let's recap what we have learned today. 374 00:29:38,000 --> 00:29:44,000 After this lesson, you know, general algorithm to follow during the platform, migration to the new 375 00:29:44,000 --> 00:29:48,000 environment or in US adjudicate version in particular. 376 00:29:48,000 --> 00:29:57,000 I showed you how to use in practice Java Class Dependency Analyzer to also we used how to use Java deprecated 377 00:29:57,000 --> 00:30:05,000 API second to review of different migration strategies, namely, we bottom up and top down migration 378 00:30:05,000 --> 00:30:05,000 strategies. 379 00:30:06,000 --> 00:30:11,000 I hope you'll love this lesson and learned a lot of new useful sinks. 380 00:30:12,000 --> 00:30:13,000 Thanks a lot for your attention. 381 00:30:14,000 --> 00:30:17,000 Have a great day and see you in the next lesson.