What are some viable alternatives to BizTalk Server? [closed] - open-source

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 8 years ago.
Improve this question
In evaluating different systems integration strategies, I've come across some words of encouragement, but also some words of frustration over BizTalk Server.
What are some pros and cons to using BizTalk Server (both from a developer standpoint and a business user), and should companies also consider open source alternatives? What viable alternatives are out there?
EDIT: Jitterbit seems like an interesting choice. Open Source and seems to be nicely engineered. Anyone on here have any experience working with it?

BizTalk Server's key benefit is that it provides a lot of 'plumbing' around deployment, management, performance, and scalability. Through Visual Studio, it also provides a comprehensive framework for developing solutions, often with relatively little code.
The frustration and steep learning curve that others mention often comes from using BizTalk for the wrong purpose and from a misunderstanding about how to work with BizTalk and message-oriented systems in general. The learning curve is not as steep as most people suggest - the essential part of the underlying learning actually focuses on changing thinking from a procedural approach to a stateless message-based approach.
A drawback people often cite is cost. The sticker price can seem to be quite high; however, this is cheap in comparison to the amount you'd spend on developing and supporting features on your own.
Before you consider alternatives, or even consider BizTalk server, you should consider your organization's approach to integration and it's long term goals. BizTalk Server is great in cases where you want to integrate systems using a hub and spoke model where BizTalk orchestrates the activities of many applications.
There are other integration models too - one of the more popular ones is a distributed bus (don't confuse this with the term "Enterprise Service Bus" or ESB). You can also get BizTalk to work as a distributed bus and there are alternative solutions that provide more direct support. One of the alternate solutions is an open source solution called nServiceBus.
When considering whether to use a commercial product like BizTalk, verses something else (open source or developed in house), also consider maintenance and enhancements and the availability of the necessary skill-set in the marketplace.
I wrote some articles that go into more detail about the points I discussed here - here are the links:
Why BizTalk?
Top 10 BizTalk Mistakes
Extensibility Features in BizTalk Server
Open Source Integration with nServiceBus

My experience with BizTalk was basically a frustrating waste of time.
There are so many edge cases and weird little business logic tweaks you have to make when you are doing B2B data integration (which is probably the hardest part of any enterprise application) that you just need to roll your own solution.
How hard is it to parse data files and convert them to a different format? Not that hard. Unless you're trying to inject a bloated middleware system like Biztalk into the middle of it.

As a BizTalk consultant I have to agree at least partly with Eric Z Beard, there are a lot of edge cases that take up alot of time. But quite a few scenarios are handled extremly smooth as well, so it all depends IMO. But when you (Eric) call BizTalk bloated I have to disagree! We've found that the performance and reliability is excellent, it's flexible and comes with a lot of good adapters out of the box.

BizTalk needs to be used correctly,
I am a BizTalk developer and my experience with BizTalk is quite good.
Its reliable, performant, scalable, contains a lot of built in architectural patterns and build in components to make integration easy and fast, you get security, retries, secondary transports, validation, transformation etc... and what ever you dont have build in with BizTalk you can easily customized with .NET code, its basically a hard earned integration system and you get all this in one box.
BUT you need to know how to implement BizTalk correctly, not once I came across solutions that where implemented and often also architected incorrectly.
but the real benefit of BizTalk is that you can implement small solutions and scale up whilst most other integration systems from big vendors will only sell a whole integration pack which can cost much more.
BizTalk is considered the most complicated server from the house of Microsoft.
So any body saying BizTalk is not good dosent know BizTalk period.

We evaluated BizTalk at our company and were really disappointed.
We are using IBM WebSphere Transformation Extender (which has lots of (other) problems, too) and the mapping tool of BizTalk is a joke in comparison to WTX.
The graphical tool is not really usable for complex mappings (we have schemas with a few hundred fields in repeating groups) and if you do more than the usual "concat first name and last name to name" mappings, you will be tired of the graphical approach (for example the arguments of the functoids in the graphical mapper are not labeled and the order in which you connect fields to these arguments is important).
The XSLT-Mapper was usable but not really convincing, and even the microsoft rep told us to use a tool like XMLSpy for XSLT and load the resulting XSL file into BizTalk.
A third approach to mapping is to use C#-Code for the mapping, which was not acceptable for us as a general approach (we don't want to teach everyone C#).
In addition to the mapping tool we did not like the deployment in BizTalk. In order to deploy your process, you need to make lots of settings in different tools and places. We had hoped to find a mechanism like a WAR file for Java Web Applications in BizTalk, so that you can give one archive for your whole process solution to your administrator and he can deploy it.

We've been using BizTalk since version 2004, and now have a mix of versions 2006 R2 and 2004 running. I found that the learning curve was quite severe, and development time for solutions is not always quick. Those are definitely shortcomings. Where BizTalk really excels is in its fault tolerance, gauranteed delivery, and performance. You can rest assured that data will not get lost. Retry functionality and fault tolerance robustness is baked in so generally speaking if systems are down BizTalk will handle that and successful delivery will occur once systems come back on line. All these issues such as downtime, etc that are important in an integration scenario are handled by BizTalk.
Further, generally speaking when developing solutions BizTalk abstracts the communication protocols and data formats of the native systems by dealing with everything as xml, so when developing solutions, you typically don't have to wrote code specific to those systems, you use the BizTalk xml framework.
In the last year, we've implemented a java open source engine called Mirth for our HL7 routing. I found that for HL7 purposes, the HL7 adaptor for BizTalk is a challange to work with. Management dicated that we use Mirth for HL7 routing. Where BizTalk falls down in terms of learning curve, Mirth makes up. It is far easier to develop a solution. The problem with mirth is that it doesn't really have any gauranteed delivery. Most of the adaptors (except for hl7) have no retry functionality so if you wanted that you'd have to write your own. Second, Mirth can lose date if it goes down. I would call it very easy to use (although there is no documentation) but I'd be hard pressed to call it an enterprise solution. I'm going to check out jitterbit which was mentioned by someone else.

We used BizTalk for a couple of years, but gave it up for our own custom framework that allowed more flexibility.

There is always Sun's (now Oracle) OpenESB framework. Its generally speaking a smaller, lighter version of Biztalk but with roughly all the same features.
You do get to write more code with it, though.
Its Open Source as well.

In the OSS space (though I've never used them as a BizTalk replacement personally - this is anecdotal) you can use one of the Java/J2EE Messaging engines such as OpenMQ (which is the Sun enterprise one rebadged and without support). If you need Orchestration / Choreography (i.e. SOA/ESB pieces) on top of this, you could look into something like Apache Mule

My experience with BizTalk and doing B2B integrations is that most organizations do not truly do schema first design or fully understand xml standards for that matter. Most tend to weave objects and hope they materialize into meaninful schemas. In an enterprise environment, this is backwards.
BizTalk does have a learning curve, but once you get it you are rewarded with durability, performance, true scalability, and extensibility. Like most have said though, it best to make sure it meets your needs and contort your needs to BizTalk.
In the past I have worked with BizTalk 2004 through 2009, and another product called webMethods.

I have no direct experience with JitterBit, but I have heard very good things from coworkers.

I came across Apatar (unable to post url, but Google finds it) while looking for a solution cheaper than BizTalk. I have yet to try this out.
My last company had many problems with BizTalk being too complex and ridged, but I can’t help but think this was mainly down to the implementation the consultant did.

Related

Language-independent tutorial or book on web-apps

Is there any language-independent tutorial or book for developing web applications?
For example implementation of login procedures, photo-gallery making etc, not focused on any particular language?
I'd suggest a book like Web Application Architecture: Principles, Protocols and Practices. It provides a high level overview of the pieces of developing a web application, with some real examples when they are called for.
I'd like to suggest - Coding Horror: Recommended Reading for Developers
Patterns of Enterprise Application Architecture by Martin Fowler is a good start.
The example code is in Java and .Net but the patterns transcend any specific programming language. It deals with subjects such as how to implement server side sessions, patterns used to create a Model-View-Controller framework, patterns used to create an object relational mapping framework, and a little bit on how to string it all together.
A few other paradigms have entered into the fray since it was written, which are not covered such as dependency injection. There is no coverage of NoSql databases and when to use them. It also lacks coverage of more retro topics such as CGI, and older frameworks/languages that used this standard (ie webapps written in Small talk). The book also predates the widespread use of "convention over configuration" frameworks such as Rails. Transactions are dealt with adequately but the coverage is not complete, referring the reader to Principles of Transaction Processing by Bernstein and Newcomer, for in depth information.
It might be worthwhile to complement reading PEAA with a good understanding of Unix sockets, and how this ties up with the threading and shared memory facilities offered by the language you are programming your web application in. The concurrency features of the run-time environment your application is deployed in will influence how you process requests and implement server-side sessions. If you need to remind yourself about sockets read chapter 12 of "The Illustrated Network" by Goralski. If you really want to geek out read the chapters on networking and threading in "Computer Systems: A Programmer's Perspective" by Bryant and O'Hallaron, though this might be overkill. Just know the concurrency capabilities of your chosen programming language and how it talks to the network layer.
A good understanding of the HTTP protocol is essential. This will lay a solid foundation for learning other important standards based on HTTP such as REST and AJAX. For in depth information on HTTP there is "HTTP: The Definitive Guide" by Gourley and Totty. There is also W3C. For an introduction to REST have a look at
http://www.infoq.com/articles/rest-introduction
For a broad brush overview of HTTP and sockets have a look at Wikipedia.
Concerning usability I would recommend the following two books from the Pragmatic bookshelf:
http://pragprog.com/titles/bhgwad/web-design-for-developers
http://pragprog.com/titles/jsaccess/design-accessible-web-sites
Finally concerning security a good place to start might be "24 Deadly Sins of Software Security" by Howard, LeBlanc and Viega. Part 1 deals specifically with web applications and Part 4 deals with network security in general. Part 3 on cryptography is also good, if you are generating "remember-me" tokens stored in a cookie, so that a user does not have to log in each time they use your app.
I am not aware of any one "cookbook" that will provide a solution for every problem you are likely to come across developing a web app but if you read all of the above you will be fairly well positioned.

How to choose the right web application framework?

http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks
Since we are ambitiously aiming to be big, scalability is important, and so are globalization features. Since we are starting out without funding, price/performance and cost of licences/hardware is important. We definitely want to bring AJAX well present in the web interface. But apart from these, there's no further criteria I can come up with.
I'm most experienced with C#/ASP.net, PHP and Java, in that order, but don't turn down other languages (Ruby, Python, Scala, etc.).
How can we determine from the jungle of frameworks the one that suits best our goal?
What other questions should we be asking ourselves?
Reference material: articles, book recommendations, websites, etc.?
For me, the most important things to consider were:
Fantastic lead developers who I trust to keep working on the project.
Googling a question brings a lot of good answers.
Most importantly, I have to like the way the code flows.
Edit: Also they have to be anal about coding standards. If there is inconsistency, I get very annoyed.
Those 3 points brought me to Symfony. It is always using the latest cutting edge features of the latest PHP version. Symfony 2.0 is using namespaces before any other framework.
Two of your points were:
i18n - there is great support for it (helps that the company behind it is French, so i18n is a first class citizen).
Scales - Yahoo Answers and Vimeo use Symfony and contribute back code. If those guys can scale Symfony to 100 million users, you can too :)
It all depends on the type of project you will be developing.
Are you building a web application or a heavy content website or something else?
You also mix up programming languages with frameworks. The frameworks for PHP that I know are: CakePHP, CodeIgnitor, Zend and Symfony. For an out-of-the-box heavy content website I would suggest Drupal or Expression Engine.
It seems you won't be developing yourself. In that case I would determine the cost and availability of programmers and how widely the framework is supported and by who it is backed. The Zend framework is backed by the guys behind PHP, while CodeIgnitor is backed by the guys behind Expression Engine. Drupal has professional support packages,...
IMHO, for something that will have a lot of users, go for a compiled language.
If you don't try it, you will not know. So, I'd say do a small project in each of the frameworks you are seriously thinking about. I would prepare myself to do a lot of testing if it's something I'll be maintaining for some years. It's better to start off on the right foor than to get half way through a project only to realize you took the wrong path. There may be some requirements that end your search. For example, your servers' OS, a framework feature, or scalability. If you lay out your software plans and requirements, you probably will have very little left to choose from - unless your project really is quite generic or simple.

Tips to get started with webdevelopment

I am very curious about what you think is the best approach for people that want to start webdevelopment. I'm now talking about people that finished their education and so want to start from scratch.
I still have questions like:
Where do you start?
What software gets involved in webdevelopment?
What tools / setup would you recommend?
Offcourse i'm interested to hear alot more then only the answers to those three questions.
I am not writing this to get a load of people react on my post, i am trully interested in knowing how much work and money it will cost a webdeveloper when starting from scratch.
I hope to get a clear view on how to approach and to maybe hear some best practices.
Well one thing's for sure, education isn't finished! There's a whole lot to learn, and the more we learn the more we seem to need to learn.
If you're really starting from having no programming background whatsoever then I think you'd be advised to take a staged approach. For example:
1). A web page with a few different text formats and pictures and colours. Here you're just learning HTML. For that any browser and a notepad editor would do, but probably a tool such as Eclipse that gives some HTML editing capability would help.
2). More adaptive HTML - stylesheets that let you change appearance without changing all the html. So that's CSS.
3). Using the above, improve your designs. There are loads of formatting tricks good web sites use and you'll need to learn those.
Note that by now we've done a lot of study and we have not actually written any programs!
4). Dynamic web pages. Now we move to the programming side, rather than just writing some HTML files write a program that delivers the HTML and in some way changes the content. Starting with something really simple such as including "today's date is ..." on the page. For that You would need to pick a server development technology such as Ruby/Rails or PHP or Java/JSP ... You'll get a lot of different advise about "best" for this.
5). Now you can start to work on accepting input from the user and doing something with it so that useful work gets done. Things such as databases start to become important.
There's a whole load more after that, JavaScript and so on. An experienced programmer can pick up this kind of stuff quite quickly, if you've never done any programming at all then you will need to be prepared to take a while before you can get to the level you probably target. I think the key is to acknowledge that a great commercial web site reflects a lot of collective wisdom and skill picked up over many years, and probably is the result of a multi-disciplinary team working together. For one person to match that is a big ask. For one person to produce something nice and useful is more practical, but still does need a lot of different skills. It's quite reasonable to specilaise in a subset of the skills. For example, good visual designers write little or no code but are highly valuable.
you need:
a browser, eg. FireFox, Internet Explorer. A webdeveloper toolbar might also be useful.
a webserver, eg. Apache, Tomcat, IIS
a programming environment, eg. Php or ASP.NET
a development tool, eg. Notepad, Notepad++, Visual Studio .NET, Eclipse
most of the times a database, eg. SQL Server, mySQL
I'd say it depends what you want them to master: the technologies only (up to which skill level ?) or the whole software engineering behind a web project
A sample and fast technologies learning tree could be:
1) HTML
2) CSS
3) HTTP
4) Server side programming (PHP ?): programming concepts, interacting with HTML/CSS, then PHP API
5) Databases (start simply with MySQL for instance) + SQL (CRUD with Joins, Subselect, Indexes, Views and Transactions)
6) Client side programming (JavaScript first then Ajax)
7) A web framework (ZEND ? cake ?) and a good IDE (lots of...)
Full-time learning those technologies requires at least 1.5 year , based on the experience I have with my students and people must be trained mainly on concrete projects.
Then people should learn software engineering (cf link text) covering at least
- software requirements
- software design
- software construction
- software testing
I think people can have useful experience in this software engineering tree in 1 year and can (should) combine learning technologies with learning software engineering.
For training someone from scratch (technologies + software engineering) I'd say a least 2 years if working on at least three 6-month projects
This answer is Microsoft specific.
For starters you'll need an editor, a (optional) database and a few starting points.
Microsoft supplies most of these for free: you can download the Visual Studio Webdeveloper 2008 Express Edition for free, this includes most of the stuff you'll need.
If you plan on developing database driven websites, and who isn't, you might want to use the free SQL Server 2008 Express Edition
When you have the tools setup it's time to download some samples and see see how they work. Again Microsoft supplies some for free. You can check out tutorials and samples at their Asp.Net site.
When you are ready for some more advanced stuff, check out ASP.NET MVC, again at Microsoft.
With these tools and examples you should be able to get started.
I just want to add that you will most likely also need Photoshop or other tool to create the graphics for your web sites.
In spite of java/.net/php,the HTML,CSS,JavaScript are the basic web development toolkit.
Get a job as a junior developer that will put you on a project that is developing a web application. I personally think it should involve one of the two most established platforms, Java or .Net. I know some will disagree, but these are good foundations to branch into other tech platforms later.
Make sure you open an IDE (e.g. Visual Studio or Eclipse) everyday and code something. If not, find a new job immediately.
Read religiously at night. Start with "Code Complete", then move on to other books.
Learn the fundamental technologies of the World Wide Web:
HTTP
HTML
CSS
JavaScript
DNS, URL's
Good luck and happy travels!!
you need:
a google chrome . This provide you some advantage like inspect option. A webdeveloper toolbar might also be useful.
2. Html, Css, JavaScript are the basic language that you should be know
a programming environment, eg. Php or ASP.NET is needed for storing data and making login type page
a Visual Code Studio is needed for coding. This provide you emmet facilities that suggest you while you are coding

