tag:blogger.com,1999:blog-68685953125163766922024-03-13T21:55:25.856+01:00Enterprise Software Development with JavaEnterprise grade Java. <br>You'll read about Conferences, Java User Groups, Java, Integration, Reactive, Microservices and other technologies.Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.comBlogger796125tag:blogger.com,1999:blog-6868595312516376692.post-41473132241517092902024-03-05T11:49:00.004+01:002024-03-05T11:51:46.308+01:00A developer’s guide to setting supply chain security in DevSecOps<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE1KxYXQkQNRpaAaHfgWPUZbnu07MUB68byKJOtChEo1Nu_tiqN1Hh8ukdy-e-4lX7u7Bi4JPhsWwziyRkhK-GmFqDqE1096h2dntukX0wOyJo-TOebkdYTkOV9HBHqi8b9M1CQV540gv4o1LVVmBu3UnfnaNm9N-2dAlYjV_YslZNbg_byD3YDrFVEzJB/s667/2023_SupplyChainSecurity_EBook_art%20(1).webp" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="667" data-original-width="451" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE1KxYXQkQNRpaAaHfgWPUZbnu07MUB68byKJOtChEo1Nu_tiqN1Hh8ukdy-e-4lX7u7Bi4JPhsWwziyRkhK-GmFqDqE1096h2dntukX0wOyJo-TOebkdYTkOV9HBHqi8b9M1CQV540gv4o1LVVmBu3UnfnaNm9N-2dAlYjV_YslZNbg_byD3YDrFVEzJB/s320/2023_SupplyChainSecurity_EBook_art%20(1).webp" width="216" /></a>I missed to update you folks on a couple of things. If you are following me on Twitter or LinkedIn this went by your timeline some days ago already. But it is also time to add it to this blog. I have co-authored a little ebook that talks about the importance of DevSecOps for Developers and how it comes together with secure software supply chains.<p></p><p>Developers play a crucial role in implementing DevSecOps practices because they are responsible for writing the code that makes up the software. However, many developers don't have strong security backgrounds and might not be aware of the best practices to code, build, and monitor the software supply chain for their software factory.</p><p>This short guide provides a developer's introduction to software supply chain security, including the key principles, tools, and techniques you need to know to better audit and act on vulnerabilities in open source software components. Start integrating security guardrails across your software development life cycles to catch security issues early.</p><p>Threats to software supply chain security have forced a sea change in DevOps practices in favor of a DevSecOps strategy where security is a fundamental and ongoing aspect of the software development life cycle. Software engineering leaders mitigate software supply chain risks by focusing on the security of software components and dependencies early in the software development life cycle. They enforce integrated security gates at every phase for consistent, repeatable, and automated operations in the software factory.</p><p>The overall market is moving toward application platforms that can provide for the fast, secure, continuous deployment of great software experiences that companies compete by. But the reality is that enterprises often struggle with running these parallel tasks. Their challenges include the following:</p><p></p><ul style="text-align: left;"><li>Maintaining and improving legacy applications and infrastructure is complicated and places strain on already limited IT resources.</li><li>Building and running brand new applications using modern frameworks and cloud-native application architectures increases cognitive load for dev teams.</li><li>Security is often an afterthought that’s handled by security and IT operations teams at the end of the application development life cycle, with little to no collaboration with app development and other teams.</li><li>Disparate application security and DevOps tools, practices, and disjointed processes result in tool sprawl; this impedes collaboration, visibility, and productivity and increases the chance of human error.</li></ul><p></p><p>As a result, organizations often fail to catch security issues early, when they are easier and less expensive to fix. This increases the risk of security breaches and hinders the speed and efficiency of application development and delivery.</p><p>Download your free copy from <a href="http://developers.redhat.com" target="_blank">developers.redhat.com</a></p>Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0tag:blogger.com,1999:blog-6868595312516376692.post-31136940551402563172023-08-24T12:58:00.001+02:002023-08-24T12:59:26.686+02:00A running update and two confessions: I run because I like cookies and don't want to think for a while.<div style="text-align: left;"><blockquote>Another not so technical blog from me. If you want to get the latest, hottest and most interesting stuff around Java, Kubernetes, Modernization and things that move me on the technology side of things, find me on the <a href="https://twitter.com/myfear" rel="nofollow" target="_blank">bird side</a>, <a href="https://mastodon.online/@myfear/" rel="nofollow" target="_blank">Mastodon</a>, <a href="https://www.linkedin.com/in/markuseisele/" rel="nofollow" target="_blank">LinkedIn</a> or even Bluesky. </blockquote></div><p> I haven't written a blog post in a while (again) and still, I'm trying to get better at regularly reflecting on things around me. This blog somewhat is a continuation of my earlier thoughts around health, nutrition and how to find a path back into a healthy balance between responsibilities, goals, and health. My running journey now lasts a little longer than 6 months. It still feels very unreal to me, that I am actually capable of running 10km and more without getting out of breath. But I am. When I get asked, why I started and what I enjoy, I usually reply: I like cookies. And I do enjoy not having to think for a while. What looks like a joyful or sarcastic answer isn't. Let' me try to explain:</p><p><b>I am running because I like cookies</b></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-ID2u_vka7VuCoTkHhWqfb-f363ACSkEhFO2sQ70zM61dbyfG9JceiZw8gLEl0zXFzSjyoXGC4degLFtMjhPQBIYGTHiEQ1N5Jdb2XDChBYjCf0lLsrAqG_WySHZ-BcaOhLlCLpWVjdhKk-hENxSvS4ICM003RtRzhwyb7IfBYd-UGMLS3L-71BUPGans/s640/IMG_4687.jpeg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="640" data-original-width="480" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-ID2u_vka7VuCoTkHhWqfb-f363ACSkEhFO2sQ70zM61dbyfG9JceiZw8gLEl0zXFzSjyoXGC4degLFtMjhPQBIYGTHiEQ1N5Jdb2XDChBYjCf0lLsrAqG_WySHZ-BcaOhLlCLpWVjdhKk-hENxSvS4ICM003RtRzhwyb7IfBYd-UGMLS3L-71BUPGans/s320/IMG_4687.jpeg" width="240" /></a></div>While medical issues were the <a href="https://blog.eisele.net/2022/11/dieting-vs-nutrition-vs-rethinking-my.html">original reason</a> to lose weight and start exercising, running somewhat sneaked into my routine. What started with Apple Fitness and regular 30-45 minute walks around (like literally around) my hometown helped me to get to a point where it wasn't putting enough physical load onto my cardio-vascular system to even break a sweat. I could only walk that fast and wasn't really getting my heartbeat up anymore. But having written about my simplified picture of calorie intake vs. burn rate, I had to find a solution to this. That is where running came in. Because I simply wasn't ready to let go of my beloved cookies. And burning around 600 active kcal / day gives me that flexibility together with the rest of my diet. Some stats: On average I burn between 15k and 20k kcal per month with workouts. Roughly averaging around an hour a day of effort. I do not really do cheat days though. Which means, to protect my joints and body in general I switch between running days and walking days. To make up for the load difference, I tend to walk between 1 1/2 and 2 hours or at least a minimum of 10k steps per workout. This combination right now comes in at a total of almost 250km walking and running per month. Sounds impressive? It's the consistency that makes it look impressive. Think about how easy it is to spend an hour a day on anything. I just workout. And always remember, that I didn't start at the top. The stamina to do this was build up over at least 1 1/2 to 2 years. What is equally important to me is the routine. And the many friends I made on the way supporting me with cheers for my workouts. I have some very special friends sharing their workouts via Apple Fitness (thank you two! You know who you are!) but I am also on Strava for those of you in need of some extra cheers and motivation, I'll have it ready when you need it! <a href="https://www.strava.com/athletes/109704915" rel="nofollow" target="_blank">Follow me and let's connect</a>! <p></p><p>This part of the answer is actually true. I like to eat and I can not risk gaining weight again BUT I also want to eat cookies. Hence, I am keeping my original balance of intake vs. calorie burn in tact with running. Do not get me wrong. I am not advertising sugar or simple carbohydrates and I am also not trying to sell you cookies as a solution to anything except my personal cravings at this point. If you can do without and still are happy, please do. I can't :) </p><p><b>I am running because I like to not think for a while.</b></p><p>But enough about numbers. The other reason I like running is that I do not have to think. Despite the fact, that I am doing it comparably regularly, I am still a new runner. Most people I know run for pretty much their whole adult life and I was a darn late starter on this adventure. This directly results in much slower times and higher training loads compared to experienced runners. Or in other words: I have to be mentally present to finish a run. I can not just go out and assume I will get it done and let my thoughts wander off to nice places. I have to keep a certain focus (at least after some kilometers into the run). While my legs know exactly what they are supposed to do by now, this little guy on my shoulder keeps trying to convince me that nobody is chasing me and we ran enough by now and it would be time to stop this madness and just continue walking back home so we can go and eat some delicious cookies. This nemesis is the voice I am having very little conversations with. I am trying to stay deeply focused on my overall system status (joints, heart rate zones, sweat dropping in my eyes) while keeping eyesight onto the distant finish. All this includes a nice side effect: My brain is busy. Like in: I can not mull over future things or follow my fears or general unhandled problems in my life. This hour is dedicated to not only clearing my blood vessels and getting my heart pumping, it is also brain silence. And yes, I am technically still thinking but not about the things that make me worry or unhappy. I am happily busy and am able to let my subconscious do whatever it has to do. </p><p>The second part of the answer is also true. I do not worry that much anymore. And while my long and slow runs tend to be below 140 heart beats per minute (supposedly Z2 for me) I am relaxed enough and not really work out from them at all. Giving me an opportunity to take on the workday with a refreshed brain. </p><p>I am trying to jot down some more thoughts on running and my journey over the next weeks and months. Let me know if you want more of it. Remember, technical content will mostly be on my social media. Information half-life has become a lot shorter and I do not think it's worthwhile in my current situation to add a lot more blogging to it. I'd rather amplify what I do on other platforms (namely <a href="https://developers.redhat.com/authors/markus-eisele">developers.redhat.com</a>) and what others do on their platforms. Maybe I find the time to give this blog a new look and feel. Maybe.</p>Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0tag:blogger.com,1999:blog-6868595312516376692.post-14226989531009279802023-03-28T15:04:00.001+02:002023-03-28T15:04:16.752+02:00Public Speaking in 2023 - Some thoughts and 10 reasons.<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-K3C-YXkRW4m42EST5-ORSZTmGPaQrtvtDN3u-aLKxQ5q8SmfGlmO07jLNBjnBxxm6oNo678_sNF-Vsc8z4AQRbjyndAqMLjU4ZV-EsL0fVr0g0cICF577AK6n5jBNQ4RtZg_ZNgInvjXQQj7XsbJaF6taIeidwy3yHtxiXKuZi8Ar2RhTqKXD6D2Zg/s4032/IMG_1886.jpeg" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-K3C-YXkRW4m42EST5-ORSZTmGPaQrtvtDN3u-aLKxQ5q8SmfGlmO07jLNBjnBxxm6oNo678_sNF-Vsc8z4AQRbjyndAqMLjU4ZV-EsL0fVr0g0cICF577AK6n5jBNQ4RtZg_ZNgInvjXQQj7XsbJaF6taIeidwy3yHtxiXKuZi8Ar2RhTqKXD6D2Zg/s320/IMG_1886.jpeg" width="320" /></a></div>Some people have asked me, why I don't travel and speak at conferences anymore and I wanted to write about it anyway. So, here it is:<p></p><p>There are in fact some reasons. And while I initially thought I get away with just tweeting the few points, <br />I realised it’s more.</p><p>Also: Don’t think this is a goodbye or my official resignation as public speaker. It’s more my personal decision making list that I apply to every single request that reaches me offering a speaking slot somewhere. I will be around. Probably on-stage or on-cam occasionally and as much or little as you like to hear my wonderful German accent. I repeat: <br /><b>Not a goodbye! </b></p><p>1. Health. The most important one is that it's not good for my health. I've done this long enough and I'm at the point where I've seen hundreds of events and racked up a distance that covers 25 times around the world. It's just not as much fun anymore as it used to be when I was 10 years younger ;-) </p><p>2. CO2. TripIt estimates a total of 250 tCO2 for this just for the last 10 years. And I'm sure I missed some trips. I've done my damage. That's multiple times as much as an individual should have "consumed" during that time. </p><p>3. Online. We came a long way with streaming and video. I built out a little studio in my basement and can do a ton of presentations remotely. Yep, I miss the vibe. Yes, I miss seeing my audience. But this is the best I can offer now. And the thing I like the most is, that I can wear what I like and don’t have to put on shoes :)</p><p>4. Children. My kids aren't grown up yet. And I've missed way too many days already. So, I prefer to be with them over everything else. Yes, even conferences with amazing people and friends. Something I realised late is that there’s not a lot of legacy we leave behind. The important one for me are the two. I want to make sure they are able to stand on their own feet and get an opportunity to learn what’s necessary. Nobody knows how much time is left. Don’t read too much into this sentence btw. It reads deeper than it probably should.</p><p>5. Topics. Our industry is amazing and we keep reinventing the wheel over and over calling it different names. I've seen a lot. And it's harder to excite me year after year. I'd really like to not jump on every single new thing over and over just to be accepted at events. Let's try talking some sense into topics again and cover some basics. Nothing I could get accepted as paper at conferences anywhere. Seems as if we're all just looking for the next cool aid. That's not what I belive enterprise development should be looking for. </p><p>6. Budget. Everyone has been waiting for this. Macroeconomics aren't looking good. Money isn't available as it used to. Even coffee is shitty expensive. I want to do my part and not be part of the problem we're all seeing. If there's no reason to go but to talk 45 minutes in front of a crowd but it involves 2+ days of travel? I don't think this is the right thing to do right now.</p><p>7. Beer. Or alcohol and parties. I'm not a big social guy anymore. My life changed. The pandemic changed me. I haven't touched a drop of alcohol in a solid year and I don't think I want to anymore. It might have a fair place in social evening events and I am not judging anyone for enjoying it but I can't envision myself drinking water in the midst of beer central. And I also don't want to just stay at my hotel. Maybe we have to rethink how we run the social parts of conferences. Maybe I am just getting old and boring. </p><p>8. Schedules. My job changed plenty of times in my career. And I always had tight schedules. But working with an amazing team on tomorrows technologies and things that make developer’s lives easier is consuming a lot of attention. While I’ve been pretty good at working from wherever I wanted whenever I had to, I am enjoying the deeply focussed times more and more. It’s easier to get things done and meet deadlines without a toll on my health and a lot less stress. Also, I can fit my workout schedules into my days and not mess around with jetlag and timezones. </p><p>9. Political situation. Thankfully I was born in a country that lets me travel almost everywhere. And I have been traditionally very picky with choosing my destinations. The short list grows smaller year after year with recent events making it even harder to see some of the amazing engineers and developers in the east. I do not want to have to chose where I can and can’t go. </p><p>10. Next generation of speakers. I was tempted to start this sentence ranting about my age again ;) But you’d read too much into that again ;) There’s plenty of talented, engaged, curious, motivated, brilliant, young speakers out there that I think belong on stages. Across the world. Give them the opportunity to grow their career. To share what they know being in the stage light. There’s no point in seeing the same old dudes at every event talking the same things. Broaden your horizon. See someone talk who you’ve never listened to. </p><p>Turned out, it became not less than 10 reasons for me to be very picky with speaking engagements. And just maybe I have written this more for myself than for anybody else to have a good overview to point people to when I am asked about the why. </p>Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0tag:blogger.com,1999:blog-6868595312516376692.post-64553230206825535952022-11-11T14:23:00.013+01:002023-03-28T14:27:10.216+02:00Dieting vs. Nutrition vs. Rethinking my lifestyle<p></p><table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGxz05ijOpTEZisdZ1c0goYEIGtA81AjMudAXTjtiTBZp6E5KgN_ePw9yly9zF1TvppIcvolqr9PliiYl7jL3e1kUH0_fmZMcihomiuq_su30saKg3JdwEAGIpJ8_1GnSL166k4uoL6w9hYbAfykvuJ-uyDlrotOVmF1E3nsFSTWlHcNTklGAxVROdzw/s1280/1668158341205.jpeg" style="clear: right; margin-bottom: 1em; margin-left: 1em; margin-right: auto;"><img border="0" data-original-height="566" data-original-width="1280" height="142" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGxz05ijOpTEZisdZ1c0goYEIGtA81AjMudAXTjtiTBZp6E5KgN_ePw9yly9zF1TvppIcvolqr9PliiYl7jL3e1kUH0_fmZMcihomiuq_su30saKg3JdwEAGIpJ8_1GnSL166k4uoL6w9hYbAfykvuJ-uyDlrotOVmF1E3nsFSTWlHcNTklGAxVROdzw/s320/1668158341205.jpeg" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Found this at #AMS this morning. </td></tr></tbody></table><br />I talked to some people about how I managed to lose weight. Some were honestly surprised and happy for me but still curious about how I made this happen. Some other might want to learn from what I did and start over themselves. While trying to explain it with many words person to person, I finally had some time to write down my thoughts a little more detailed and cohesively. This is somewhat a self-reflective retro perspective and not advice or self-help blog. I summarise what and why it worked for me. Take what helps you and leave the rest. I am not looking for recognition, I am not looking for cheers, I love sharing and something in me hopes that this might help someone else. This is why I’ve written it down. Keep your negative thoughts or advice to yourself. <p></p><p><br /></p><p>I'm not a doctor or have any medical background. So, take this as what it is: an opinion from a single guy. I've been under medical surveillance on my journey. Still am. You should be too. Get a blood check, take a look at your vitamin levels, make sure you know how much and what kind of sport you're allowed to do at the weight you're at. That means, you’ll need to see more than one doctor. Also, don’t go to my GP. In general they should be the first to help you. Mine is different and I had to find a specialist that knew how to balance medication and sport. More on this later. Generally: Don't make it worse! Also: this is not your medical advise posting. I'll focus on what worked for me and my personal approach. This might not work for you. This probably isn't the wonder pill you're searching for. Just food for thought. The only food without calories, btw.</p><p><br /></p><p>I see all of this as a journey by now. After almost a year, I can confidently state that I've somewhat found my pace but it'll not be back again to the old life. I'll explain the why later on, for now it's important that I consider what I'm doing not a diet but a change in lifestyle. In my eyes this is crucial because it takes out the timeline. Many times before I thought, I'll loose a couple of kg and be done until the next time. Thinking about dieting in terms of sprints or exceptions from your life makes it sound bearable. But to me that is part of the problem and reason why I went through this some times before. I've always seen it as dieting and as such as an exception. It never stroke me that "my normal" could be part of the problem. I've always been and still am pretty self confident I guess and not questioning myself enough ;-) So, turns out, I had to rethink what I considered normal and adjust my approach. </p><p><br /></p><p>Being successful in changing it started with changing my mindset. I've lost weight before and gained it again. What drove me on this journey were side effects of medication I had to take because of me being overweight. Your motivation will for sure be completely different. What's important in my eyes is that you realise for what you're doing this. For your health and for yourself. Misinterpreting other people's expectations or felt standards and trying to be motivated to reach them never worked for me before. Having a medical reason to do this was key for my mind to finally click.</p><p><br /></p><p>Let's talk about how I envision this calories thing to work. In my mind, my body is like a car. With extra gas tanks in the trunk and some other places. Like with a car, the amount of gas I'm using is equal to the distance I can travel. If I travel longer distances, I need more gas. Idling requires less gas. Thankfully, unlike a car, you can't turn your body off. Your body is idling even if you're not moving. It consumes “gas” all day and night. This is what I call base calories or resting energy. When I'm taking my body out for a drive, it'll consume extra or active calories. When I am putting more gas into my tanks than I need, the car get’s heavier and grows in size. I'm smirking by the thought that my butt grows when I'm putting too much gas into my car. And yes, it’s more complicated, sugars or other good/bad carbohydrates and proteins and vitamins and and. Simplification always helped me to understand complex things better. Might be the reason I am fine with this simplistic world view. The formula to success for me is: “base calories + active calories >= calorie intake”. That is basically my mental model of how all of this works. You have all rights to scream: “that is not correct”! and be done reading this post if you like to. But this simple picture helped me to understand what’s going on. I needed to make sure there’s relatable and easy to apply logic available to me whenever I got to the point arguing about a cookie or two extra ones. Remember when I said, find a doctor? This is why! You can fulfil this equation and be successful by eating just cookies and other simple carbohydrates all day. But your car also needs more than gas: Oil, engine checks, break fluid, new wipers, wheels from time to time! </p><p><br /></p><p>Eating right is the key to get your car everything it needs. I think I am done remembering you about your maintenance windows (doctor!), but continue to refill the necessary working fluids and ingredients. Learn a little about what you are eating. I had to start with a very simple diet to get onto the right track. As I am a very binary person, I needed simple guidelines I can easily execute on at the beginning. I started changing my breakfast. From a full English breakfast to cereals. 40g oatmeal, 110g yoghurt, a handful of various nuts crumbled into it. Add some milk and you guessed it: Coffee. Roughly 500kcal to start the day. A year after, that is still my breakfast. I find it surprisingly hard to find the simple ingredients at hotel breakfasts, but I manage to replace/resize the portions/ingredients as I have choice in the meantime. Lunch and or dinner were a little more tricky. First action I took was to scrape all takeout from my list of options. And skip as many carbohydrates as possible. Replace normal pasta with pea or soy based versions. Leave potatoes and derivates out. It came down to a lot of vegetables and very little meat. While my girls slowly turned into flexitarians over the last years with little exceptions for white meat, this didn’t had to change a lot. We’ve skipped minced meat more often and switched to a mainly plant based nutrition. Salad included. I’ve tried keeping my palette very small in the beginning. To give me the guardrails I am talking a lot about in technology but also to understand the amount of energy in my food better. Yes, I have been counting calories again. It is somewhat unavoidable if you need to figure out the distance you can go with your car. Over time I started adding things back in. Going almost all vegetarian had a couple of positive side effects. I’ve never been hungry. I could eat as much as I wanted (almost). And all I had to concentrate on was the urge for things I did not allow myself. I almost forgot one of the bigger pieces here though. I am not drinking any alcohol anymore. Since last December. Remember that I told you that I am a binary person? I can only do or don’t do things. There’s very little in between. A decent Gin-Tonic has around 250kcal. My go-to drink very quickly becomes the equivalent of a full day's energy demands! So that was not cool and had to stop.</p><p><br /></p><p>So much for the intake side. You also need to find out about base calories and resting energy. There are very good and medically approved ways to find out about it and your doctor can help you with figuring it out. I did this on my own. Or almost at least. Apple to the rescue. Not the fruit but the company. I’ve had various Watches before and they turned out to be an easy health device to built into my days. If you open the fitness app (won’t hurt, go for it!) and take a look at the hated rings, you’ll clearly find your move and total calories. Subtract move from total and you have your resting calories. Consider it an estimate. And it ultimately didn’t matter to me in the first few months because I wanted to reduce intake aggressively to lose some of that excessive “gas” storage in my butt. But now I found out where my base is. My resting energy hovers around 2k calories/day. Whatever exercise I do on top consumes extra. So all I had to do is stay below with my intake. And this went insanely well. I lost the first 10kg within the first four months. </p><p><br /></p><p>I just recently were able to run almost 3km distance. That is 20 minutes. Running. Unthinkable for me, just some months back. Sitting at the airport right now waiting for my flight back home, I am aching to get moving again. It hasn’t been like this from the beginning. Moving has been a burden for me. Sport an unthinkable activity. BUT it is your magic key. I understood this from the beginning. But understanding and the ability to execute are two different things. I had to overcome a lot of mental hurdles to get myself moving at first. Again, a praise to Apple. Because with every new Watch you get a free couple of months worth of Apple Fitness+. And while I’ve paid for various gym memberships in the past few years, I’ve started working out at home. Alone. For myself. Without anybody (!) watching. I wanted to be left alone. The sweating, hard breathing mess I was making some first movements in front of the TV. And I have to acknowledge that I have never been excessively overweight. According to my BMI back then I just slid into being considered “overweight”. Still did not realise at that time how many limitations I already silently accepted in my movements. Jamie-Ray Hartshorne and his 20 minute beginner HIT workout marked the start of my success. While he almost killed me at first, it got easier over time. I’ve done this workout every single day. For a couple of months. Nothing else. I did not care about move or activity rings. I just did that workout. Until it started to be too easy. I slowly and steadily expanded my choices of trainings and started mixing in other trainers and programs.</p><p><br /></p><p>HIT is amazingly exhausting. HIT or High Intensity Training aims at intervals of excessive heart rate and rest times. It basically drives your car in the upper RPM ranges. And while this can be fun, and for sure helps burning calories, it isn’t the only thing my car needed. Our cars are pretty amazing things. The extra “gas tanks” they build out over time are meant as savings for bad times. Unlike with bank accounts, these savings quickly build up but can’t easily be withdrawn. Protein is a lot easier to convert into energy for our “cars” than fat is. What happens mostly, when you start loosing weight, you start losing muscle mass. Which is exactly the opposite of whats desired. Because muscles not only protect us, they also burn more base energy as fat does. This made me switch to strength trainings over time. Still in front of my TV. Still with Apple Fitness+. Up to today. I am bringing in more variety for sure. Extensive walks (sometimes up to 9min/km for as long as 12km length) or indoor cycling when I am travelling or just recently running. My overall “move goal” is around an hour a day. And move in this case really means: Sweating. Getting my heart rate up to at least 120 bpm for a reasonable amount of time. </p><p><br /></p><p>That’s it. The whole secret. I am off medication since a while. My blood pressure normalised and I can walk AMS Security to gate without breaking a sweat. I can wear cloths and brands again, I thought I’d never own ever again. (If that is a good thing or not might be a different blog post though…). Most importantly, I feel good. Like in: am at peace with myself. No feeling of restlessness anymore. I sleep better. I am more relaxed (most of the time) and have a lot more energy to focus on things. It has been a challenging but baseline positive experience for me. And even if your reading comes to an end here, my journey doesn’t. There’s no going back to what I used to call normal before anymore for me. THIS is my new normal. Eating (more) healthy, exercising (a lot) more, taking care of myself (more than ever before!). Stay healthy y'all.</p>Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0Bavaria, Germany48.7904472 11.497889520.480213363821157 -23.6583605 77.100681036178855 46.6541395tag:blogger.com,1999:blog-6868595312516376692.post-92134002544215175282022-05-03T13:01:00.000+02:002022-05-03T13:01:10.825+02:00Modernizing Enterprise Java<p>I haven't blogged in 4 years, 10 months, and 1 day. A long time. Many things have happened, and I have continued my journey mostly on Twitter and LinkedIn. But there's one thing in particular that I really want on this blog: My new book. Already released on October 21 but is still <a href="https://developers.redhat.com/e-books/modernizing-enterprise-java" rel="nofollow" target="_blank">available as a free PDF download</a> from the Red Hat Developer website. </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsT7K791HJTSxDJqtQOKoOm9Pa_uiqatA59QKWlul-e8XAvMoNiJM_Uelp1hSWhKfByTZ7AHPVfGSUzQlcSGQL6WHoWEpmOzsxz3pLygm8oqTqrXgRKKWpU5OyhpzKFxKqx5HbE-JngrujwLebsyeqydObPsd9nbEtuVe6R-aYLZnkrrhrVJJYc2Yi-w/s328/modernizing_cover.jpeg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="328" data-original-width="250" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsT7K791HJTSxDJqtQOKoOm9Pa_uiqatA59QKWlul-e8XAvMoNiJM_Uelp1hSWhKfByTZ7AHPVfGSUzQlcSGQL6WHoWEpmOzsxz3pLygm8oqTqrXgRKKWpU5OyhpzKFxKqx5HbE-JngrujwLebsyeqydObPsd9nbEtuVe6R-aYLZnkrrhrVJJYc2Yi-w/s320/modernizing_cover.jpeg" width="244" /></a></div><p>Thank you to my co-author <a href="https://twitter.com/natalevinto" rel="nofollow" target="_blank">Natale Vinto</a> for an amazing experience and result! </p><p>While containers, microservices, and distributed systems dominate discussions in the tech world, the majority of applications in use today still run monolithic architectures that follow traditional development processes. This practical book helps developers examine long-established Java-based models and demonstrates how to bring these monolithic applications successfully into the future.</p><p>Relying on their years of experience modernizing applications, authors Markus Eisele and Natale Vinto walk you through the steps necessary to update your organization's Java applications. You'll discover how to dismantle your monolithic application and move to an up-to-date software stack that works across cloud and on-premises installations.</p><p></p><ul style="text-align: left;"><li>Learn cloud native application basics to understand what parts of your organization's Java-based applications and platforms need to migrate and modernize</li><li>Understand how enterprise Java specifications can help you transition projects and teams</li><li>Build a cloud native platform that supports effective development without falling into buzzword traps</li><li>Find a starting point for your migration projects by identifying candidates and staging them through modernization steps</li><li>Discover how to complement a traditional enterprise Java application with components on top of containers and Kubernetes</li></ul><p></p><div><br /></div>Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0tag:blogger.com,1999:blog-6868595312516376692.post-51134900057330325812017-06-27T18:20:00.003+02:002017-06-27T18:21:52.800+02:00Reactive Microservices with Lagom & Java - DZone Refcard<div class="separator" style="clear: both; text-align: center;">
<a href="https://dzone.com/refcardz/reactive-microservices-with-lagom-and-java" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;" target="_blank"><img border="0" data-original-height="900" data-original-width="1200" height="240" src="https://4.bp.blogspot.com/--vb3qultp9s/WVKEhfSrPvI/AAAAAAABX40/E_XPEWVGfaUkzBaZ4O41GxPQaaDDub5EwCLcBGAs/s320/5721033-refcard-cover240.jpg" width="320" /></a></div>
Wow. I haven't blogged here in a while. Good news, the blog isn't dead and not going to die anytime soon. I'm just spending a lot of time blogging over at <a href="https://www.lightbend.com/blog" target="_blank">lightbend.com/blog</a> (Have you seen the monthly <a href="https://www.lightbend.com/blog?query=Tech+Digest" target="_blank">Lightbend Tech Digest</a> yet?) and also help developing additional content around our open source projects. Mostly Lagom. And I am very happy to announce that my first Refcard was published on DZone today: And it is about Lagom, obviously!<br />
<br />
Refcard #240<br />
<b><a href="https://dzone.com/refcardz/reactive-microservices-with-lagom-and-java" target="_blank">Reactive Microservices With Lagom and Java</a></b><br />
<i>The Reactive Microservices Framework</i><br />
<br />
This Refcard helps you with your first steps in Lagom. Lagom is a framework that helps you to build reactive microservices.<br />
<br />
Most microservices frameworks focus on helping you build fragile, single instance microservices - which, by definition, aren’t scalable or resilient. Lagom helps you build microservices as systems — Reactive systems, to be precise — so that your microservices are elastic and resilient from the start and don’t require extra plumbing around them.<br />
<br />
Building Reactive Systems can be hard, but Lagom abstracts the complexities away. Akka and Play do the heavy lifting underneath and developers can focus on a simpler event-driven programming model on top while benefitting from a message-driven system under the hood. Lagom provides an opinionated framework that acts like guide rails to speed you along the journey. Lagom tools and APIs simplify development and deployment of a system that includes microservices.<br />
<br />
Don't forget to check out your weekend reading list:<br />
<br />
<ul>
<li><a href="https://www.lagomframework.com/documentation/" target="_blank">Lagom Documentation</a></li>
<li>The <a href="https://github.com/lagom" target="_blank">Lagom GitHub</a> project</li>
<li><a href="https://www.lagomframework.com/get-involved.html" target="_blank">Get involved and contribute</a></li>
<li><a href="https://info.lightbend.com/COLL-20XX-Reactive-Microservices-Architecture-RES-LP.html" target="_blank">Reactive Microservices Architecture</a> by Jonas Bonér</li>
<li><a href="https://info.lightbend.com/COLL-20XX-Developing-Reactive-Microservices_RES-LP.html" target="_blank">Developing Reactive Microservices</a> by me.</li>
</ul>
Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0tag:blogger.com,1999:blog-6868595312516376692.post-1313418805322738782017-02-16T10:15:00.001+01:002017-02-16T10:15:18.797+01:00From Microservices to Distributed Systems - Survival guide for Java Developers<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-rdXDaQ2yj88/WKVtlB5rrPI/AAAAAAABSi4/26diqLvX7Xk3xmoR4lU-I4riCOnNW-btgCLcB/s1600/1339539199_67bfdb8356_z.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="320" src="https://2.bp.blogspot.com/-rdXDaQ2yj88/WKVtlB5rrPI/AAAAAAABSi4/26diqLvX7Xk3xmoR4lU-I4riCOnNW-btgCLcB/s320/1339539199_67bfdb8356_z.jpg" width="290" /></a></div>
It kind of feel like the hype for Microservices is slowly coming down to earth and our industry is starting to realise, that a system according to the architectural paradigms behind Microservices can't easily be created by just exposing some HTTP interfaces on top of existing components. We do seem to have agreement on the necessity of having service optimised infrastructures, cultural and organisational changes and last but not least the outer architecture or orchestration for these architectures. The parts, that many Java developers still seem to struggle with are the concrete system architecture and the fact, that Microservices are nothing else than Distributed Systems. Unfortunately it's exactly these knowledge areas that decide about success of failure of your project. For a little bit of background, I suggest reading the <a href="https://www.infoq.com/news/2017/02/microservices-design-observe" target="_blank">wonderful InfoQ interview with Uwe and Adrian</a> done by Daniel Bryant.<br />
<br />
<b>Why Microservices again? Can't I just be happy and write EJBs and Servlets?</b><br />
The key idea with microservices are the properties that support independence of the rest of the application landscape and quick evolvability. Additionally, they should scale independently and require less resources than application server based applications. In a world with constantly changing business requirements and growing number of application clients, centralised infrastructures are getting way to expensive to operate and scale towards unpredictable load or load peaks. If we all would be stuck with application servers, we wouldn't have Netflix, Twitter or Amazon. So: No. You can't just stay where you are.<br />
<br />
<b>Microservices are Distributed Systems. What's so special about them?</b><br />
The original definition of a distributed system: "A distributed system is a model in which components located on networked computers communicate and coordinate their actions by passing messages." (<a href="https://en.wikipedia.org/wiki/Distributed_computing" target="_blank">Wikipedia</a>) And this is exactly what happens in Microservices based architectures. The individual services are deployed to cloud instances, physically running somewhere and they exchange messages. This is a big difference to how we used to build centralised applications. Instead of having a bunch of servers in our datacenter that handle all kinds of synchronisation, transaction and failover scenarios on our behalf, we now have individual services which evolve independently and aren't tied to each other. There are some fundamental challenges that are unique to distributed computing. Among them is fault tolerance, synchronisation, self healing, backpressure, network splits, and many more.<br />
<br />
<b>Aren't Distributed Systems what everybody calls Reactive Systems?</b><br />
It's more complicated than that. And honestly, there is a lot going on with the word "Reactive" itself these days. To build an application or system out of individual Microservices, you need to use a set of design principles to make them Reactive, Resilient, Elastic and Message Driven. If that sounds familiar, you are probably right. The definition from the <a href="http://www.reactivemanifesto.org/" target="_blank">Reactive Manifesto</a>. A distributed system which implements the four traits of the Reactive Manifesto is what should be called a <a href="https://www.lightbend.com/reactive-programming-versus-reactive-systems#reactive-systems-and-architecture" target="_blank">Reactive System</a>. You can read more about the <a href="http://www.oreilly.com/programming/free/reactive-microservices-architecture.html" target="_blank">design principles of Reactive Microservices Systems</a> in Jonas' book. The <a href="http://www.lagomframework.com/" target="_blank">Lagom framework</a> is build on those principles, but let me be clear, that you don't necessarily need a specific framework or product to build these kind of applications. Some of them just make you a hell lot more productive and your operations more effective. Hugh McKee has another <a href="https://www.lightbend.com/blog/designing-reactive-systems-with-the-actor-model-free-oreilly-book-by-hugh-mckee" target="_blank">free book on design principles for Actor based systems</a>.<br />
<br />
<b>What are the options to build a Microservice based System?</b><br />
I personally see two different trends of solving the problems related to Microservices today. First is to push the problems down to orchestration or datacenter operating or cloud systems like DC/OS, OpenShift, Cloudfoundry, and alike. The second solution is to natively handle them on the application or framework level (Akka, Vert.x, et al).<br />
<br />
<b>One container per service, or why an Anaconda </b><b>shouldn't </b><b>swallow a horse.</b><br />
Let's look a little more detailed at the first approach. Write a microservice, package it together with the runtime in a little container and push it to the cloud. As we're all full stack, DevOps developers these days, it's easy to create the meta information needed for cloud based runtimes. Thanks to my bootiful service, all relevant monitoring information is exposed already and I can easily detect failing services and restart them. And this for sure works. You can even use a full blown application server as Microservice runtime. Plus, there are a lot of magic frameworks (NetflixOSS) which help with fighting the distributed systems challenges. The drawback for me personally is the tight coupling with the infrastructure in this case. Your system won't be able to run on anything else but the platform of choice. Further on, they suggest that you just need to use containers to solve all problems in the Microservices world. Looking back at the Reactive Manifesto, these type of systems won't help you with the requirement to use <a href="http://www.reactivemanifesto.org/#message-driven" target="_blank">messaging</a> between services.<br />
<br />
<b>Microservices without Containers? That's Peanut without Butter!</b><br />
True. Containers do one thing very well. Package the complete stack in a controllable way into a deployable unit. They are isolation mechanisms on the infrastructure level. And having a container standard might actually be a good thing. So, keep your containers. But you need more. <a href="https://www.lightbend.com/reactive-programming-versus-reactive-systems" target="_blank">So the key to building Resilient, self-healing systems</a> is to allow failures to be: contained, reified as messages, sent to other components (that act as supervisors), and managed from a safe context outside the failed component. Here, being Message-driven is the enabler: moving away from strongly coupled, brittle, deeply nested synchronous call chains that everyone learned to suffer through…or ignore. The idea is to decouple the management of failures from the call chain, freeing the client from the responsibility of handling the failures of the server. No container or orchestration tooling will help you to integrate this. You are looking at Event Sourcing. The <a href="https://www.infoq.com/articles/microservices-aggregates-events-cqrs-part-2-richardson" target="_blank">design concepts</a> for an event-driven architecture, using event sourcing, align well with Microservices architecture patterns.<br />
<br />
<b>Reactive Programming, Systems, Streams: Isn't that all the same?</b><br />
Reactive has become an overloaded term and is now being associated with several different things to different people—in good company with words like “streaming”, “lightweight”, and “real-time. ”Reactive Programming offers productivity for Developers—through performance and resource efficiency—at the component level for internal logic and dataflow management. Reactive Systems offers productivity for Architects and DevOps—through resilience and elasticity—at the system level, for building Cloud Native or other large-scale distributed systems. You should really take the time and read how Jonas Bonér and Viktor Klang <a href="https://www.lightbend.com/reactive-programming-versus-reactive-systems" target="_blank">explain the individual differences between them</a>.<br />
<br />
<b>Where can I learn more about how to design Reactive Microservices?</b><br />
James Roper did a great talk at last year's Reactive Summit and took a hands on look at how the architecture of a system, including the flow of data, the types of communication used, and the way the system is broken down into components, will need to change as you decompose a monolith into a reactive microservice based system.<br />
<br />
<div class="video-container">
<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/ofxbypDz4h8?rel=0" width="560"></iframe>
</div>
<br />
I did a talk at the CJUG about <a href="http://blog.eisele.net/2016/07/cqrs-with-java-and-lagom.html" target="_blank">CQRS for Java Developers</a> which gives you an intro. If you have particular topics that you are interested in, please let me know in the comments.<br />
<br />
<b>More Reading for you </b><br />
<br />
<ul>
<li>Jonas Bonér & Viktor Klang Explain <a href="http://www.lightbend.com/blog/lightbend-podcast-reactive-programming-vs-reactive-systems-explained" target="_blank">Reactive Programming vs Reactive Systems in 20 min</a></li>
<li>Konrad did a webinar lately about <a href="http://www.lightbend.com/blog/exploring-reactive-integrations-java8-akka-streams-alpakka-kafka" target="_blank">Reactive Integrations in Java 8 with Akka Streams, Alpakka and Kafka</a></li>
<li><a href="http://www.lightbend.com/blog/the-basics-of-reactive-system-design-for-traditional-java-enterprises" target="_blank">The Basics Of Reactive System Design For Traditional Java Enterprises</a></li>
<li>Duncan DeVore on <a href="http://www.lightbend.com/blog/understand-reactive-architecture-design-and-programming-in-less-than-12-minutes" target="_blank">Reactive Architecture, Design, And Programming In Less Than 12 Minutes</a></li>
</ul>
Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0tag:blogger.com,1999:blog-6868595312516376692.post-87052049212841892172016-12-20T10:19:00.004+01:002016-12-20T10:41:58.572+01:00No, being wary doesn't hurt Java. A comment about Java licensing.<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://3.bp.blogspot.com/-HKkqFiBUZ7M/WFjwGxglJbI/AAAAAAABQfg/Ni9BUi7fPOojI3nmL27RJmAj0vckHcr-gCLcB/s1600/java_terms.jpeg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="158" src="https://3.bp.blogspot.com/-HKkqFiBUZ7M/WFjwGxglJbI/AAAAAAABQfg/Ni9BUi7fPOojI3nmL27RJmAj0vckHcr-gCLcB/s320/java_terms.jpeg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Screenshot from the Oracle Website (<a href="http://www.oracle.com/technetwork/java/javase/terms/index.html" rel="nofollow" target="_blank">source</a>)</td></tr>
</tbody></table>
So. Oracle want's to make money from Java. And The Register published a very <a href="http://www.theregister.co.uk/2016/12/16/oracle_targets_java_users_non_compliance/" rel="nofollow" target="_blank">polarising piece with a super catchy</a> title about it. According to their sources, "Oracle is massively ramping up audits of Java customers it claims are in breach of its licences". While the Twitter-verse went ballistic about people criticising Oracle's behaviour, I want to take a minute to recap, why I am against this method and clarify, that the normal developer and user have nothing to fear!<br />
<br />
<b>People complaining about Oracle are hurting the community</b><br />
You know me in and around the Oracle-sphere since many years. And tweeting at the moment is probably the most important part of how you can get the lastest news about me. I rarely post on this blog lately, because there is so much to do and I do a bunch of posts for my employer already.<br />
The tweet I send was basically the title of The Register article and replies and reactions implied that just by spreading a FUD article, I am hurting the community. Let's look into the details.<br />
<br />
<b>Are Java developers affected?</b><br />
<b><i>NOTE: First of all, I am not a lawyer. This isn't mean to be a legal advice! If you are in doubt over your compliance to the BCL, contact a licensing lawyer, your local Oracle User Group or Oracle.</i></b><br />
<br />
NO. We are covered. The Binary Code License (BCL) explicitly mentions:<br />
<br />
"Oracle grants you a non-exclusive, non-transferable, limited license without fees to reproduce internally and use internally the Software complete and unmodified for the purpose of designing, developing, and testing your Programs."<br />
(<a href="http://www.oracle.com/technetwork/java/javase/terms/license/index.html" rel="nofollow" target="_blank">BCL, April 2013</a>)<br />
<br />
There are some cases you should be aware of.<br />
<br />
"You may not use the Commercial Features for running Programs, Java applets or applications in your internal business operations or for any commercial or production purpose, or for any purpose other than as set forth in Sections B, C, D and E of these Supplemental Terms."<br />
(<a href="http://www.oracle.com/technetwork/java/javase/terms/license/index.html" rel="nofollow" target="_blank">BCL, April 2013</a>)<br />
<br />
- If you use a commercial feature in your local environment and stage it to test, you might not be covered.<br />
- If you are accessing any of the JMX MBeans under oracle.jrockit.management and bea.jrockit.management to enable observation of a running JVM, independently of the monitoring solutions, you are not covered.<br />
- Flight Recorder, Mission Control and everything mentioned in the below linked PDF are commercial and you can only use them on your local machine.<br />
<br />
A complete list of commercial features is listed in Table 1-1 on page 5 of the <a href="http://www.oracle.com/technetwork/java/javase/documentation/java-se-product-editions-397069.pdf" target="_blank">Java SE product edition description (PDF)</a>. As a general rule of thumb, make sure to NOT use the -XX:+UnlockCommercialFeatures option.<br />
<br />
This mostly affects companies who are already Oracle customers and have access to the commercial features, that are most interesting (e.g. MSI Enterprise installer). Funny enough, WebLogic for example includes a Java SE license (<a href="https://docs.oracle.com/cd/E23943_01/doc.1111/e14860/products.htm#FMWLC109" target="_blank">random product link</a>).<br />
<br />
<b>I'm still afraid, what are the alternatives?</b><br />
You can go with various alternatives. First of all, there is the <a href="http://openjdk.java.net/" target="_blank">OpenJDK</a> itself. Windows builds are a little tricky, as they are not available directly from the project. Only latest development releases are available for Windows. But you can also get binaries from Azul (<a href="http://www.azul.com/downloads/zulu/" target="_blank">Zulu</a>) and <a href="https://developers.redhat.com/products/openjdk/overview/" target="_blank">Red Hat</a>. If you are a Red Hat customer of any JBoss Middleware product, you also get support from them.<br />
<br />
<b>Why do I dislike what Oracle does?</b><br />
I do like, that Oracle is sponsoring the Java development and I acknowledge that they invest significant manpower into the project. But that doesn't get them a carte blanche to get away with everything.<br />
My main point of criticism is, that Oracle makes it easy to accidentally use commercial features. And yes, as people on Twitter pointed out, you should have just read the license and know about it. But as a matter of fact, I believe that separation of concerns is a good design decision. Instead of directing potential customers and users from the OpenJDK site to java.oracle.com with the comment "which are based largely on the same code" and not even distantly mentioning, that these do contain commercial features which you aren't allowed to use, it would be easier to have separate commercial and open source builds.<br />
<br />
If you click around on the Oracle Java website you have a couple of hints at Licenses. But they don't get you the full picture.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://2.bp.blogspot.com/-EVej1fszvTQ/WFj0mVCqpsI/AAAAAAABQfs/qOXgvRFh4pgBAQnAG4hQYNMK_3J9IeoUgCLcB/s1600/java-license-overview.jpeg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="180" src="https://2.bp.blogspot.com/-EVej1fszvTQ/WFj0mVCqpsI/AAAAAAABQfs/qOXgvRFh4pgBAQnAG4hQYNMK_3J9IeoUgCLcB/s320/java-license-overview.jpeg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Java SE Licenses overview page (<a href="http://www.oracle.com/technetwork/java/javase/overview/licensees-jsp-136136.html" rel="nofollow" target="_blank">source</a>)</td></tr>
</tbody></table>
<br />
And there are plenty of more examples. The number one search result from (my personalized) Google for "Java License Business" leads to <a href="http://www.oracle.com/technetwork/java/javase/training/javaforbusiness-136960.html" rel="nofollow" target="_blank">this page for example</a>. Speaking of misleading information, I think, this is a good example. If license conditions aren't well known, it's also easier to change them. Which probably hasn't been the case, since the BCL PDF linked was last updated 02 April 2013.<br />
<br />
My personal opinion is, that it can't be healthy for the community to stop improving. And improvements don't come from silence. Unfortunately, Oracle doesn't have a great history in listening to their communities which also might lead to some catchy and inappropriate headlines from time to time. Nevertheless, let's stay wary and keep communicating things that could improve. It'll help the community more than it hurts in the long run: Open communication is a sign of a healthy community and the way it deals with feedback and criticism is the gauge for their values.Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0tag:blogger.com,1999:blog-6868595312516376692.post-13903770110721776092016-09-16T18:39:00.002+02:002016-09-16T18:39:25.286+02:00Replacing legacy Java EE application servers with microservices and containers<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-HWNudsP8A7o/V9wbZ6RfcLI/AAAAAAABMZ4/MeoAWTQiwhEBBRav57rfOjnrap7wmIzlACLcB/s1600/enterprise-development-trends-thumb.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="179" src="https://3.bp.blogspot.com/-HWNudsP8A7o/V9wbZ6RfcLI/AAAAAAABMZ4/MeoAWTQiwhEBBRav57rfOjnrap7wmIzlACLcB/s320/enterprise-development-trends-thumb.png" width="320" /></a></div>
Lightbend recently ran a survey with more than 2000 JVM developers and the results just got published. The survey was launched to discover: correlations between development trends and IT infrastructure trends, how organizations at the forefront of digital transformation are modernizing their applications, and real production usage break-downs of today’s most buzzed about emerging developer technologies. While you can download the <a href="https://info.lightbend.com/COLL-20XX-Enterprise-Development-Trends-2016-Report_RES-LP.html?lst=BL" target="_blank">complete results from the official website</a>, I would love to highlight some particular things that I found very interesting. Especially around containers and microservices.<br />
<br />
<b>Lightweight Containers Are Democratising Infrastructure and Challenging the Old Guard Java EE App Servers</b><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-10oJR3bMJy0/V9wdks5DPEI/AAAAAAABMZ8/db4SnnWgAO8oD_AflZ4nEFWM_IODI2ljQCLcB/s1600/container-use.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="148" src="https://4.bp.blogspot.com/-10oJR3bMJy0/V9wdks5DPEI/AAAAAAABMZ8/db4SnnWgAO8oD_AflZ4nEFWM_IODI2ljQCLcB/s320/container-use.png" width="320" /></a></div>
The momentum around containers has gone much more quickly than many anticipated. People are looking at containers as that great hope for infrastructure portability that they’ve been chasing for a long time. And I was always interested in learning about how containers are actually used by developers in the wild. And bottom line is, that containers are really happening in production right now. What types of applications are people putting in containers is the million dollar question. Today it’s primarily greenfield applications, with far fewer examples of legacy applications being modernized for containers in production. This is the reason, that everybody is looking for more leightweight approaches to run their applications on the JVM without the overhead of Java EE servers. The survey has more details around which kind of containers and orchestration models.<br />
<br />
<b>Microservices and Fast Data Are Driving Application Modernization Efforts</b><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-4sJnHMvN5hM/V9wfVFw1l3I/AAAAAAABMaA/Uaxqnz5CRPwsXr6RQlQFPOQohB0astrUACLcB/s1600/microservices-in-production.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="149" src="https://1.bp.blogspot.com/-4sJnHMvN5hM/V9wfVFw1l3I/AAAAAAABMaA/Uaxqnz5CRPwsXr6RQlQFPOQohB0astrUACLcB/s320/microservices-in-production.png" width="320" /></a></div>
Microservices-Based Architectures advocate the creation for a system build from a collection of small, isolated services, each of which owns their data, and is independently isolated, scalable and resilient to failure. Services integrate with other services in order to form a cohesive system that’s far more flexible than legacy monolithic applications. But how is this taken into production? Are people already building those systems or is this just a hype? Almost three third of the respondents run a microservice based system in production. And as I've been talking about in my talks before, the driver is mostly the need for real time data handling and streaming requirements.<br />
<br />
The survey reveals a lot more details and I strongly suggest, that you <a href="https://info.lightbend.com/COLL-20XX-Enterprise-Development-Trends-2016-Report_RES-LP.html?lst=BL" target="_blank">look at the details of it</a>. One thing is for sure, the changing requirements put on today's architectures can't be easily meet by just creating new applications on old platforms. And even Java EE is starting to adopt those new principles as JavaOne will hopefully how in a couple of days. I keep you posted.Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0tag:blogger.com,1999:blog-6868595312516376692.post-65106384344486495822016-08-31T10:00:00.000+02:002016-08-31T11:36:05.995+02:00Join me for the Reactive Microservices RoadshowWhat are the benefits of the Reactive Manifesto and the Microservices approach, especially for those who want to fundamentally modernize their business? I will discuss this at the free event „<a href="https://www.eventbrite.de/e/reactive-microservices-roadshow-registrierung-26872426150" target="_blank">Reactive Microservices Roadshow</a>“, on 28th September in Berlin. The event is hosted by <a href="http://www.codecentric.de/" target="_blank">codecentric AG</a> and <a href="http://www.lightbend.com/" target="_blank">Lightbend</a>. There will be three talks which walk you through the most important parts.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.eventbrite.de/e/reactive-microservices-roadshow-registrierung-26872426150" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" height="160" src="https://4.bp.blogspot.com/-PwBYckXNsQA/V8aklt4k_TI/AAAAAAABLxA/wsQS3LajZ3ks7TzwxCAyLQwVNRvHLQGaACLcB/s320/Reactive-Microservices_roadshow-600x300-px.png" width="320" /></a></div>
<br />
<br />
<b>Reaktive Mircroservices with Akka (Heiko Seeberger)</b><br />
The Reactive Manifesto defines essential qualities which modern systems need to have in order to cope with today's requirements: Responsiveness, which is the cornerstone of usability and utility, requires resilience and elasticity; all of these are based upon asynchronous messaging. In this talk we look at the meaning of "Reactive" for a microservice architecture, for individual services and for their collaboration.<br />
<br />
<b>AutoScout24 goes Microservices (Christian Deger)</b><br />
Fed up with stop and go in your data center? Why not shift into overdrive and pull into the fast lane? Learn how AutoScout24, the largest online car marketplace Europe-wide, are building their Autobahn in the cloud.<br />
Reinventing themselves by making a radical transition from monoliths to microservices, from .NET on Windows to Scala on Linux, from data center to AWS and from built by devs and run by ops to a DevOps mindset.<br />
<br />
<b>One microservice is no microservice—they come in systems! (Markus Eisele)</b><br />
Building a complete system out of individual Microservices is not as simple as we're being told. While Microservices-based Architecture continues to draw more and more attention we're also starting to learn about the trade-offs and drawbacks. Individual Microservices are fairly easy to understand and implement, but they only make sense as systems, and it is in-between the services that the most challenging (and interesting) problems arise—here we are entering the world of distributed systems.<br />
<br />
Find a German event description on the <a href="https://www.codecentric.de/2016/08/16/reactive-microservices-roadshow-lightbend-codecentric/" target="_blank">codecentric.de website</a>. Looking forward to interesting discussions! Make sure to <b><a href="https://www.eventbrite.de/e/reactive-microservices-roadshow-registrierung-26872426150" target="_blank">REGISTER for FREE TODAY</a></b>!Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0tag:blogger.com,1999:blog-6868595312516376692.post-24693449865482204562016-08-31T07:20:00.001+02:002016-08-31T07:20:24.126+02:00Lightbender at JavaOne 2016<div class="separator" style="clear: both; text-align: center;">
<a href="https://oracle.rainfocus.com/scripts/catalog/oow16.jsp?event=javaone&search=eisele&search.event=javaone" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://2.bp.blogspot.com/-MRazTRqnJhU/V8ZnbirJWSI/AAAAAAABLs8/l0JQrKACJIQgh_Bnf-_P8ZbVhxZ6Dzs0wCLcB/s1600/j1-250x250-im-speaking-3089473.jpg" /></a></div>
It's only short 16 days until the Java community is starting to travel to San Francisco again. The annual family gathering at JavaOne is the place to be and it's time to get a little excited about attending once again. This year, Lightbend is a bronze sponsor and I am excited to be <a href="https://www.oracle.com/javaone/speakers.html" target="_blank">one of the featured speakers</a>! A lot is going to happen during the week and you have to plan your schedule accordingly to get the most out of it.<br />
<br />
A must attend are the sessions by Lightbend engineers.<br />
<br />
<b>Monitoring Reactive Microservices</b> [<a href="https://oracle.rainfocus.com/scripts/catalog/oow16.jsp?event=javaone&search=CON1091&search.event=javaone" target="_blank">CON1091</a>] with Henrik Engström (<a href="https://twitter.com/h3nk3" target="_blank">@h3nk3</a>)<br />
<i>Tuesday, Sep 20, 4:00 p.m. - 5:00 p.m. | Parc 55—Market Street</i><br />
Reactive applications are the next major evolution of the internet. They allow for applications to be responsive, scalable, and resilient by building on a fully event-driven foundation. However, at the same time, this way of architecting systems introduces some new issues. One of these issues is how to monitor this type of system. This session covers the traditional monitoring approach and different ways to monitor asynchronous applications and finally looks at the way Lightbend has chosen to build a monitoring tool for reactive applications. After this presentation, developers will have a better understanding of how to monitor microservices in a reactive architecture.<br />
<br />
<b>End-to-End Reactive Streams, from Socket to Business</b> [<a href="https://oracle.rainfocus.com/scripts/catalog/oow16.jsp?event=javaone&search=CON1852&search.event=javaone" target="_blank">CON1852</a>] with Konrad Malawski (<a href="https://twitter.com/ktosopl" target="_blank">@ktosopl</a>)<br />
<i>Thursday, Sep 22, 11:30 a.m. - 12:30 p.m. | Hilton—Continental Ballroom 1/2/3</i><br />
The Reactive Streams specification, along with its TCK and various implementations such as Akka Streams, is coming closer and closer with the inclusion of the RS types in JDK 9. Using an example Twitter-like streaming service implementation, this session shows why this is a game changer in terms of how you can design reactive streaming applications by connecting pipelines of back-pressured asynchronous processing stages. The presentation looks at the example from two perspectives: a raw implementation and an implementation addressing a high-level business need.<br />
<br />
<b>Stay Productive While Slicing Up the Monolith</b> [<a href="https://oracle.rainfocus.com/scripts/catalog/oow16.jsp?event=javaone&search=CON6472&search.event=javaone" target="_blank">CON6472</a>] with myself (<a href="https://twitter.com/myfear" target="_blank">@myfear</a>)<br />
<i>Tuesday, Sep 20, 11:00 a.m. - 12:00 p.m. | Parc 55—Mission</i><br />
With microservices-based architectures, developers are left alone with provisioning and continuous delivery systems, containers and resource schedulers, frameworks and patterns to slice monoliths. How to efficiently develop them without having to provision complete production-like environments locally by hand? How to run microservices-based systems on local development machines, managing provisioning and orchestration of hundreds of services from a command-line tool without sacrificing productivity enablers. New buzzwords, frameworks, and hyped tools have made Java developers forget what it means to be productive. This session shows how much fun it can be to develop large-scale microservices-based systems. Understand the power of a fully integrated microservices development environment.<br />
<br />
<b>One Microservice Is No Microservice: They Come in Systems</b> [<a href="https://oracle.rainfocus.com/scripts/catalog/oow16.jsp?event=javaone&search=CON6471&search.event=javaone" target="_blank">CON6471</a>] with myself (<a href="https://twitter.com/myfear" target="_blank">@myfear</a>)<br />
<i>Wednesday, Sep 21, 1:00 p.m. - 2:00 p.m. | Parc 55—Embarcadero</i><br />
Building a complete system out of individual microservices is hard. Microservices-based architecture is gaining attention, but there are trade-offs and drawbacks. Individual microservices are fairly easy to understand and implement, but they make sense only as systems; it’s between services that the most-challenging problems arise—in distributed systems. Slicing a system into REST services and wiring them back together with synchronous protocols and traditional enterprise tools means failure. This session distills the essence of microservices-based systems and covers a new development approach to microservices that gets you started quickly with a guided, minimalistic approach on your machine and takes you to a productive scaled-out microservices-based on the Oracle Cloud system with hundreds of services.<br />
<br />
<b>The Cloud-Natives Are RESTless</b> [<a href="https://oracle.rainfocus.com/scripts/catalog/oow16.jsp?event=javaone&search=CON2514&search.event=javaone" target="_blank">CON2514</a>] Panel session with Konrad Malawski (<a href="https://twitter.com/ktosopl" target="_blank">@ktosopl</a>)<br />
<i>Wednesday, Sep 21, 8:30 a.m. - 9:30 a.m. | Parc 55—Powell I/II</i><br />
Representational State Transfer—the REST architecture—has served us well for the past 15 years as a style of cross-language distributed computing that is web-friendly. REST is simple and cacheable and is implemented over the original protocol for the web, good ole HTTP. For many use cases, the synchronous, request/response nature of REST fits perfectly. What are the alternatives to REST for event-based Java microservices? What reactive frameworks should Java developers learn and use in their services and overall application architecture? What synchronous cross-language alternatives should Java engineers use for high-performance, non-HTTP distributed computing in 2016 and beyond? Attend this session to find out.<br />
<br />
I am looking forward to meet all the amazing peers from the Java Community! Find more information on the official <a href="https://www.oracle.com/javaone/index.html" rel="nofollow" target="_blank">JavaOne website</a> and on the <a href="https://blogs.oracle.com/javaone/" rel="nofollow" target="_blank">JavaOne blog</a> and make also sure to follow <a href="https://twitter.com/JavaOneConf" target="_blank">@JavaOneConf</a> on Twitter. And also don't forget to follow <a href="https://twitter.com/myfear" target="_blank">@myfear</a> and <a href="https://twitter.com/Lightbend" target="_blank">@lightbend</a> for more fun and games and raffles and stuff during JavaOne!Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0tag:blogger.com,1999:blog-6868595312516376692.post-44688569112505934752016-08-05T09:16:00.002+02:002016-08-05T09:16:47.492+02:00Remote JMS with WildFly Swarm<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-K3OafzLCVNs/V6Q3bTHolgI/AAAAAAABKV8/-oPJnREQi-AmBfOQRFeKFUEcaK6l6S4_QCLcB/s1600/screenshot.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="214" src="https://4.bp.blogspot.com/-K3OafzLCVNs/V6Q3bTHolgI/AAAAAAABKV8/-oPJnREQi-AmBfOQRFeKFUEcaK6l6S4_QCLcB/s320/screenshot.png" width="320" /></a></div>
I'm blogging about WildFly swarm again? Short version is: I needed a test for remote JMS access and refused to setup something complex like a complete application server. The idea was to have a simple WildFly Swarm application which has a queue and a topic configured. Both should be accessible remotely from a standalone Java application. While the topic receives messages a Message Driven Bean (MDB) dumps the output to the console. The queue is filled with random text+timestamp messages by a singleton timer bean.<br />
Turned out, that WildFly Swarm can do it, but for now only in the snapshot release.<br />
<br />
<b>The code</b><br />
Find the complete code on my <a href="https://github.com/myfear/wfs-jms" target="_blank">GitHub repository</a>. It's not the most beautiful thing I have written but it actually shows you the <a href="https://github.com/myfear/wfs-jms/blob/master/src/main/java/sample/Main.java#L22" target="_blank">complete configuration of Swarm</a> with the relevant security settings, and the construction of the queue and the topic. In short the MessagingFraction needs the relevant security settings with remote access enabled and it also needs to define the remote topic. The NamingFraction needs to enable the remote naming service and finally the ManagamentFraction needs to define authorization handler.<br />
<br />
<b>How to run the example</b><br />
To run the server, you can just use 'mvn wildfly-swarm:run' after the startup, you see the timer bean starting to emit messages to the queue:<br />
<br />
<div class="p1">
<span class="s1">2016-08-05 08:44:48,003 INFO [sample.SampleQueueTimer] (EJB default - 5) Send: Test 1470379488003</span></div>
<div class="p1">
<span class="s1">2016-08-05 08:44:49,005 INFO [sample.SampleQueueTimer] (EJB default - 6) Send: Test 1470379489005</span></div>
<br />
If you point your browser to <a href="http://localhost:8080/" target="_blank">http://localhost:8080/</a> you can trigger a <a href="https://github.com/myfear/wfs-jms/blob/master/src/main/java/sample/SampleTopicMDB.java#L24" target="_blank">single message being send to the topic</a>. This also get's logged to the console:<br />
<br />
<div class="p1">
<span class="s1">2016-08-05 08:44:36,220 INFO [sample.SampleTopicMDB] (Thread-250 (ActiveMQ-client-global-threads-859113460)) received: something</span></div>
<br />
The real magic happens, when you look at the <a href="https://github.com/myfear/wfs-jms/blob/master/src/main/java/sample/client/HelloWorldJMSClient.java" target="_blank">standalone Java client</a>. It performs the <a href="https://github.com/myfear/wfs-jms/blob/master/src/main/java/sample/client/HelloWorldJMSClient.java#L50" target="_blank">relevant JNDI lookups</a> and <a href="https://github.com/myfear/wfs-jms/blob/master/src/main/java/sample/client/HelloWorldJMSClient.java#L61" target="_blank">creates the JMS connection</a> with user and password, the session and the producer and finally <a href="https://github.com/myfear/wfs-jms/blob/master/src/main/java/sample/client/HelloWorldJMSClient.java#L71" target="_blank">produces and sends a text message</a>.<br />
More about the "<a href="https://www.lightbend.com/blog/nine-lost-opportunities-when-using-java-ee-for-microservices" target="_blank">why the hell does he needs Java EE again</a>" in some upcoming blog posts ;)<br />
<br />
<b>Credits</b><br />
A super big thank you goes out to <a href="https://twitter.com/kenfinnigan" target="_blank">Ken Finnigan</a> who fixed <a href="https://github.com/wildfly-swarm/wildfly-swarm/commit/f2d02dcda71a41362d44e2c94f57ffca732a093e" target="_blank">the issue I ran into</a> literally over night!<br />
<br />Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0tag:blogger.com,1999:blog-6868595312516376692.post-27531467540881089842016-08-01T15:53:00.002+02:002016-08-01T15:53:38.857+02:00Build and deploy microservices the modern wayThere's been a lot of buzz from me lately around microservices and containers. And all the efforts were directed towards today's <a href="https://www.lightbend.com/company/news/lightbend-and-mesosphere-drive-container-20-era-with-reactive-platform-on-dcos" target="_blank">public announcement by Lightbend and Mesosphere</a>. If you are interested in learning more about how traditional architectures are beginning to evolve very quickly to embrace microservices architecture and various cloud and hybrid-cloud deployment models, I would love to invite you to listen to the recording of my recent webinar with Aaron Williams from Mesosphere. Find the <a href="http://www.slideshare.net/Lightbend/modernizing-applications-with-microservices-and-dcos-lightbendmesosphere-cowebinar" target="_blank">slides on slideshare</a>, the recording is embedded below.<br />
<br />
The traditional model that enterprises run their businesses on has typically been delivered as monolithic applications running in a virtualized, on-premise infrastructure. We’ve seen how public and private cloud technologies have changed everything, but if the applications are not designed, or re-designed, appropriately, then it is impossible to take advantage of the advances in both distributed application services and hybrid infrastructure. Consequently, we will show how enterprise architects are looking to microservices architecture and technologies like Mesosphere DC/OS as a means to modernize their legacy applications.<br />
<br />
This webinar introduces Lagom, a new framework specifically designed to help developers modernize legacy Java EE applications into systems of microservices and then discuss exactly what is required to run these distributed systems at enterprise scale with DC/OS.<br />
<br />
<div class="video-container">
<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/JVMs2EPBa9I" width="560"></iframe></div>
Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0tag:blogger.com,1999:blog-6868595312516376692.post-66301173963664343822016-07-15T14:36:00.001+02:002016-07-15T14:36:24.283+02:00CQRS with Java and Lagom<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-Ns01b2EgSb0/V4jYHLB6yaI/AAAAAAABJwU/Hx70xX0sLj0-wMo9LdJleKAn6wyMKxw1ACLcB/s1600/cjug.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="179" src="https://3.bp.blogspot.com/-Ns01b2EgSb0/V4jYHLB6yaI/AAAAAAABJwU/Hx70xX0sLj0-wMo9LdJleKAn6wyMKxw1ACLcB/s320/cjug.png" width="320" /></a></div>
I've had the pleasure to talk at the Chicago Java User Group and talk about how Lagom implements CQRS, the Command Query Responsibility Segregation pattern. Thankfully, there is a recording and I also <a href="http://www.slideshare.net/myfear/cqrs-and-event-sourcing-for-java-developers" target="_blank">published the slides on slideshare</a>.<br />
<br />
<b>Abstract:</b><br />
As soon as an application becomes even moderately complex, CQRS and an Event Sourced architecture start making a lot of sense. The talk is focused on: - the challenges and tactics of separating the write model from the query model in a complex domain - how commands naturally lead to events and to an event based system, and - how events get projected into useful, eventually consistent views. Event Sourcing is one of those things that you really need to push through at the beginning (much like TDD) and that - once understood and internalized, will change the way you architect a system. This talk introduces you to the basic concepts and problem spaces to solve.<br />
<br />
Thanks again for hosting me, CJUG! It was a real pleasure!<br />
<br />
<div class="video-container"><iframe src="https://player.vimeo.com/video/172735253" width="640" height="360" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
<p><a href="https://vimeo.com/172735253">CJUG - 2016-06-28 - Markus Eisele on CQRS and Event Sourcing for Java Developers</a> from <a href="https://vimeo.com/spantree">Spantree Technology Group, LLC</a> on <a href="https://vimeo.com">Vimeo</a>.</p></div>Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0tag:blogger.com,1999:blog-6868595312516376692.post-74701470641856803452016-06-07T14:01:00.002+02:002016-06-07T14:01:55.803+02:00How Cloud, Containers, Microservices and you can help Charity!No, this isn't a customer success story. And this isn't the typical post about some awesome stuff that you can do with technology. This time it is actually about knowledge in a different kind. Lightbend would love to know how you use the Cloud, Containers and Microservices in your daily work. How Enterprises are adopting these technologies and last but not least, how influential are the decisions that are made in development to the final system architecture choices being made.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-KRaEUki5w-U/V1a3kRYM0KI/AAAAAAABHr4/bBy9RkqLXasX6dpGoekhQ3-3T4JYQb1EQCLcB/s1600/survey_start.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="214" src="https://4.bp.blogspot.com/-KRaEUki5w-U/V1a3kRYM0KI/AAAAAAABHr4/bBy9RkqLXasX6dpGoekhQ3-3T4JYQb1EQCLcB/s320/survey_start.png" width="320" /></a></div>
Take the <a href="https://lightbend.qualtrics.com/SE/?SID=SV_aaXOYeDecDEMoRv" target="_blank">quick ten minute survey</a> and don't forget to share the link with friends, colleagues and your contacts. <br />
<br />
The results will be published next month (July) on the <a href="https://www.lightbend.com/blog/" target="_blank">Lightbend tech blog</a>!<br />
Lightbend is donating to Charity for each completed survey! It's going to be either #yeswecode, SeniorNet or Mouse and you can select the cause at the end of the survey. Make you voice heard and your answers count! We are aiming to break 3000 respondents, which unlocks a total donation of $1500!<br />
<br />
Share the link<br />
<a href="https://lightbend.qualtrics.com/SE/?SID=SV_aaXOYeDecDEMoRv" target="_blank">https://lightbend.qualtrics.com/SE/?SID=SV_aaXOYeDecDEMoRv</a>Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0tag:blogger.com,1999:blog-6868595312516376692.post-78934111245913455312016-05-15T14:19:00.001+02:002016-05-15T14:19:05.821+02:00Modern Architecture with Containers, Microservices, and NoSQL<div class="separator" style="clear: both; text-align: center;">
<a href="https://adtmag.com/webcasts/2016/04/couchbase-may10.aspx?partnerref=refer" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;" target="_blank"><img border="0" height="237" src="https://1.bp.blogspot.com/-hPt4h4A2IB8/VzhncE63szI/AAAAAAABG1g/DsMvKPTqACA3ybuuo9bo7txAVCnhmx7NwCLcB/s320/couchbase_docker_lightbend_webinar.jpg" width="320" /></a></div>
On Tuesday, May 10, 2016 I had the pleasure to join Arun Gupta (Couchbase), Mano Marks (Docker) and Shane Johnson (Couchbase) for a great webinar with ADTMag. You can watch the complete <a href="https://adtmag.com/webcasts/2016/04/couchbase-may10.aspx?partnerref=refer" target="_blank">replay for free after registration</a>. This blog highlights some of the most prominent findings and provides a brief writeup.<br />
<br />
After a short introduction of the main business drivers behind the new architectures and the panel by Arun Gupta, it was time for Mano Marks (@manomarks) from Docker to give an overview of the container hype. With applications changing from centralised server installations which very rarely got updated to loosely coupled services with a high update frequency running on my small servers, containers provide a standard format which is easily portable between environments. Docker provides a great ecosystem around their products and is a solid foundation for applications following the new principles.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-fjG6vhx4F90/VzhoIfWBseI/AAAAAAABG1k/QtGzgBKekKIBCpyRFyXUc_49p9p0ymfkQCLcB/s1600/lagom_overview.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="187" src="https://3.bp.blogspot.com/-fjG6vhx4F90/VzhoIfWBseI/AAAAAAABG1k/QtGzgBKekKIBCpyRFyXUc_49p9p0ymfkQCLcB/s320/lagom_overview.jpg" width="320" /></a></div>
After Mano, it was my part. I did an overview from where we came from in terms of monolithic applications and why they survived so long including their advantages. With the introduction of microservices or better "right-sized" services we finally start to build systems for flexibility<br />
and resiliency, not just efficiency and robustness. The relevant aspects for a successful microservices architecture are plenty and not easily to be achieved by using a single framework. You also have to respect the architecture, software design, methodology and organisation and also embrace the distributed systems thinking. I introduced the audience to some available decomposition strategies and also gave a very quick rundown about the Lightbend microservice framework <a href="http://www.lightbend.com/lagom" target="_blank">Lagom</a>.<br />
<br />
Shane finished the presentation part of the webinar with an overview about the capabilities of the Couchbase server and how it supports application modernisation and microservice base architectures. The following FaQ with all the panelists tried to answer some of the most pressuring audience questions.<br />
<br />
The whole webinar runs for an hour and it is packed with all the latest information around modern architectures. With the additional minutes spend on an hour, this is pretty much the most recent information you can get on the topic by the top speakers in the field. If you have nothing to do on this rainy weekend I highly recommend to watch it!Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0tag:blogger.com,1999:blog-6868595312516376692.post-32034324993425236542016-05-11T20:26:00.002+02:002016-05-11T20:26:37.486+02:00Developing Reactive Microservices with Java - My new free mini-book!I am very happy to announce, that I finished another O'Reilly Mini-Book a couple of weeks ago. After the success of the very first edition which <a href="http://blog.eisele.net/2015/10/my-book-modern-java-ee-design-patterns.html" target="_blank">introduced you to the overall problem space of microservices</a> and the amazing book by Jonas Bonér about the <a href="http://blog.eisele.net/2016/03/free-ebook-about-reactive-microservices.html" target="_blank">architecture of reactive microservice systems</a>, it was about time to share a little more about how to implement them in Java. I am very proud to had Jonas write the foreword for this one and that I was able to write another 50+ pages in such a short time. The book uses Lagom as a framework to walk you through the service API, persistence API and how to work with Lagom-Services. Can't wait to hear your feedback and get you to try out Lagom. Here is the complete abstract and you'll find some further readings and links at the very bottom of the post. Did I mention, it is <a href="https://info.lightbend.com/COLL-20XX-Developing-Reactive-Microservices_Landing-Page.html?lst=BL" target="_blank">free to download</a>? It is!<br />
<br />
Abstract:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://info.lightbend.com/COLL-20XX-Developing-Reactive-Microservices_Landing-Page.html?lst=BL" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;" target="_blank"><img border="0" src="https://2.bp.blogspot.com/-rPwDALhw6M8/VzNzAkbLWQI/AAAAAAABGKU/9kf90Htb0xgehQao6zpoD-YgDDV0730rACLcB/s1600/Reactive_Microservices_Thumbnail.jpg" /></a></div>
With microservices taking the software industry by storm, traditional enterprises running large, monolithic Java EE applications have been forced to rethink what they’ve been doing for nearly two decades. But how can microservices built upon reactive principles make a difference?<br />
<br />
In this O’Reilly report, author Markus Eisele walks Java developers through the creation of a complete reactive microservices-based system. You’ll learn that while microservices are not new, the way in which these independent services can be distributed and connected back together certainly is. The result? A system that’s easier to deploy, manage, and scale than a typical Java EE-based infrastructure.<br />
<br />
With this report, you will:<br />
<br />
<ul>
<li>Get an overview of the Reactive Programming model and basic requirements for developing reactive microservices</li>
<li>Learn how to create base services, expose endpoints, and then connect them with a simple, web-based user interface</li>
<li>Understand how to deal with persistence, state, and clients</li>
<li>Use integration technologies to start a successful migration away from legacy systems</li>
<li>The detailed example in this report is based on Lagom, a new framework that helps you follow the requirements for building distributed, reactive systems. Available on GitHub as an Apache-licensed open source project, this example is freely available for download.</li>
</ul>
<br />
<br />
Markus Eisele is a Developer Advocate at Lightbend. He has worked with monolithic Java EE applications for more than 16 years, and now gives presentations at leading international tech conferences on how to evolve these applications into microservices-based architectures. Markus is the author of <a href="http://www.oreilly.com/programming/free/modern-java-ee-design-patterns.csp" target="_blank">Modern Java EE Design Patterns</a> (O’Reilly).<br />
<br />
<br />
<ul>
<li>Official <a href="https://github.com/lagom/lagom" target="_blank">Lagom GitHub repository</a></li>
<li><a href="https://www.lightbend.com/lagom" target="_blank">Lagom Website</a> at Lightbend</li>
<li><a href="http://www.lagomframework.com/documentation/1.0.x/Home.html" target="_blank">Project Documentation</a></li>
<li><a href="https://github.com/lagom/activator-lagom-cargotracker" target="_blank">Lagom Cargo Tracker Example</a></li>
</ul>
Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0tag:blogger.com,1999:blog-6868595312516376692.post-50084815861953290552016-04-12T14:27:00.000+02:002016-04-12T14:27:33.408+02:00Integration Architecture with Java EE and Spring<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-tVLw0e8iTH8/VwzliGYcGUI/AAAAAAABEzY/3IWOqI3wKu0aCZEXfgijW_dLCLEhO_weQCLcB/s1600/IMG_0589.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="240" src="https://3.bp.blogspot.com/-tVLw0e8iTH8/VwzliGYcGUI/AAAAAAABEzY/3IWOqI3wKu0aCZEXfgijW_dLCLEhO_weQCLcB/s320/IMG_0589.jpg" width="320" /></a></div>
The <a href="http://conferences.oreilly.com/software-architecture/engineering-business-us" target="_blank">O'Reilly Software Architecture Conference</a> in New York happens this week. And I had the pleasure to give a tutorial together with Josh Long about how to integrate Java EE and Spring. We've been joking about this one since a while. The super stupid biased view onto both technologies which some people have in mind was something that bugged both of us since a while. Another important reason for this talk was, that we both are caring about modernisation of old applications. There is so much legacy software out there that is easy 10+ years old. And you find those legacy applications in both technologies. This is, why we wanted to help people to understand how to modernise them and survive the transition phase.<br />
<br />
<b>A little history about Spring and Java EE</b><br />
The first part of the talk caught up on a little historical background of both technologies. Where they came from and how they evolved and lead into the state they are in today. Both evolved significantly since their inception and asking the question about what to chose today can easily be answered with a single sentence: "Chose the right tool for the right job". But you can even mix and match for many reasons.<br />
<br />
<b>Spring on Java EE</b><br />
There is a broad space of problems where you might think about using Spring on top of Java EE. While EE has been around and evolved a lot, we had to learn that you can't really innovate in a standard body. This lead to more than just a handful of features that are to be desired if you build a reasonable modern application. Some of those gaps include the security space (social logins), NoSQL integration, enterprise integration in general. And while you are free to pick from Java EE open or closed source offerings to close them, Spring most often has an answer in the family which makes it easy to use the same programming model and have an integrated offering. Plus, the Spring framework has a very long tail: Spring framework 4 runs on Servlet 2.5+ (2006!!), Java EE 6 (2009) and Java 6+. Which makes it very easy to use modern features even on the most outdated base platform. Find the <a href="https://github.com/myfear/javaee-spring-tutorial/tree/master/code/spring-on-ee" target="_blank">demo code in my github</a> repository and enjoy how easy it is to deploy a spring war to a Java EE server and just use the APIs.<br />
<br />
<b>Java EE on Spring</b><br />
But you can also turn this around and use Java EE APIs with Spring. The reasons you might want to do this are plenty: It can be a first migration step towards Spring while simply re-using some of your old code. Plus you want to use standards where standards make sense and where everything else would be to invasive. Examples include JTA, JPA, JSR303, JSR 330, JCA, JDBC, JMS, Servlets, etc.<br />
And there is also an <a href="https://github.com/myfear/javaee-spring-tutorial/tree/master/code/ee-on-spring" target="_blank">example app which you can run</a> as a Spring Boot based fat-jar while using (mostly) Java EE APIs in it.<br />
<br />
<b>Technical Integration and Microservices</b><br />
The last part of the presentation touched on technical integration between two systems and the technologies supported in both worlds. We also talked about microservices designs and answered a bunch of questions over the turn of the three hours.<br />
I really enjoyed it and have to admit that Josh is an amazing presenter and I learned a hell lot over the last couple of days working with him! It's a pleasure to know you, Josh! Make sure to follow him on Twitter <a href="https://draft.blogger.com/">@starbuxman</a>.<br />
<br />
<div class="video-container">
<iframe allowfullscreen="" frameborder="0" height="485" marginheight="0" marginwidth="0" scrolling="no" src="//www.slideshare.net/slideshow/embed_code/key/J8eNigSHsMZofe" style="border-width: 1px; border: 1px solid #ccc; margin-bottom: 5px; max-width: 100%;" width="595"> </iframe> </div>
Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0tag:blogger.com,1999:blog-6868595312516376692.post-8903267089394310312016-04-07T09:07:00.000+02:002016-04-07T09:07:25.862+02:00Your first Lagom service - getting started with Java MicroservicesI've been heads-down in writing my next O'Reilly report and didn't had enough time to blog in a while. Time to catch up here and give you a real quick start into the new microservices framework named Lagom. It is different to what you might know from Java EE or other application frameworks. And this is both a challenge and opportunity for you to learn something new. If you can wait for a couple of more days, <a href="http://www.oreilly.com/programming/free/developing-reactive-microservices-signup.html" target="_blank">register to be notified</a> when my new report will be available and learn everything about the story behind Lagom and how to get started. I will walk you through an example application and introduce the main concepts to you in more detail than I could in a blog post. This post is for the unpatient that want to get started today and figure everything out themselves.<br />
<br />
<b>Some background</b><br />
<a href="https://www.oreilly.com/ideas/how-to-make-just-right-easier-with-microservices" target="_blank">Microservices are everywhere</a> these days and more and more is unveiled about what it takes to build a complex distributed system with the existing middleware stacks. And there are far better alternatives and concepts to implement an application as a microservices based architecture. The core concepts of reactive microservices have been introduced by Jonas Bonér in his report <a href="https://www.lightbend.com/reactive-microservices-architecture" target="_blank">Reactive Microservices Architecture</a> which is available <b>for free</b> after registration. <a href="http://lightbend.com/lagom" target="_blank">Lagom</a> is the implementation of the described concepts. It uses technologies that you might have heard about but probably rarely used before as a Java EE developer: Mainly <a href="http://akka.io/" target="_blank">Akka</a> and <a href="https://playframework.com/" target="_blank">Play</a>. But for now, let's just forget about them because Lagom provides you with a great abstraction on top and gives you everything you need to get started.<br />
<br />
<b>Prerequisites</b><br />
Have <a href="http://www.lagomframework.com/documentation/1.0.x/Installation.html" target="_blank">activator and Java 8</a> installed. Activator is something that you probably also haven't heard about. It is build on top of sbt and helps you <a href="https://www.lightbend.com/blog/typesafe-activator-what-is-it" target="_blank">getting started with your projects and much more</a>. A Lagom system is typically made up of a set of sbt builds, each build providing multiple services. The easiest way to get started with a new Lagom system is to create a new project using the lagom Activator template. No need for anything else right now. You probably want to have an IDE installed. IntelliJ or Eclipse should be good for now.<br />
<br />
<b>Setting up your first project</b><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-1SDQU-riNSo/VwYEnzhVEGI/AAAAAAABEus/PnmDcN8ahqAWnDX3LwFu9NA1HfFrGYYLw/s1600/lagom-in-eclipse.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="227" src="https://1.bp.blogspot.com/-1SDQU-riNSo/VwYEnzhVEGI/AAAAAAABEus/PnmDcN8ahqAWnDX3LwFu9NA1HfFrGYYLw/s320/lagom-in-eclipse.png" width="320" /></a></div>
Time to get to see some code. Let's generate a simple example from the lagom-java template:<br />
<pre class="code"><code>$ activator new first-lagom lagom-java</code></pre>
<br />
Change into the newly generated folder "fist-lagom" and issue the sbt command to create an eclipse project.<br />
<pre class="code"><code>$ activator eclipse</code></pre>
<br />
A bunch of dependencies are downloaded and after the succesful execution you can open Eclipse and use the Import Wizard to import Existing Projects into your Workspace. Note, that if you are using the Immutables library with Eclipse, you need to <a href="http://www.lagomframework.com/documentation/1.0.x/ImmutablesInIDEs.html#Eclipse" target="_blank">set this up</a>, too.<br />
<br />
Lagom includes a development environment that let you start all your services by simply typing runAll in the activator console. Open the terminal and cd to your Lagom project:<br />
<pre class="code"><code>$ activator runAll</code></pre>
The output looks similar to this:
<br />
<pre>[info] Loading project definition from /Users/myfear/projects/first-lagom/project
[info] Set current project to first-lagom (in build file:/Users/myfear/projects/first-lagom/)
[info] Starting embedded Cassandra server
........
[info] Cassandra server running at 127.0.0.1:4000
[info] Service locator is running at http://localhost:8000
[info] Service gateway is running at http://localhost:9000
[info] Compiling 2 Java sources to /Users/myfear/projects/first-lagom/helloworld-api/target/scala-2.11/classes...
[info] Compiling 1 Java source to /Users/myfear/projects/first-lagom/hellostream-api/target/scala-2.11/classes...
[info] Compiling 2 Java sources to /Users/myfear/projects/first-lagom/hellostream-impl/target/scala-2.11/classes...
[info] Compiling 6 Java sources to /Users/myfear/projects/first-lagom/helloworld-impl/target/scala-2.11/classes...
[info] application - Signalled start to ConductR
[info] application - Signalled start to ConductR
[info] Service hellostream-impl listening for HTTP on 0:0:0:0:0:0:0:0:26230
[info] Service helloworld-impl listening for HTTP on 0:0:0:0:0:0:0:0:24266
[info] (Services started, use Ctrl+D to stop and go back to the console...)
</pre>
Now go and try out your first service by visiting http://localhost:9000/api/hello/World. Now you're all set for the next blog posts, where I am going to walk you through the example in more detail. If you can't wait, go ahead and read in the <a href="http://www.lagomframework.com/documentation/1.0.x/GettingStarted.html#Getting-started-with-Lagom" target="_blank">Lagom Getting Started</a> guide.Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0tag:blogger.com,1999:blog-6868595312516376692.post-14541112336052216332016-03-24T15:06:00.000+01:002016-03-24T15:06:22.583+01:00Free Mini Book about Reactive Microservices<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.lightbend.com/reactive-microservices-architecture" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;" target="_blank"><img border="0" height="320" src="https://4.bp.blogspot.com/-zDFmY98dJ-4/VvKGAfI3YNI/AAAAAAABENs/Qec5W4lc408NAY7F7OTDuIFdyBtOy4Zbw/s320/Reactive%2BMicroservices%2BArchitecture_Lightbend_comp%2Bcopy.png" width="213" /></a></div>
Working with and talking about microservices has been my focus for a while already. And since I started working at Lightbend I already had the pleasure to work with some amazing people. One of them is Jonas Bonér and it has been a real pleasure helping with the creation of this little mini book about reactive microservices. Many of the concepts described in this book are the foundation for our newly open source microservices framework <a href="http://blog.eisele.net/2016/03/let-lagom-help-with-your-microservices-troubles.html" target="_blank">Lagom</a>. It makes getting started into the world of JVM based microservices and reactive systems and introduces all the important aspects that you should have a brief understanding about.<br />
<br />
And the best part is, that it is available for free at <a href="https://www.lightbend.com/reactive-microservices-architecture" target="_blank">lightbend.com</a>.<br />
<br />
Written for architects and developers that must quickly gain a fundamental understanding of microservice-based architectures, this free O’Reilly report explores the journey from SOA to microservices, discusses approaches to dismantling your monolith, and reviews the key tenets of a Reactive microservice:<br />
<br />
<ul>
<li>Isolate all the Things</li>
<li>Act Autonomously</li>
<li>Do One Thing, and Do It Well</li>
<li>Own Your State, Exclusively</li>
<li>Embrace Asynchronous Message-Passing</li>
<li>Stay Mobile, but Addressable</li>
<li>Collaborate as Systems to Solve Problems</li>
</ul>
<br />
<b>And here is the full abstract:</b><br />
Still chugging along with a monolithic enterprise system that’s difficult to scale and maintain, and even harder to understand? In this concise report, Lightbend CTO Jonas Bonér explains why microservice-based architecture that consists of small, independent services is far more flexible than the traditional all-in-one systems that continue to dominate today’s enterprise landscape.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.lightbend.com/reactive-microservices-architecture" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;" target="_blank"><img alt="Reactive Microservices Architecture Download" border="0" src="https://4.bp.blogspot.com/-5CmIe8V9FJg/VvN_oX9ANeI/AAAAAAABEOM/mkOHmlVcBkkzxkU0zj_K0H_SOCqlap_AQ/s1600/hero_jonas_200x230_oreillymicroservices5.png" title="Download the Free Ebook" /></a></div>
You’ll explore a microservice architecture, based on Reactive principles, for building an isolated service that’s scalable, resilient to failure, and combines with other services to form a cohesive whole. Specifically, you’ll learn how a Reactive microservice isolates everything (including failure), acts autonomously, does one thing well, owns state exclusively, embraces asynchronous message passing, and maintains mobility.<br />
<br />
Bonér also demonstrates how Reactive microservices communicate and collaborate with other services to solve problems. Get a copy of this exclusive report and find out how to bring your enterprise system into the 21st century.<br />
<br />
Jonas Bonér is Founder and CTO of Lightbend, inventor of the Akka project, co-author of the Reactive Manifesto and a Java Champion. Learn more at: <a href="http://jonasboner.com/" target="_blank">http://jonasboner.com</a>.Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0tag:blogger.com,1999:blog-6868595312516376692.post-16597377579892363832016-03-11T08:43:00.001+01:002016-03-11T08:43:25.039+01:00Review: "Learning Akka" by Jason GoodwinHaven't done a review in a while. It's time to dive a little deeper into the technical portfolio of Lightbend. Today it is Akka. A book with this title is the ideal start with a new technology in general. And for all my Java readers: Rest assured, that all examples in this book are in Java 8 (and in Scala).<br />
A big "Thank you!" to Packt Publishing who provided the book to me for review.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://bit.ly/1TH7Rk9" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;" target="_blank"><img border="0" height="320" src="https://2.bp.blogspot.com/-QW2M8SGJmc8/VuJshYWaB6I/AAAAAAABDqI/IuO21i_GsRIA8vHITCUtVcW8SQm3a2OnA/s320/learning_akka.jpg" width="259" /></a></div>
<b>Abstract</b><br />
Software today has to work with more data, more users, more cores, and more servers than ever. Akka is a distributed computing toolkit that enables developers to build correct concurrent and distributed applications using Java and Scala with ease, applications that scale across servers and respond to failure by self-healing. As well as simplifying development, Akka enables multiple concurrency development patterns with particular support and architecture derived from Erlang’s concept of actors (lightweight concurrent entities). Akka is written in Scala, which has become the programming language of choice for development on the Akka platform.<br />
<br />
Learning Akka aims to be a comprehensive walkthrough of Akka. This book will take you on a journey through all the concepts of Akka that you need in order to get started with concurrent and distributed applications and even build your own.<br />
<br />
Beginning with the concept of Actors, the book will take you through concurrency in Akka. Moving on to networked applications, this book will explain the common pitfalls in these difficult problem areas while teaching you how to use Akka to overcome these problems with ease.<br />
<br />
The book is an easy to follow example-based guide that will strengthen your basic knowledge of Akka and aid you in applying the same to real-world scenarios.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://bit.ly/1TH7Rk9" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;" target="_blank"><img border="0" height="100" src="https://1.bp.blogspot.com/-luYbVTm5Vtw/VuJsfXGgyZI/AAAAAAABDqM/YoxiANciw5ElNpw88dlqvoGJRvLv_QEqg/s200/Banner%2B%2528Akka%2529.jpg" width="100" /></a></div>
Book: "<a href="http://bit.ly/1TH7Rk9" target="_blank">Learning Akka</a>" <br />
Language : English<br />
Paperback: 274 pages <br />
Release Date : 30. Dezember 2015<br />
ISBN-10: 1784393002<br />
ISBN-13: 978-1784393007<br />
<br />
<b>The Author</b><br />
Jason Goodwin (GitHub: <a href="https://github.com/jasongoodwin" target="_blank">jasongoodwin</a>) is a developer who is primarily self-taught. His entrepreneurial spirit led him to study business at school, but he started programming when he was 15 and always had a high level of interest in technology. This interest led his career to take a few major changes away from the business side and back into software development. His journey has led him to working on high-scale distributed systems. He likes to create electronic music in his free time.<br />
<br />
He was first introduced to an Akka project at a Scala/Akka shop—mDialog—that built video ad insertion software for major publishers. The company was acquired by Google eventually. He has also been an influential technologist in introducing Akka to a major Canadian telco to help them serve their customers with more resilient and responsive software. He has experience of teaching Akka and functional and concurrent programming concepts to small teams there. He is currently working via Adecco at Google.
<br />
<br />
<b>The Content</b><br />
Take all the preface, index and praises away you end up with 216 pages of plain content. Divided into nine chapters.<br />
<i>Chapter 1:</i> Starting Life as an Actor gives an introduction to the Akka Toolkit and Actor Model in general. It covers everything you need to know to get started including the setup of the development environment.<br />
<i>Chapter 2:</i> Actors and Concurrency introduces you to the reactive design approach. The anatomy of, creation of, and communication with an actor together with the tools and knowledge necessary to deal with asynchronous responses and how to work with Futures—place-holders of results.<br />
<i>Chapter 3:</i> Getting the Message Across helps you to understand the details of message delivery mechanisms in Akka. That includes different messaging patterns.<br />
<i>Chapter 4:</i> Actor Lifecycle – Handling State and Failure introduces you to the actor's life cycle and explains what happens when an actor encounters an exceptional state and how you can change its state to modify its behaviour.<br />
<i>Chapter 5:</i> Scaling Up guides you through how Akka can help us scale up more easily to make better use of our hardware, with very little effort.<br />
<i>Chapter 6:</i> Successfully Scaling Out – Clustering comes in handy, when you reach the physical limits of a single machine. Learn what happens when you reach the limit of a physical host and need to process the work across multiple machines.<br />
<i>Chapter 7:</i> Handling Mailbox Problems digs deeper into what happens when you start to hit the limits of your actor system and how to describe how your system should behave in those situations.<br />
<i>Chapter 8:</i> Testing and Design examines some general approaches to design and testing in greater detail.<br />
<i>Chapter 9:</i> A Journey's End highlights a few outstanding features and modules that you may want to be aware of, and some next steps.<br />
<br />
<b>Writing and Style</b><br />
The author thoughtfully explored all the content in every chapter and created a great resource for everybody who wants to start with the Akka toolkit. Sentences are a little longer from time to time and it is a technical book but absolutely readable also for non native speakers. <br />
Every chapter includes links to further resources and a little homework for you to do.
Testing and test-design is covered in a separate chapter but also present in code samples throughout the complete book.
<br />
<br />
<b>Conclusion and recommendation</b><br />
This book attempts to give both the introductory reader and the intermediate or advanced reader an understanding of basic distributed computing concepts as well as demonstrates how to use Akka to build fault-tolerant horizontally-scalable distributed applications that communicate over a network. With all the examples being present in both languages (Java 8 and Scala) it is the ideal entry for a Java developer to dive into Akka and get a first idea about the concepts. It does not simply copy the documentation and covers many of the important topics and approaches you should understand to successfully build applications with Akka. But be aware that this book only gets you up to speed quickly. To fully understand the toolkit you should follow the further reading advices at the end of each chapter. Don't forget to use the above codes to get 50% off the eBook or 25% off the printed edition. Because the recommendation is to buy it!Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0tag:blogger.com,1999:blog-6868595312516376692.post-43314154681929793122016-03-10T09:55:00.000+01:002016-03-10T09:55:09.151+01:00Microservices trouble? Lagom is here to help. Try it! <div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-yCLX-UwnnSo/VuE19hMNc_I/AAAAAAABDpo/mIM5-iHZpNc/s1600/logom_full_color.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="81" src="https://3.bp.blogspot.com/-yCLX-UwnnSo/VuE19hMNc_I/AAAAAAABDpo/mIM5-iHZpNc/s320/logom_full_color.png" width="320" /></a></div>
The cake is backed. We're proud to announce that the new Apache licensed microservice framework <a href="https://github.com/lagom/lagom" target="_blank">Lagom is available on GitHub</a>! While other frameworks focus on packaging and instance startup, Lagom redefines the way that Java developers build microservice based applications. Services are asynchronous. Intra-service communication is managed for you. Streaming is out of the box. Your microservices are resilient by nature. And you can program in the language you love the most: Java.<br />
<br />
<b>What is Lagom? And what does Lagom mean?</b><br />
<div class="p1">
Lagom (pronounced [ˈlɑ̀ːɡɔm]) is a Swedish word meaning just right, sufficient. And as such it will help you build microservice based applications in an easier way. Instead of having to find your own answers to how to effectively develop, debug and run tens of different services on your machine you can finally focus on what really is important: The implemented business logic. Lagom takes care for all of the rest for you and eventually helps you to stage and run your application in production. The design is based on <a href="http://www.lagomframework.com/documentation/1.0.x/LagomDesignPhilosophy.html" target="_blank">three main principles</a>:</div>
<div class="p1">
</div>
<ol>
<li>Is asynchronous by default.</li>
<li>Favours distributed persistent patterns, in contrast to the traditional centralised database.</li>
<li>Places a high emphasis on developer productivity.</li>
</ol>
<br />
<b>How do I get started?</b><br />
Read through the <a href="http://www.lagomframework.com/documentation/1.0.x/Installation.html#Quick-setup" target="_blank">quick setup documentation</a> and watch the 11 minute getting started video by<br />
Mirco Dotta who shows you that development is already familiar: Use your favorite IDE and favorite dependency injection tools. You leverage the old to build something new.<br />
<div class="" video-container="">
<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/1cOqYMe-Zm0" width="560"></iframe>
</div>
<br />
<b>How can you give feedback?</b><br />
That is easy. We're open source and have a couple of channels you can use to get in touch with the project. Start with <a href="https://groups.google.com/forum/#!forum/lagom-framework" target="_blank">subscribing to the mailing-list</a> and reach out to us on the <a href="https://gitter.im/lagom/lagom" target="_blank">Gitter Lagom chat</a>. We're also monitoring <a href="https://stackoverflow.com/questions/ask?tags=lagom" target="_blank">questions on StackOverflow</a> which are tagged with Lagom.<br />
And don't forget to follow <a href="http://www.twitter.com/lagom" target="_blank">@Lagom</a> on twitter for latest information<br />
<br />
Further Resources:<br />
<ul>
<li>Official <a href="https://github.com/lagom/lagom" target="_blank">Lagom GitHub repository</a></li>
<li><a href="https://www.lightbend.com/lagom" target="_blank">Lagom Website</a> at Lightbend</li>
<li><a href="http://www.lagomframework.com/documentation/1.0.x/Home.html" target="_blank">Project Documentation</a></li>
</ul>
Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0tag:blogger.com,1999:blog-6868595312516376692.post-22695057229699312072016-02-24T07:00:00.000+01:002016-02-24T07:00:00.872+01:00Taking off the red fedora. Hello Lightbend!<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-9bjPgqiDIFg/Vs0ad1tmklI/AAAAAAABCwc/hY474ip5Pa8/s1600/lightbend-full-color.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="68" src="https://1.bp.blogspot.com/-9bjPgqiDIFg/Vs0ad1tmklI/AAAAAAABCwc/hY474ip5Pa8/s320/lightbend-full-color.png" width="320" /></a></div>
Almost two years in Red Hat JBoss Middleware have been a tremendous journey for me. Getting to know so many amazing and gifted people to work with in all kinds of Java EE and integration products and projects really made me realize there is far more talent in open source communities than anywhere else.<br />
You’ve known and seen me at different conferences and Java User Groups meetups or read my blogs or are following me on Twitter. While I've been talking about middleware for many years you’ll continue to hear me talk about enterprise grade Java going forward. Focused on education about the latest trends in building enterprise systems in a reactive way with Java.<br />
<br />
And as such I'm very happy to announce, that I am joining <a href="http://www.lightbend.com/" target="_blank">Lightbend</a> as of March 1st as their new Developer Advocate. Follow <a class="g-profile" href="https://plus.google.com/108281124915010080743" target="_blank">+Lightbend</a> and <a href="http://www.twitter.com/lightbend" target="_blank">@Lightbend</a> The importance of Java and the need to build today's enterprise grade systems differently will both be a big part of my future topics. If you have particular wishes and questions already, I'm happy to answer them via my Twitter handle @myfear, comment on my blog or maybe in a complete blogpost.<br />
<br />
My journey into containers and microservices architectures will also continue. Going forward I will continue to educate more about how microservices architectures can integrate and complement existing platforms, and will also talk about how to successfully build resilient applications with Java.<br />
<div>
<br /></div>
<blockquote class="tr_bq">
I have looked in the mirror every morning and asked myself: "If today were the last day of my life, would I want to do what I am about to do today?" And whenever the answer has been "No" for too many days in a row, I know I need to change something.<br />
Steve Jobs </blockquote>
<br />
Make sure to subscribe to <a href="https://developer.jboss.org/blogs/weekly-editorial" target="_blank">JBoss Weekly</a> and <a href="http://www.twitter.com/jbossdeveloper" target="_blank">@jbossdeveloper</a> for latest updates about JBoss or to <a href="http://www.twitter.com/rhdevelopers" target="_blank">@rhdevelopers</a> to learn all about the Red Hat Developers Program.Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0tag:blogger.com,1999:blog-6868595312516376692.post-77080822496527500332016-01-20T16:07:00.001+01:002016-01-20T16:07:33.091+01:00Running Any Docker Image On OpenShift OriginI've been using OpenShift since a while now. For many reasons. First of all, I don't want to build my own Docker and Kubernetes environment on Windows and second of all, because I like the simple installation. After the Christmas holidays I decided to upgrade my machine to Windows 10. While I like the look and feel, it broke quite a bit of networking and container installments including the Docker and OpenShift environments. Now that I have everything up and running again, it is time to follow the microserivces path a little more. The first thing is to actually get OpenShift up and running and get a development environment setup in which we can simply push Docker images to it without having to use any of the Source-2-Image or OpenShift build mechanisms.<br />
<br />
<b>Installing the all-in-one-VM</b><br />
<a href="https://www.openshift.org/vm/" target="_blank">Download the all-in-one-vm</a> image and import it into the vagrant box. This image is based off of OpenShift Origin and is a fully functioning OpenShift instance with an integrated Docker registry. The intent of this project is to allow Web developers and other interested parties to run OpenShift V3 on their own computer. Given the way it is configured, the VM will appear to your local machine as if it was running somewhere off the machine. Which is exactly what I need to show you around in OpenShift and introduce some more features. If you need a little more assistance follow the <a href="http://blog.eisele.net/2015/09/running-openshift-origin-on-windows.html" target="_blank">method 2 in this earlier blog-post</a>.<br />
I also assume, that you have docker-machine running. You can install it via the <a href="https://docs.docker.com/machine/" target="_blank">Docker Toolbox</a>.<br />
<br />
<b>First steps in OpenShift</b><br />
Fire up the magazine via vagrant up and redirect you browser to https://localhost:8443/. Accept the certificate warning and enter admin/admin as login. You're now browsing through the admin console. Let's create a new project to play around with:<br />
<pre class="code"><code>oc login https://localhost:8443
# enter admin/admin as the credentials
oc new-project myfear --description="Testing random Docker Images on OpenShift" --display-name="Myfears test project"
# Add admin role to user myfear
oc policy add-role-to-user myfear admin -n myfear
</code></pre>
First thing to do is to actually get a MySql database up and running. I want to use that in subsequent blog-posts and it's a good test to see if everything is working. Get the two json files from the my github repository and execute the following commands:<br />
<pre class="code"><code>oc create -f <a href="https://github.com/myfear/WildFlySwarmDiscoverySample/blob/master/mysql-pod.json" target="_blank">mysql-pod.json</a>
oc create -f <a href="https://github.com/myfear/WildFlySwarmDiscoverySample/blob/master/mysql-service.json" target="_blank">mysql-service.json</a>
</code></pre>
Go back to your browser and select the myfear project and see the mysql service up and running with one pod.<br />
<br />
<b>Using the OpenShift Registry</b><br />
You just witnessed how OpenShift pulled the mysql image and started a pod with a container on it. Obviously this image came from the built in registry. But how can one actually upload a docker image to the internal OpenShift registry? Ssh into the vagrant machine and look around a bit:<br />
<pre class="code"><code>vagrant ssh
docker ps
</code></pre>
You see a lot of running containers and one of them is running the openshift/openshift-registry-proxy. This little gem actually forwards the port 5000 from the internal docker registry to the vagrant vm. Open Virtualbox and look at the port forwarding rules there. Another rule forwards port 5000 from the guest to the host. This means, the internal OpenShift Docker registry is already exposed by default. But how do we push something there? The docker client requires a docker host to work. The OpenShift Docker Daemon isn't exposed externally and you can't just point your docker client to it.<br />
This means, you need another docker host on your machine which is configured to access the OpenShift docker registry as external registry. I'm using docker-machine here, because it is extremely easy to create new docker hosts with it.<br />
<pre class="code"><code>docker-machine create -d virtualbox dev
</code></pre>
After a couple of seconds your "dev" vm is created and started. Now we need to find out, what the host system's IP address is from the dev box. Ssh into the machine and get the ip of the default gateway:<br />
<pre class="code"><code>docker-machine ssh dev
$ ip route | grep default
> 10.0.0.2
</code></pre>
Now we need to stop the machine and add the ip address we found to the insecure registry part of the configuration:<br />
<pre class="code"><code>docker-machine stop dev
edit ~/.docker/machine/machines/default/config.json
# Add the found ip address plus the registry port to the HostOptions => EngineOptions => InsecureRegistry array
</code></pre>
Afterwards it should look like this:<br />
<pre class="code"><code> "InsecureRegistry": [
"10.0.2.2:5000"
]
</code></pre>
time to re-start the dev vm and get the docker client configured for it:<br />
<pre class="code"><code>docker-machine start dev
FOR /f "tokens=*" %i IN ('docker-machine env dev --shell cmd') DO %i
</code></pre>
That's it for now. One important thing is, that the internal registry is secured and we need to login to it. Get the login token for the user "myfear" with the following commands:<br />
<pre class="code"><code>oc login -u myfear
oc whoami -t
</code></pre>
This will return something cryptic like: dV2Dep7vP8pJTxNGk5oNJuqXdPbdznHrxy5_7MZ4KFY. Now login to the registry:<br />
<pre class="code"><code>docker login -u myfear -p dV2Dep7vP8pJTxNGk5oNJuqXdPbdznHrxy5_7MZ4KFY -e markus@someemail.org 10.0.2.2:5000
</code></pre>
Make sure to use the correct username and token. You get a success message with and your login credentials are being saved in the central config.json.<br />
<br />
<b>Build and push the custom image</b><br />
Time to finally build the custom image and push it. I am using Roland's docker maven plugin again.<br />
If you want to learn more about it, there is an <a href="http://blog.eisele.net/2015/10/wildfly-swarm-jax-rs-microservice-on-docker.html" target="_blank">older blog-post about it</a>. Also find the code in this <a href="https://github.com/myfear/WildFlySwarmDiscoverySample" target="_blank">github repository</a>. Compare the <a href="https://github.com/myfear/WildFlySwarmDiscoverySample/blob/master/pom.xml" target="_blank">pom.xml</a> and make sure to update the docker.host and docker.registry properties<br />
<pre class="code"><code> <docker.host>tcp://192.168.99.101:2376</docker.host>
<docker.registry>10.0.2.2:5000</docker.registry>
</code></pre>
and the <authConfig> section with the correct credentials. Build the image with:<br />
<pre class="code"><code>mvn clean install docker:build docker:push
</code></pre>
If you ran into an issue with the maven plugin not being able to build the image, you may need to pull the jboss/base-jdk:8 image manually first:<br />
<pre class="code"><code>docker pull jboss/base-jdk:8
</code></pre>
Let's check, if the image is successfully uploaded by using the console and navigating to the overview => image streams page.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-nYBDEGGSzEE/Vp-fmEU9NJI/AAAAAAABCAI/J1ND08C_4yU/s1600/openshift-custom-image-stream.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="179" src="http://4.bp.blogspot.com/-nYBDEGGSzEE/Vp-fmEU9NJI/AAAAAAABCAI/J1ND08C_4yU/s400/openshift-custom-image-stream.PNG" width="400" /></a></div>
And in fact, the image is listed. Now, we need to start a container with it and expose the service to the world:<br />
<pre class="code"><code>oc new-app swarm-sample-discovery:latest --name=swarm
oc expose service swarm --hostname=swarm-sample-discovery.local
</code></pre>
Please make sure to add the hostname mapping to your hosts or dns configuration (to 127.0.0.1). As you can see, I am no longer using the docker image tag but the image stream name. OpenShift converted this internally.<br />
Time to access the example via the browser http://swarm-sample-discovery.local:1080/rs/customer.<br />
If you're wondering about the port go back to the Virtualbox configuration and check the nat section. The all on one vm actually assumes, that you have something running on port 80 already and maps the vm ports to the 1080 host port.<br />
The application does very little for now, but I will use this in subsequent blog-posts to dig a little into service discovery options.<br />
The console overview shows the two services with one pod each.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-DOiF7QCHEVE/Vp-gk8KRifI/AAAAAAABCAQ/QivUH4JRejU/s1600/openshift-custom-image-overview.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="263" src="http://3.bp.blogspot.com/-DOiF7QCHEVE/Vp-gk8KRifI/AAAAAAABCAQ/QivUH4JRejU/s400/openshift-custom-image-overview.PNG" width="400" /></a></div>
<br />
That's it for today. Thanks again to Roland for his help with this. Let me know, if you run into issues and if you want to know something else about OpenShift and custom images.<br />
<br />Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0tag:blogger.com,1999:blog-6868595312516376692.post-27779944697536998492016-01-12T19:57:00.000+01:002016-01-12T19:57:39.191+01:00 A Refresher - Top 5 Java EE 7 Frontend<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-xjU0MgXfiJw/VnjtkbRqv0I/AAAAAAABBLQ/VX8nERNeyXw/s1600/ee-7-overview.PNG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="184" src="http://3.bp.blogspot.com/-xjU0MgXfiJw/VnjtkbRqv0I/AAAAAAABBLQ/VX8nERNeyXw/s320/ee-7-overview.PNG" width="320" /></a></div>
The series continues. After the <a href="http://blog.eisele.net/2015/11/a-refresher-java-ee-7-at-glance.html" target="_blank">initial overview</a> and <a href="http://blog.eisele.net/2015/12/a-refresher-top-10-java-ee-7-backend.html" target="_blank">Arjan's post about the most important backend features</a>, I am now very happy to have Ed Burns (<a href="https://twitter.com/edburns" target="_blank">@edburns</a>) finish the series with his favorite Java EE 7 frontend features.<br />
<br />
Thanks to Markus Eisele for giving me the opportunity to guest post on his very popular blog. Markus and I go way back to 2010 or so, but I've not yet had the pleasure of guest posting. Markus asked me to cover the Java EE 7 Web Tier. Since EE 7 is a mature release of a very mature<br />
platform, much has already been published about it. Rather than rehash what has come before, I'm going to give my opinion about what I think are the important bits and a very high level overview of each.<br />
<br />
If you're interested in learning more about this first-hand, please consider attending my full day training at JavaLand 2016. I'm giving the training with modern finance and HTML5 expert Oliver Szymanski. For details, <a href="http://www.javaland.eu/de/programm/schulungstag/" target="_blank">please visit the javaland website</a>.<br />
<br />
First, a bit of historical perspective. Markus asked me to write about the Java EE 7 Web Tier. Let's take a look at that term, "web tier" or "presentation tier" as it is also called. If one is to believe the hype surrounding newer ideas such as microservices, the term itself is starting to sound a bit dated because it implies a three tier architecture, with the other two tiers being "business logic" and<br />
"persistence". Surely three tiers is not micro enough, right? Well, the lines between these tiers are becoming more and more blurred over time as enterprises tinker with the allocation of responsibilities in pursuit of delivering the most business value with their software. In any case, Java EE has always been a well integrated collection of enterprise technologies for the Java platform, evolved using a consensus based open development practice (the Java Community Process or JCP) with material participation from leading stake holders. The "web tier" of this platform is really just the set of technologies that one might find useful when developing the "web tier" of your overall solution. This is a pretty big list:<br />
<br />
WebSocket 1.0 JSR-356<br />
JavaServer Faces 2.2 JSR-344<br />
Servlet 3.1 JSR-340<br />
JSON Processing 1.0 JSR-353<br />
REST (JAX-RS) 2.0 JSR 339<br />
Bean Validation 1.1 JSR-349<br />
Contexts and Dependency Injection 1.1 JSR-346<br />
Dependency Injection for Java 1.0 JSR-330<br />
Concurrency Utilities for Java EE 1.0 JSR-236<br />
Expression Language 3.0 JSR-341<br />
<br />
For the purposes of this blog entry, let's take a look at the first five: WebSocket, JSF, Servlet, JSON, and JAX-RS. While the second five are surely essentail for a professional web tier, it is beyond the scope of this blog entry to look at them.<br />
<br />
<b>WebSocket</b><br />
JSF and WebSocket are the only two Java EE 7 specs that have a direct connection to the W3C HTML5 specification. In the case of WebSocket, there are actually three different standards bodies in play. WebSocket, the network protocol, is specified by RFC-6455 from the IETF. WebSocket<br />
the JavaScript API is specified as a sub-spec of HTML5 from the W3C. WebSocket the Java API is specified by JCP under JSR-356. In all aspects of WebSocket, the whole point is to provide a message based reliable full-duplex client-server connection.<br />
<br />
JSR-356 lets you use WebSocket in both client and server capacities from your Java SE and EE applications.<br />
<br />
On the server side, it allows you to expose a WebSocket endpoint such that browsers can connect to it using their existing support for the WebSocket JavaScript API and network protocol. You declare your endpoints to the system either by annotating some POJOS, or by imperatively calling bootstrapping APIs from java code, say from a ServletContextListener. Once the connection is established, the server can send and receieve messages from/to any number of clients that happen<br />
to be connected at the same time. The runtime automatically handles connection setup and tear down.<br />
<br />
The WebSocket java client API allows java SE applications to talk to WebSocket endpoints (Java or otherwise) by providing a Java analog to the W3C JavaScript WebSocket API.<br />
<br />
<b>Java Server Faces (JSF)</b><br />
In JSF 2.2 we added many new features but I will only cover three of them here.<br />
<br />
HTML5 Friendly Markup enables writing your JSF pages in almost pure HTML (must be well formed), without the need for the XML namespaces that some see as clumsy and difficult to understand. This is possible because the underlying HTML Basic JSF RenderKit (from JSF 1.0) provides all the necessary primitives to adopt mapping conventions from an arbitrary<br />
piece of HTML markup to a corresponding JSF UIComponent. For example, this is a valid JSF form<br />
<pre class="code"><code>
<form jsf:id="form">
<input jsf:id="name" type="tel" jsf:value="#{complex.name}" />
<progress jsf:id="progress" max="3" value="#{complex.progress}" />
</form>
</code></pre>
The only catch is the need to flag the element as a JSF component by use of a namespaced attribute. This means you must declare at least one namespace in the <html> tag:<br />
<pre class="code"><code>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:jsf="http://xmlns.jcp.org/jsf">
</code></pre>
Faces Flows is a standardization of the page flow concept from ADF Task Flows and Spring Web Flow. Flows gives you the ability to group pages together that have some kind of logical connection and need to share state. A flow defines a logical scope that becomes active when the the flow is entered and made available for garbage collection when the flow is exited. There is a rich syntax for describing flows, how they are entered, exited, relate to each other, pass parameters to each other,<br />
and more. There are many conveniences provided thanks to the Flows feature being implemented on top of Contexts and Dependency Injection (CDI). Flows can be packaged as jar files and included in your web application, enabling modularization of sub-sections of your web app.<br />
<br />
Just as Flows enable modularizing behavior, Resource Library Contracts (RLC) enable modularizing appearance. RLC provides a very flexible skinning system that builds on Facelets and lets you package skins in jar files, effectively allowing modularizing appearance.<br />
<br />
<b>Servlet</b><br />
The most important new feature in Servlet 3.1 is the additional support for non-blocking IO. This builds on top of the major feature of Servlet 3.0 (from Java EE 6): async io. The rapid rise of reactive programming indicates that Java apps can no longer afford to block for IO, ever. The four concerns of reactive programming: responsiveness, elasticity, resiliency, and event basis are founded on this premise. Prior to non-blocking IO in Servlet 3.1, it was very difficult to avoid blocking in Servlet apps.<br />
<br />
The basic idea is to allow the Servlet runtime to call your application back when IO can be done safely without blocking. This is accomplished by virtue of new listener interfaces, ReadListener and WriteListener, instances of which can be registered with methods on ServletInputStream and ServletOutputStream.<br />
<br />
When you add this feature to the async-io feature added in Servlet 3.0, it is possible to write Servlet based apps that can proudly sport the "We Are Reactive" banner.<br />
<br />
<b>JSON</b><br />
From the outside perspective, the ability to parse and generate JSON in Java is certainly nothing new. Even before Java EE 7, there were many solutions to this basic need. Hewing close to the principle that standards are not for innovation, but to confer special status upon existing ideas, the JSON support in Java EE 7 provides the capability to parse and generate JSON with a simple Java API. Reading can be done in a streaming fashion, with JsonParser, or in a bulk fashion using JsonReader. Writing can be done in a streaming fashion with JsonGenerator. Writing can be done in a bulk style with JsonBuilderFactory and JsonWriter.<br />
<br />
<b>JAX-RS</b><br />
It is hard to overstate the importance of REST to the practice of modern enterprise software development for non-end-user facing software. I'd go so far as to say that gone are the days when people go to the javadoc (or JSDoc or appledoc etc) to learn how to use an API. Nowadays if your<br />
enterprise API is not exposed as a RESTful web service, you probably will not even be considered. JAX-RS is how REST is done in Java. JAX-RS has been a part of Java EE since Java EE 6, but it received the 2.0 treatment in Java EE 7. The big ticket features in 2.0 include:<br />
<br />
<ul>
<li> Client support<br />In my opinion, the most useful application of this feature is in using JUnit to do automated testing of RESTful services without having to resort to curl from continuous integration. Of course, you could use it for service-to-service interaction as well.</li>
<li> Seamless integration with JSON<br />In most cases a simple @Produces("application/json") annotation on your HTTP method endpoint is sufficient to output JSON. Data arriving at your service in JSON format is also automatically made available to you in an easy to consume format from Java.</li>
<li> Asynchronous support (Reactive again)<br />This feature gives you the ability to hand off the processing required to generate a response to another Thread, allowing the original thread to return immediately so no blocking happens. The async thread is free to respond when it is ready.</li>
</ul>
<br />
Naturally, this only scratches the surface of the Java EE 7 web tier. For more details, a great place to start is the official <a href="https://www.youtube.com/playlist?list=PL74xrT3oGQfCCLFJ2HCTR_iN5hV4penDz" target="_blank">Java EE 7</a> <a href="https://www.youtube.com/playlist?list=PL74xrT3oGQfCCLFJ2HCTR_iN5hV4penDz" target="_blank">launch webinars</a>.<br />
<br />
I hope to see you at <a href="http://www.javaland.eu/" target="_blank">JavaLand</a>!<br />
<br />
Thank you Ed for taking the time to write this post. If you haven't now is the time to to play around with Java EE 7. Here are some resources to get you started with JBoss EAP 7 and WildFly:<br />
<br />
<ul>
<li><a href="http://blog.eisele.net/2015/11/getting-started-with-eap-7-alpha-and.html" target="_blank">Getting Started With EAP 7 Alpha and Java EE 7</a></li>
<li><a href="http://blog.eisele.net/2015/12/a-java-ee-7-application-on-openshift-3.html" target="_blank">A Java EE 7 Application on OpenShift 3 With JBoss Tools</a></li>
<li><a href="https://github.com/javaee-samples/javaee7-samples" target="_blank">Java EE 7 Samples on GitHub</a></li>
<li><a href="http://blog.eisele.net/2015/12/getting-started-with-jboss-eap-7.html" target="_blank">Getting Started With The JBoss EAP 7 Quickstarts</a></li>
</ul>
Markus Eiselehttp://www.blogger.com/profile/16195673592300911244noreply@blogger.com0