Ok. Right now most programs are single-threaded. Since the pace of Moore's Law is slowing down (i.e. single-threaded performance will no longer double every 18-24 months), other ways are needed to increase performance. Multi-core is one way to do this. But in order to take advantage of multi-core cpus you need to change the architecture of your application from single-threaded to multi-threaded.
That means:
* Identifying the parts of your application that can run in parallel.
* Breaking up your application into tasks, where at least some of them can be processed in parallel.
* Building a scaleable application architecture where each programmer can work on his task as if he was working on a single-threaded problem (best case, of course).
All this is usually the software architect's work.
Frameworks and middleware support you in the form that they either provide a finished (middleware) architecture (Applications Servers, J2EE, COM+, etc.) or building parts for various problems (synchronization, threading, message queuing) in an accessible and easy way.
To summarize this a bit:
Humans *really* like to think single-threaded and cannot handle complexity very well. And most programmers are no different.
The larger the application, the less you want the average programmer care about threading and synchronization issues.
So you need a good software architecture that hides complexity and lets the average programmer just concentrate on his task.
This is were the software architects come in.
Middleware and frameworks help create scalable, robust software architectures by providing a base architeture or building blocks or solving certain problems.
I hope I don't confused you.