In this interview, recorded at Adobe MAX 2009, Adobe Technical Evangelist James Ward talks about some of his recent work driving Flex adoption at large companies such as IBM, Oracle, SAP and SalesForce.com. James describes how he helped open and extend SaleForce's CRM application platform to support the deployment of Flex apps on the cloud. He also talks about some of the new and interesting features in Flex 4, LiveCycle Data Services (LCDS) 3, and several projects that allow Flex to talk to Spring, Seam and Hibernate on the backend.
The complete transcript of the interview has been provided below.
DZone: James, can you tell us a little bit about some of the work you're currently doing at Adobe?
James: I focus a lot on the enterprise and Java communities. I speak at a lot of Java conferences and just try to teach people about how to integrate Flex and Java together. That's what I mostly do. I also work with a lot of the big software companies, to help them adopt Flex -- companies like Oracle, SAP, IBM, Salesforce. So I just work with them, hand in hand, to make sure that they're successful at using Flex.
DZone: How has the Flex platform evolved to accommodate the needs of Java developers?
James: I started doing Flex about five years ago, in combination with Java. And there was certainly some pain there five years ago, and things were pretty new with Flex. But now things have matured a lot, and for Java developers to pick up Flex and start programming Flex applications on top of Java, it's simple. The languages are similar, so people pick them up and learn them really quickly. So yeah, it's a good time for Java developers to get into RIA and pick up Flex.
DZone: As you help some of these larger companies adopt Flex, are you coming across any unique challenges?
James: A lot of times, I think one of the biggest challenges is just to kind of rethink how users want to use software, because we have these really monolithic, old, enterprise legacy systems. We can put a whole new RIA front end on top of them, but if we're not really thinking through how the user wants to experience the software, and we're not really thinking through what are the best ways to have this user interface be displayed to the user, then we're not really changing much. So I think that's one of the biggest challenges that we face is just how do we really rethink software and the way that users interact with our software. For me as a developer, I don't feel like I'm very capable of doing that. I think that it takes integrating designers into the process to really be able to change the way that users experience software and to really simplify things.
This is one of the things where we have seen enterprises do this, but it's usually not driven by a developer who says, "All right, we're going to switch to RIA, and it's going to make everything better." Usually, it's driven by someone who really cares about the experience and creating a great design, and they go in and push for it. The best way to get that experience is by using Flex.
Certainly, Flex can come from the developers, and developers can just go out and build an RIA with Flex on top of Java. But I think that doesn't always lend itself to creating the best experience possible.
DZone: Does Flex Builder facilitate better interaction between development and design teams?
James: Absolutely. That's one of the great advantages that we have at Adobe is, because we're so integrated into the design space, we really have the ability to integrate the Photoshops, the Illustrators, the tools that the designers are using, integrate those into the development process for this next generation of software, which we're calling RIAs. It's really just about making software easier to use, making it easy to deploy, taking advantage of a real client technology on the client side. So I think Adobe has an advantage, of just being the major player in the design space. We really can get those designers integrated into the work flow and contributing to what the developers are doing in a much more real way.
DZone: Switching gears a bit, James. You've been doing some interesting stuff around cloud computing and integrating Flex with the cloud. Can you talk a little bit about that?
James: A few years ago, I started working with Salesforce.com. Salesforce.com was going away from just being a CRM company. They wanted to become a platform company. They wanted to become what we're now calling cloud. They wanted to have a general purpose application platform in the cloud, and they'd already built it for their CRM application. So what they then were able to do was extend that and open it so anyone could build any application on the cloud. So what I started working with Salesforce on was to build a library that just made it really easy for Flex developers to talk to Salesforce and use Salesforce as the back end. It can be on top of the CRM system, but it can also be on top of anything you can imagine.
We've seen applications that have nothing to do with CRM, so things like e-commerce sites. Totally nothing CRM in there. I guess there might be some CRM stuff, when somebody makes a purchase. But there's all this functionality that has nothing to do with CRM, and it's still using the Salesforce.com foundation, still the great uptime, all the great things that we love about cloud computing, combined with a great user interface.
I think the next generation of software is about full client capabilities and ease of deployment. So cloud and Flex together really help us to get there, with the ease of deployment and the full client capabilities.
DZone: That's intersting. So using SalesForce as a cloud platform Flex developers can now gain a lot of these provisioning services out of the box without really having to worry about writing plumbing code.
James: There's different layers of cloud providers. At one layer, there's like Amazon, where all it is is just you throw anything you want into their cloud and they'll run it. And so you can certainly put Linux and BlazeDS and whatever you want into the cloud on Amazon and connect to it. But then there's layers up from that, like Salesforce and Intuit. Intuit has a platform called the Intuit Partner Platform, IPP. So, with IPP, it's like Salesforce. It's more of a platform for building applications. It's kind of like database in the sky, but then they put other things around it. They put auditing. They put work flow. They put all the different pieces that in the Java world we'd have to assemble together with a bunch of different products or go buy something from IBM or Oracle. They're just putting all that into the cloud so that developers can use those services.
Then, for Flex developers, it's great, because then you just build your back end in the cloud, and then you connect to it from the Flex front end, and it works really well. So Intuit and Salesforce are both doing that. Google App Engine also provides that same sort of functionality as well. So there's definitely some interesting stuff happening there.
DZone: Is the industry as a whole moving back to a completely 'thin client' model or is there still a certain kind of processing logic that needs to always stay on the client side?
James: It's interesting, because we are moving to this hybrid where, for a while, back in the old days, everything was thick-client. Everything ran on the client, and it was just connecting to a database on the server. Then we went to thin-client, or the web, and so we just had this dumb web browser where everything was being done on the server. Now we're moving into a hybrid model, where it's a mix between the thin client and the thick client. No one's really coined a good term for this yet. There's been a few terms tossed out there, like, instead of "thin client," calling it "thin server." But it's really just this balance between the two. We have a bit thicker of a client, it's not a completely thick client, and then we have a bit thinner of a server. So this works. Whether your back end is in the cloud or whether you're hosting it yourself with Java or whatever, it's still this paradigm of, yeah, we're going to have a balance between what logic is on the client and what logic is on the server.
DZone: What are some of the features in Flex 4 that excite you the most?
James: A lot of the focus around Flex 4 has been on in better enabling that designer/developer work-flow. What we've done is, we've made a lot of changes to the FlexSDK, which is the open-source SDK, to really enable this designer/developer work-flow. A core part of that was in creating a new component model, called "Sparc," which really allows designers to have full control over how the visual appearance of components is. They can use tools like Flash Catalyst, Photoshop, and Illustrator to create those visual assets for the components. But those visual assets are pretty physically separated from the actual underlining implementations.
What's great about that is, you really get this work-flow where designers are actually creating the look and feel for the components, whereas with Flex Three, it was not as integrated. You pull in design assets from those tools, but there wasn't 100 percent parity, there wasn't a good back and forth hand off there, so the new Sparc component model really enables that.
I think that has some impact on Enterprise developers. Enterprise developers are usually more concerned about data grids and, "how do I get my data from the backend or the front end, " and those sorts of things. There have been some improvements around that as well. A lot of those improvements have actually been done in tooling, so the new version of Flexbuilder, what's called Flexbuilder today, will be called Flash Builder Four, we're going to do a product rename on the tooling.
There's a bunch of new features in there that enable you to more easily pull in data from a backend. What you do is, you essentially say, you tell the tool, "here's my backend," and it will tell you, "alright, here's the methods that you could call in your backend and here's the types of objects you can get back." Then you just drag and drop these operations onto data grids or you create forms through wizards. It's getting into this model driven, "I've got my backend model and I can just generate UI from that."
So for Enterprises, I think this will lead to a lot higher productivity for building in these data-driven types of applications.
DZone: These backends include things like Web services, RESTful services?
James: It can be anything from SOAP/REST, ColdFusion, Java, PHP, a number of different backend technologies are supported in these data wizards.
DZone: There's this notion of workflow in Flex Builder 4 which allows developers and desgners to work together more effectively. Using this tool, is it typically the UI team that defines and drives application use cases or does the Flex developer also play a integral part?
James: I think it can work however people are most comfortable. If organizations are very design-led, they can drive this and they can hand off the created code. Like Flash Catalyst, what it's doing - when the designer is going through and creating a UI in Flash Catalyst, it's actually writing Flex code, and then they can export data and give that to the developer and the developer can then go in and add the connections to the backend and do all the business logic and all those sorts of things that the designer isn't concerned about. In design-led places, I think that's great; especially with prototypes and that sort of thing. For companies that are more developer-led, I think that they'll be asking the designer to give them some asset, so they'll be taking an asset from Catalyst, or from Photoshop, or from Illustrator, importing that into the main application.
I think it'll work with whichever workflow, who's really the leader. I think usually, in most organizations, one side of the spectrum is the leader. Either the designers are leading stuff, or the developers are leading stuff. Either way, it allows them to really work together and have a nice work-flow.
DZone: In the Java world, we have a number of JSF-based component libraries (i.e. ADF, RichFaces, ICEFaces). When would I consider using one of these versus Flex?
Most of the time, people are somewhere in the middle and so that's where integrating Flex and Ajax becomes important. You probably want to have some components that are Ajax, some components are Flex and allow them to communicate together.
There's a number of projects out there that allow you to do JSF to Flex bridges, so you can integrate the two together, there's ones for Seam, there's ones for - what are some of the other JSF projects out there? I've seen people do it with ADF and RichFaces. Not just JSF, people are doing this with SpringMVC and people have started to do it with Tapestry and Wicket.
When you're in that middle zone between this very rich application and content-centric applications then you can really mix-and-match the two together. You can do that either in the browser or, if you're in an AIR application on the desktop, you actually have much better integration between the two environments; they're actually completely tied together. So Air gives you even more flexibility for integrating Flex and Ajax together.
DZone: What's new in LiveCycle Data Services (LCDS) 3?
James: A big focus, like the focuses for Flex 4 and Flash Builder 4 for LCDS 3 are around that developer productivity. We want to make it really easy for developers to build applications which connect the data, which manage data, you know the threat operations and those sorts of things. What we've done, is to add this model-driven development aspect to LCDS 3. What that allows you to do, is you essentially just create your model and that writes your backend and your front end for you. You're just doing everything through a model and it's generating the UI, generating the backend for you.
So there's two sides to that. There's Flash Builder plug-in side and the backend LCDS that runs in a Java app server part of that as well. That's been a big focus is that we just want to make it super easy to build these Enterprise applications. You can look at it as being an alternative to the PowerBuilders and those types of environments.
Some of the interesting things that they've done with LCDS 3, is they added the ability to have essentially a DMZ server that is handling your RTMP connections. The RTMP is used for real-time streaming to Flex applications, so we can stream data in real-time, either for paging, for pushing updates out to clients, so we can use this RTMP server, but a lot of times you physically separate your backend business logic server from your client. You have DMZ server in there, so you're actually going to terminate the RTMP connections on this DMZ server and then make a connection back to your backend business logic server. So being able to do that two-tiered deployment. That was another great feature of the LCDS 3. There's also been some other features around, I think clustering, and rerouting connections when boxes fail and just being able to support the high availability use cases and those sorts of things. Just some fundamental improvements in how things work for sure.
DZone: How does BlazedDS allow me to integrate my Spring and Flex applications?
James: So obviously the Java community has massively embraced Spring. You can connect to Java, a Java background from Flex through a lot of different ways. You could talk SOAP, you could talk RESTful XML, you could talk JSON, you can come up with your own protocol, or you can use these remoting protocols which are a much more efficient, easier way to connect to Java. So that's what BlazeDS really does is it allows you to easily connect from Flex to Java using a remoting AMF protocol.
When you use BlazeDS though, you essentially have to create these proxy objects which talk back to your backend services. Then you have to configure BlazeDS to tell it about these proxy objects that you're going to call.
With Spring, what we're trying to do is centralize all of our configuration into a single place or a standard format. So we didn't really like having this configuration that was outside of the Spring config specifically to tell Blaze what these objects were that we were going to talk to.
So what we created was, we worked with SpringSource to create this thing called the Spring BlazeDS Integration, and what that allows you to do is just do your configuration in Spring config to tell Spring about what the remotable services on your backend are. Ao you can do that either in Spring XML config or you can annotate your classes, whichever way is more convenient for you.
So essentially we take all the configuration that is in BlazeDS being done through BlazeDS config files and we move that into Spring config files. So it's really easy now to integrate Flex with Spring.
It also has the benefit of integrating with Spring Security, and this is a huge benefit because most of these enterprise applications, they need security. Now you can just go into one of these POJO objects that's your Spring beam and say, all right, this user coming from Flex needs to be in this role in order to call this method. So it's fully integrated.
If the user on the Flex side tries to call that method and they're not in the right role, then they get exceptions and the developer can handle what happens then. So it just makes it really easy for developers that have Spring on the backend to build the Flex front ends on top of it.
DZone: Are there any projects right now underweigh to allow for Flex and JBoss integration?
James: We've been talking to JBoss quite a bit. I spoke at JBoss World here recently, and there's a lot of interesting things that we can look at. One of the first things we're looking at is Flex and Seam integrations. So we're able to now, they created a first pass project on doing this, and so it allows you to talk from Flex to your Seam object. That's just one of the things that they're going to be adding. There's some interesting things going on with Seam. With JBoss application server, we've looked at integrating BlazeDS into it and trying to figure out what other ways that we can really take advantage of it. I think people have done some interesting stuff with the JBoss Rules engine and integrating that with Flex.
So there's definitely some really interesting things happening with JBoss. JBoss is a great product so it's good to see the collaboration there.
Is there anything else about JBoss that's, there's definitely some cool stuff.
Oh, and then of course there's Hibernate and EJB 3. There's also some projects out there that make it really easy to integrate from Flex to EJB session beans, EJB 3 session beans and your Hibernate objects.
One of the problems that you run into when you're talking from Flex to a Java backend is that you can't send your entire tree of data down to the client at once usually, because usually it's too big. So on the server side we use Hibernate to lazily load stuff, but lazily loaded stuff can't be serialized across the wire.
So essentially what you have to do is you have to go in and configure your backend Hibernate objects to only send specific parts of the tree, or prune parts of the tree off. So there are some projects out there that allow you to do exactly this, where you can go in and just annotate your Hibernate beans to say what gets pruned before it gets sent across to the Flex side.
So there's definitely some interesting stuff happening the whole JBoss ecosystem.
DZone: How is Adobe driving Flash adoption throughout the mobile community?
James: Mobile is huge, you know everybody wants to be on mobile devices. There's a few different directions that we're heading with that. We're trying to get Flash Player into the browser on all these next generation mobile devices that have browsers, that have real web browsers. So that's happening under something called the Open Screen Project. RIM just recently signed up; we just announced that here at MAX 2009 that RIM had signed up along with a number of other vendors. We demonstrated Flash Player running in the browser on a Palm Pre today, and a number of other devices. So there's a lot of great things happening around mobile.
We also are trying to get AIR, the AIR runtime working on mobile devices as well. So that would allow you to actually have installed applications on the mobile devices, so not just in the browser Flash, but also installed applications running natively on the devices.
So with that, one of the things that we're looking at is actually cross compiling a Flash application to a native iPhone application. So we demonstrated that at MAX 2009, showing how you can take a Flash application, run it through this tool and then it will create you the native iPhone application that then can go up into the app store.
DZone: Looking beyond the Flex 4 horizon, what are some of the new and innovative features we can expect to see in upcoming releases?
James: Mobile is definitely huge. We're definitely working on how to best do mobile. There's definitely some challenges there on mobile devices; you have memory constraints, you have power constraints, you have CPU processing constraints. So addressing those is going to be a pretty big focus for us going forward. You can't take a Flex application that consumes hundreds of megs of RAM and run that on a mobile device. You can't take a Flex application that loads tens of thousands of records of data and run that on a mobile device. You might be bandwidth constrained and may not be able to do that.
So we'll definitely be working on optimizing Flex for those mobile devices, but then also changing some things in the framework so that we can create these mobile applications with Flex with our developer tools that we're already using to create the web and desktop applications.
DZone: What advice would you give to Java developers looking to use Flex?
James: The major thing is to go out and check out Tour de Flex. So if you go to flex.org/tour then there's a great application. You can either use it in the browser or on the desktop as an AIR application. What Tour de Flex is, is a number of code samples that just walk you through how to do certain things. So if you want to, say "I want to create an application with a ComboBox. There's a sample for that." You just go in, pull up the sample for ComboBox, then you see the sample actually running and you see the code for it. You can copy and paste the code into Flash Builder, Flex Builder and start tweaking that code for your purposes.
There's also a number of examples in there for talking to BlazeDS, talking to Java on the backend, talking to Spring, using LCDS, doing data management, doing messaging with JMS. So there's all these code samples in there. It's really the best way to learn because most developers just learn by looking at examples and seeing how to do things.
So Tour de Flex is a great resource. I definitely encourage Java developers to go and check out Tour de Flex and yeah, let us know what you think.
DZone: James, on behalf of the Dzone community, thank you very much for your time today.
James: Thanks for having me.