 So, if you could please mute your phones, and otherwise, I'm happy to introduce Ondra Žiška, who is recently spending most of his time in programming tools for migrating applications and application servers as well, and that's the topic of his talk. So hello. Sorry for initial technical troubles. I wasn't able to make it displayed, and excuse me for my weak voice because I'm a bit ill. I would like to present to you Windup, which is a migration assistant by JBoss. It's a project which started about three years ago when some consultant wanted to automate his tasks when he comes to client and needs to analyze the application right away. But why should Windup be interesting also for you? What is Windup? Windup is a migration assistant, which is fluggable, modular, based on porch, rule driven, and that's just a few basic characteristics. I will introduce you each one. Excuse me, I need to put my phone out of the microphone, I guess. So Windup as a migration assistant, what it does. Imagine that you have, let's say, an eShop. You run it on a server. So you have your application on your server. But your server is relatively expensive because of licensing, because of hardware, because of any other additional costs, or you run on a really obsolete technology. So in that case, it costs you as well because you need to maintain it, you need to keep someone who understands the ancient technology. So you want to migrate, probably. And you consider migrating to a new shiny brand new server, which happens to be JBoss, of course. And so what to do with that? You take your application and you try to deploy it. And usually you end up with this, with the deployment exception. So you go into the source code and look what's wrong. But what if your application looks like this? It isn't just one war, or it isn't just one bundle, it's several, or like this, or this, or this. In that case, you are not probably going to use the same approach, opening IDE, and going through every one of them, when you consider the migration, whether to do it or not. And this is how the application may look like inside. So it's really a kind of chaos, and it may not be documented sometimes because the application can be 20 years old. And sometimes, even imagine that in a situation like this, some of the applications don't have the source code at all. You don't have the source code, and the people who made it are, let's say, unavailable. So what would you do in that case? Call windup. You would download windup and try it with windup. Windup is a tool which is exactly for this situation. You will run windup against your, let's say, year, which is a, in Java it means a bunch of applications somehow interconnected. And after it runs for several, in this case, hours, because it's quite complicated tasks, it comes up with a report. This is just one of the pages of the report, but it basically shows you some summarization, some statistics, some nice graphs, and then the details. I will show you what it produces later. Now, let's go to the demo. Windup is a console application. So windup is a CLI application, a console application, so currently this is the AS. Yeah, sure. Sorry. I will try to make it with, so windup is a CLI application, console application, so this is the only UI currently we have. There was also a graphical UI, but we dumped it for a while because it wasn't much used. It's, after all, used by developers and administrators. And the main output isn't graphical in terms of UI. It's graphical in terms of the report. So after scanning some of these, some of these parameters, you know that you are going to use mainly the input one. Here I have the application that I want to migrate. I will show you what's inside. Unfortunately, I cannot make it much bigger, but you can see that it's a normal year which contains one web application and some library and several files we use mainly for testing. But still there is some useful code which emulates how a real application looks like. This is a tiny one, so we can make it run only for a few minutes or few seconds, depends on your computer. But the principle is the same in bigger applications where the year is, for example, I don't know, 100 megabytes big. So I'm cheating a bit because I prepared the command here in advance. So let's look at the command. You cannot see it. So the command is basically running windup against an application which you have somewhere in your class, in your file system. Here is where you put the output and some flags basically for controlling whether to override the output. When you run it, windup, unzips it, then it decompiles it, then it scans through the class files or decompile Java files, then it scans the XML files, runs all the rules we have because, as I said, it's rule-based application and I will show you what the rule-based means later. And then it, every or majority of the rules scan the Java aspects of the application. Windup currently targets mainly Java application, Java EE applications. But it's actually a customizable tool and you can provide any rules you want. It doesn't have to be targeted for Java. It can be targeted also for .NET applications for C, I mean binary applications which were created by C. If you have a good enough decompiler, of course, that's one of the preconditions. And now it seems it's a bit stuck, which doesn't really happen always. It doesn't happen at all. But it usually, when it happens, it's during a demo. So I'll try it again. Okay. I'm running from master. So this happens when you run a demonstration on a master application. Master means the latest development code. So apparently we found a bug. I can tell my colleague there that we have to fix it. But I could, oh, I see, I'm not on Wi-Fi. That's right. Correct. Yeah. Because, of course, it should have stuck my mind. It's validating XML files against its DTDs or against its schemas which are defined as some online resources. So it's trying to download it. And because I'm on VPN still, but it doesn't connect, then there is a long time out. So we would wait for about six minutes. All right. So offline. Is it offline mode like this? I think so. Or offline. Or just offline. That's what I wanted to show you afterwards. But it's our documentation. Not offline. I'm here. Here it goes. All right. So this is the result. So this is the final report of the application. So the initial page currently isn't really nice because you only have one application. Usually there is for each application you have run against, you have one record. So let's look at our one application. Here is some report index which tells you how many accidents you find or found, wind up found, or how many issues you are going to see when you are going to migrate. What we are trying to do on this page is to tell you how much effort you will need to put into migrating your application from one platform to another. In this case, the first platform is WebLogic. And the target platform is JBLC AP6. So for this case, for this application, you would see several mandatory problems, several things that you have to fix, some potential issues and several optional. Optional means like, for example, if you want to upgrade, hibernate, you don't have to, but you can. Then the report contains a list of migration issues. This is a summarization. It's a statistic. Sorry. You can see it again. So I will make it bigger for you. And you can see the level of effort which is primarily good for assessing again the cost of the migration. For developers, the pages, the detailed pages are important. For example, we go down to the level of individual Java files. The main result for you as a developer are these reports. From the index pages, you go to individual sources and you see the particle places where the application has some issues. For example, here you can see that we are using the ghost for this line. You are using proprietary weblogic.transection helper. I will make it bigger again. And you need to replace it with something standard because Jbo's API sticks to the Java EE standards. So we encourage users to stick to the standards and replace the APIs with not Jbo specific but with the standardized Java EE APIs. So wind up is rule based. What does that mean? We have inside, wind up isn't just a bunch of scripts or hard coded Java code. It's a platform which runs rules and the rules are not biased towards any particle technology. It's written in Java but currently majority of the rules, especially the simple ones, look like this. You define a rule set and in that rule set you have several rules and the rules usually target particular knowledge piece. By knowledge piece I mean that you are an expert on some matter like how to migrate messaging API of weblogic into messaging, into Java messaging or other target technology. Most of the rules catch appearance of particular Java constructs which means imports, constructors, calling of a method or some annotation and the result is a hint on that line in the sources. And wind up then automatically creates all those statistics from it. The rules contain predefined conditions which for example can be Java queries, queries to the AST as I told you wind up decompiles Java classes or you can also scan source code. In that case you can query the source Java sources for particular constructs or you can scan XML files with XPath but these are just those we already implemented. You can implement any condition you like. Let's say you have a C project or Ruby and you want to scan your Ruby project so what you have to do is to implement your own condition and then implement wrapper for XML let's say for something to read the XML of your own choice format and then you would use it in the when part. Instead of XML file which matches some XPath you would have your own expression for matching Ruby constructs. Then there are predefined operations. As I told typically an operation is putting a hint on a particular line in the source code and it can be also XSLT transformation. It can also be a call of CLI command to JBCAP which makes it changes configuration and it can be a classification of the file. Let's say that you find annotation of entity on some Java class then you know that you can classify it as an entity being in which case it appears again in the statistics and it's on the EJB report which is another special report page of wind up report. Of course as I said you can code your own custom conditions and operations and in which case there is an API, Java API ready for you which is quite well documented nowadays and we are eagerly expecting your contributions if you like. The rules we were looking for some rule engine but none of them matched our expectations or our needs especially nested iterations because for example the rule engines which you probably know do not allow nested iterations or sometimes iterations at all. They target some different problems. They model processes. They don't model some scripting engine. The rules also have metadata by which you can enable or disable for example you are a developer which only focuses on JPA migration. So in that case you only enable those JPA related tags and you can of course write your own rules and contribute. Also one of the extension ways of wind up is that wind up is based on a life cycle. If you split the migration process into several parts then you can for example identify that you have some unzipping initial then there is the compilation then there is scanning of the Java files and in each of those life cycle phases you can put your own hook let's say and which means the rule and let it run right there. Wind up is modular. It's based on Jbosforge or Jbos modules and it's bugable. If you want to as I was talking about the rubby integration if you want to migrate your rubby applications you would do it as a new module. Simply you don't need to change the source code of the wind up core. You need to make your own module, put your own custom conditions and conditions and operations and wrap it into an add-on which is basically a jar and put it to wind up class path. It will just load it and if you made it well then you will have your add-on available and your operations available in the XML rules. Wind up is not just the application. Wind up is kind of ecosystem or community. It's primary or it's initial where it came from was Jbos consultants which usually come to site and they don't have much time to go through application of size of thousands of sub-applications. So they really need some substantial information in let's say a few minutes. So that's where it started but currently we are getting attention from everyday users migrating their applications because migrating happens quite often even between the versions. Upgrading is also kind of migration. You take your application which runs on all the versions of your server or of your let's say platform and you want to upgrade one or two major versions. So in this case you don't want to go one by one but you want to capture the knowledge of one developer into a rule and apply it on the rest of the applications so the other developers can spot the highlights without going through the code manually. Wind up is also migration knowledge base. We are building let's say starting to build knowledge base for migration specifically. If you go to windup.jbos.com, sorry Orc, you will see a links to currently it's hosted by Redhead Com, a knowledge base site. Then wind up is also the rules repository. Currently it works as a just simply as a GitHub repository but in the future we are probably going to make it something smarter. So you can on one place you could write your own rules and test it right away. You could put your knowledge, let's say you don't want to write the rule, you don't want to put it give it too much time but you want to just to make the idea not to die somewhere so you write it in a formula form and post it to our repository and someone may pick it up and write the rule. How much time do I have? Plenty, okay. We also have an Eclipse IDE plugin so you can imagine how it works. You open the project, run wind up plugin and it creates the quick fixes or how is it called so you can see right away in the IDE you can say 15, great, thank you. You can run the wind up plugin and Eclipse IDE will show you the particular places which are problematic and show you the hint what to do with the particular line. And also there is a main wind up plugin which you can use to run wind up regularly as a part of main build. So for example if you are if you have a continuous integration and you are in the process already of migrating the application then you can rerun nightly and push the reports to your management and they will see the progress. The next big step of wind up is to make it a service. Currently as you saw you run it as a CLI application, as a command line application but what would be nice would be if it was on a server and you could upload your application not necessarily to some public site but to your own internal site or cloud and wind up would scan it. It would analyze the application asynchronously, you would put it there in the evening and come in the morning and see how far you have got. And second, going through an HTML report which has the size of several dozens of megabytes isn't really neat. It's basically it halts the browser sometimes if we have some not really well-behaving JavaScript which you figure out but still on a computer with lower memory you can get into troubles. So what we want to do is to leverage the fact that wind up is backed by graph database and make it navigate you through the individual parts of the findings by clicking through it. So you could for example navigate by the individual applications or you could be in a source and click through the findings, you could find all the similar findings, you could navigate to let's say EJB and look where everywhere it is used and similar. It's similar to the find usages in your favorite IDE and wind up is also looking for anyone who can help the community, who can join the community. You are welcome especially if you are planning or already doing some kind of migration in which case you certainly have some knowledge about what causes the troubles and we would like you to put this information into the form ideally into the form of rules but also it can be just a text, you can send us an email, you can file a JIRA and we will then cover it with a rule set and your platform will be covered for the next time you migrate it or for the next time you migrate another application from the same platform to the same target platform. Also it would be great if you could share your applications. If you have any application which is shareable with public, if it's open source or anything and it's targeted for a particular platform especially non-Jables and it uses its specific APIs then we will be grateful if you shared the application with us because we would of course use it to extract the knowledge and see what are the points where the problems arise for the particular platform. If you want to see more about wind up go to the project site. The primary site is windup.jables.org from which you can get the documentation to the GitHub site. You can see what you can do to contribute. There are guides like the user guide or the rule developer guide and for the developers GitHub and how the core rules look like. I'm currently not connected but if I manage to connect to Wi-Fi I will show you some more rules. Now I have some questions for you. We have met really big applications so big that we were surprised that an application can get so big. How many applications do you think was in the biggest application, I mean year or group of applications we have seen so far? No, it was not one. It was not 25. It was way more. Orders of magnitude? 1,000? Who said 1,000 first? Okay. It's not. I think it was the guy in the back. So here's your card. Okay. Put it to someone who said thousands. So it is over 1,000. It is about 1,200 actually. And each of this application is about megabytes of class files. Now how many megabytes do you think that our current report has? I said that we have pretty huge HTML reports. It's divided into several files. But if you run against this biggest application we have seen so far, how large do you think that the biggest HTML file is? Which is the motivation for us to make it a service and a clickable web application. So how big do you think the biggest? Oh, not really. Not that big. A bit more. I think the closest match was the 20 megabytes. It is roughly 40 megabytes. Or 45 maybe. So now I will try to connect to the Wi-Fi. I see that some of you are already leaving. So thank you for your attention. And who wants to stay for a few more details about windup or who wants to ask something? Yeah, we have about five minutes. So any questions so far? If you don't have a source code, how will windup help you? Well, windup doesn't really need the source code. It's quite common situation that the source code isn't available at the time the analytic comes to the site. He only has the server, the running server, or the deployments themselves. So you run against the deployments and windup decompiles. We have internally we used two decompilers. Original windup, the ancient version used jet, but that wasn't really good for Java of the new versions of Java. It was good for Java 1.3. So currently we use Fernflower from JetBrains, from IDEA IDEA IDE. And then the Prozion by Mike Storble, which is kind of reworked Eclipse Decompiler. So you decompile all the sources, those which failed to decompile, that happens about 5% times you try it with the other one. And we get almost 100% of decompiled files. And the results are pretty good. It's not the same as the source code of your application, of course, because the formatting, I mean, because similar things, but it gives you really good results, including the annotations, including the generics. So it's really useful. The question is, well, I will not repeat the question, but restate what windup does in this situation. If you don't have the source code, it decompiles and does exactly the same report as you see here. So it really gives you the hints in particular lines, but it's not only oriented towards source code. It's also oriented towards configuration, because in the Java E applications, you can have the descriptors. You can have files which, let's say, in JBLS application server 5 or EAP 5, you had those JBLS-classloading.ac. XML. So that made the server to configure the class loading specifically for this application. And it's not supported anymore in the newer versions. So you either tell the user that this is not supported anymore and point him to the documentation, or you can also make the XML, if we know how to do it, if there is some matching one-to-one, and the logic is we can follow the logic of the original file, then we transform it using accessibility. And similar. There are some things which do not apply to a certain file or line, like, for example, if you use log4j, it's not recommended for the enterprise to use log4j or solif4j. So if we find this on class path, then we report it in the main report as well. And the conditions or the constructs found can be more complicated, but it gets more complicated to explain. So if you are interested in what you can do with windup, then you are welcome to come and have a look. But as I said, it's backed by a graph database, so we can, what we internally do in windup is that when scanning the pieces of the applications, we put the information into the graph. And this is where the plugability comes useful, because you, your plug-in, can actually access the information which was extracted by the other plug-ins, by the other conditions and other discoveries, discovering plug-ins. So you can see all the EJBs, you can see all the Hibernate entities or, sorry, JPA entities, you can see all the Java files, you can see those which, you can see also the findings on the hints, the problematic places already. You can see the annotations, and you can query the graph for whatever you want, and you get the result immediately. You don't have to scan yourself for these findings. You can go to the graph and get all the, let's say, all the places where you use annotation XYZ. So this is, this is how it's plug-able. Yes? Yes? Excuse me. It's complicated. There is an API which is called TinkerPop, and it has several implementations like Neo4j and ObjectDB. We are using, or we use TitanDB. TitanDB, yes. And TinkerPop is currently switching from 2.x to 3.0, and it was donated to Apache. I recommend it to your attention because it's a very interesting project, and the TitanDB as well was donated, and it has reached 1.0, and it's a really cool project to learn with. The question is whether Windup supports server configuration migration. It depends, because Windup is a platform. If you write rules for migrating the server configuration, then it supports it. But currently, we don't have many rules supporting it because we started work on it, but for the Jbos EE, sorry, Jbos EAP of the coming version, it was done a different way, which is much lighter. I have to admit that Windup has over 200 megabytes, so it's not something to distribute with a server which has about 150 megabytes, just for migration. But you can download it separately, and I think that over the time, there will be some rules for server migration will appear. Definitely for, I think that the rules for EAP upgrade will appear. If not by us, then by community. Thank you for the question. By the way, any more questions? We are out of time. Okay, we are out of time. Thank you for your attention.