Dangers of Implementing Programming Frameworks into Project Source Code Prior to Release Candidate Status?

I've been dwelling on this topic for a long time now. I just wondered if anyone else out there shared my opinion. Isn't it essentially a bad idea integrating preview versions of programming frameworks into your project code before they are at release candidate level?!
I had a situation a few months ago where my boss insisted on using the Managed Extensibility Framework to handle dependency injection in a huge internal system we were building. We built the code around a preview version of this framework and then Microsoft released another version of it. We updated and everything broke, huge amounts of code had to be re-understood and changed...total pain!
...I'm getting the feeling that Ria Services could present us with a similar problem (or any other framework chosen to be implemented into a projects source code prior to full release state).
Opinions welcome.
Well, what else can be said? You're right - using something not even marked as release candidate for core functionality in your app is a considerable risk.
To alleviate the risk you could try creating a compatibility layer that you could adjust to "translate" to new versions of the framework - but that involves a lot of guesswork that may not work out.
And of course you can just stick with the preview version, if it already does everything you need. But that will bring its own headaches down the road.
All in all, I'd avoid it unless the newfangled thing in question definitely enables you to do something important that would otherwise be impossible, or yields massive productivity gains.

How would you teach web development?

I am the lead instructor of web & internet related courses on a private post high-school institution. My current classes include introductions to HTTP, TCP/IP, (X)HTML/CSS/JavaScript and generic SQL. Next year we will deal mostly with PHP / Java. What, in your opinion, are the most important aspects of web development in contrast and relation to traditional development and what should be the main focus of my lectures?
Of course there is a curriculum I will follow but I would really like to enhance it with everything there is time for, from hypes and semantics to oldschool hardcore scripting.
Keep in mind that I am fortunate enough to deal with highly talented and moderately motivated individuals.
Most important aspects of web development:
Where is this code running? (Client vs Server programming - as many have said)
Who is going to use this? (Know your audience - why are they on your site/app)
How to play nice (copyright, standards, borrowing ideas vs stealing stuff)
How to be resourceful (code libraries, google search and stackoverflow)
Main Focus of lectures
I am a strong believer in contextual learning. Let them choose a project with boundaries and guidelines that will employ the concepts you want to get across. One can spend all day learning syntax and concepts, but real learning is done when you are trying to solve a problem. They will also have more fun.
Summary
Lecture on the How (XHTML,CSS, JS, etc) but only in the context of Who, What and Why.
In my opinion, the most important thing is to teach the difference between server and client programming, and when you would use one over the other. I am so surprised at the number of new graduates that don't understand the difference.
IMHO, the most difficult concept in Web development is that of state and how to maintain it.
If I were designing a Web programming course I think I would get the students to design a simple application framework that attempted to address transparent state maintenance. Dividing them into groups, you could have them take different approaches (server-side, client-side, database supported etc.) approaches to this. And at the end of it I believe that they would have learned a lot more about Web architectures than if you had focussed on producing an actual application.
For front-end web development ((X)HTML/CSS/JavaScript), try the Opera Web Standards Curriculum which:
takes students from complete beginner
to having a solid grounding in
standards-based Web design, including
HTML, CSS, and JavaScript development.
I believe a lot in inspiration. As a new web developer I found it really difficult to make my websites usable, appealing, and well coded. I found inspiration in outside resources such as Nettuts and Smashing Magazine. These websites really opened my mind to all of the features I really could learn and use in my designs/coding.
Well if you are asking for opinion....
Please teach them:
self documenting code.
the difference between client and server
data checking
security
If they have a good understanding of the programming language (which it sounds like they will get with your curriculum) the things that I have listed will be a great improvement.
I also believe that web development can only be taught after first learning a little bit about software engineering. I think agile processes is the best route for teaching students software engineering. It's lightweight and not quite as document driven.
After that I would teach them the basics of client server programming, the http protocol and some basic web programming (PHP and javascript would be sufficient). If there is enough time I would show them the basics of Java EE programming and the differences between that and PHP.
Also cover some of the more advanced materials such as MVC for the web (using JSF) and javascript libraries (JQuery). I would also teach them data access objects and persistent objects.
For my senior research this year I came up with some materials for an upper level college course that requires web programming, web design, and software engineering background. You may look at the basic materials here to get a basic idea of what I thought of a course for an advanced web application development course. I know this may be out of your scope, but it might be a start.
Keep in mind that web programming is a mess and it is your job to provide not just light at the end of the tunnel, but the tunnel itself. I would expand on AaronS's answer:
The difference between client and server.
Web applications run over a network, with all that implies.
There is more than one way to do it. Squared.
In the end you will have to choose what not to teach to actually get somewhere.
If you have a group of motivated people then I will suggest to focus on creating a full web application from scratch, I mean, from requirements elicitation itself.
You could start with a brainstorming session where you get some of your students to take the role of the clients from different perspectives (you will need to came up with the base problem itself) and then another group of students who try to get the "clients" group to express their needs and propose solutions to those problems using via a web application. This will help them to learn one of the biggest problems of development in general which is the interaction with clients and how to get the most information out of them overcoming the usual communication problems. Actually if you can get other non-technical people to act as the clients it will be even better.
Then you can introduce then to a methodology like extreme programming or any other you like. I would suggest an agile one because it will provide faster results and won't get boring that fast, besides, the market appears to be shifting in favor of them.
Now, regarding web development itself, it is really important to get people to understand the need for web standards and how wrong things can go when they are not followed (IE6)
After all this is clear, it will be time for them to realize that in web development most of the time you just have to deal with the differences in platforms in which their applications will be displayed and teach them actual techniques to do so like unobtrusive javascript and progressive enhancement.
Regarding the server side of the equation, I believe it is important to enforce the use of patterns (MVC is a must), code re-use, and all the usual development practices. And be sure they understand that HTTP itself is a stateless protocol and how it is important to handle cookies and sessions in a responsible fashion, here it is important to make sure they understand the differences between the server and the client side.
Also, covering the OWASP top 10 (at least) is a must, the last version is available at: http://www.owasp.org/index.php/Top_10_2007
Some links:
http://www.quirksmode.org/blog/archives/2005/06/three_javascrip_1.html
http://dowebsitesneedtolookexactlythesameineverybrowser.com/
http://forabeautifulweb.com/blog
http://www.alistapart.com/
http://www.owasp.org/index.php/Top_10_2007
Teaching web development (like GUI builder in the old age) has the risk of focusing too much on the front-end and not enough on the back-end. It is too easy to fall into the trap of getting the students to think too much about superficial visual issues (e.g., how to align these two things) rather than core things (how to we effectively compute, calculate, store, etc.).
In addition, many web-development languages are not hallmarks of good programming practices since they tend to be on the dirtier scripting side.
These two factors together, to me, are why languages like PHP often get a bad rep.
If you were teaching people who were actually going to be practicing developers, I would focus separately on the model and on the view, and show how to tie them. But in a high school environment, it's possible that the parents just want their kids to demonstrate some publicly visible stuff for their college applications.
If they are truly talented and motivated, teach them real programming with some web manifestations (e.g., use Java servlets), and leave all the scripting for them to learn in their spare time. A good teacher is invaluable for building good engineering skills, so use your time where it matters.
I honestly do not believe you can do well with web development without having a good background with general software development. If one doesn't pay attention to that he/she will end as a mundane scripter or something.
Would be a good idea if you told us what kind of people with what background you get.
If you got some financial academy graduates, it is not clear what kind of motivation will they have towards any kind of development. If these are engineers or some creative field like design, decorations etc. it will be a different story.
Try to gather a little bit of best-practices from various aspects of development. A little from testing and quality control, a bit from project management, a few things about dealing with customers, security for publicly-exposed software, legal aspects. Not too much, just to paint a big picture.
I would start with introduction to web standards carriculum by Opera.
I think it would give a good understanding of some of the basic concepts in web development
For the programming portion, I would suggest you start with the lowest level / most basic concept you can come up with. The first thing that jumps to my mind is HTML. You could make sure the students understand HTML (and markup in general) and its basic syntax. I think that starting with hand-coded HTML will also give them a greater appreciation for some of the great tools out there that help you generate HTML or other code.
After that, you can get into some tools and technologies surrounding HTML like CSS, JavaScript, and AJAX.
Once the client-side is covered and those concepts are concrete in their minds, you can move onto server side scripting / programming. Most of the languages on the server side simply emit HTML, CSS, JavaScript, etc. to the browser, so understanding those things first is essential.
Finally, start talking about using their new found knowledge to create apps that talk to other systems (databases, web services, etc.). Once all of those basics are in place, you'll probably be done with the class, but then they'll be ready for the 200 level, right?
I like the answer about the difference between client side and server side programming. Since you teach talented/motivated students, I think that some theoretical discussion of the MVC (Model View Controller) architecture might be in order. How it was originally devised for desktop applications, and in that case it was necessary to implement a system that listened for events, so as to be able to keep all facets of the view synchronized with the state of the model as it was modified. But that, under the web paradigm, the listener code is given to you for free in the form of the web server, and the request is the event. And therefore MVC for the web, at least as regards interaction between client and server, should be less complex, with the controller merely mediating between the client and server.
That is, of course, until the advent of Ajax. When now it is appropriate to implement listener code on the client side with Javascript, so as to be able to keep widgets in synch.
I am an MVC junkie so take whats useful from this. Your mileage may vary, but I do think material on MVC is certainly warranted.
Good luck
Since you're getting into the server-side stuff, I would highly recommend going over some basic application security. From keeping applications (Wordpress, PHPBB, etc) up to date and patched, to actual attacks like SQL Injection and Cross-site scripting.
Since it sounds like you're teaching them from the ground up, you have a great opportunity to impress upon them the importance of input filtering and output escaping, legitimate user authentication, and other best practices.
This is very front-end focused as well... but I thought it was a great post.
http://veerle.duoh.com/blog/comments/teach_the_web_right/
[Edit]
She mentions the Opera Web Standards Curriculum as has been mentioned in previous posts, but she also mentions WaSP InterAct Curriculum. That seems like it's still very much in progress, but already has some great resources and links.
Focusing on "Next year we will deal mostly with PHP / Java". I'll focus on Java, since I don't know much about PHP.
Get the model right. Design a model, use the ORM, get this to work sensibly. This is highly reusable stuff. It's the backbone of the application. If this isn't right, the rest will rapidly become a mess.
Get the template presentation right. JSP's shouldn't do too much (they can, but shouldn't). This should have any fancy processing -- that's either a model problem or an action class problem.
Knit these together with Struts action classes and Java Beans that make sense in the domain you're building a solution for.
Add CSS/JavaScript and what-not after it all -- essentially -- works. No amount of JavaScript can fix a fundamentally flawed model.
Core Technology issues (XML, HTML, SQL, etc.) are important, but not central. It's hard to skip around, but you have to skip around.
SQL, ORM, Java first.
HTML, JSP, more Java next.
Struts, Action Classes, etc. and more Java next.
I think that much of the core skills issues need to be covered in a Just-in-Time manner. If you spend too much time on fundamentals of HTML, CSS and SQL, no one's building anything useful.