What components of a Java development stack should I know about?
I have a fairly limited knowledge of Java development. I came across the following, rather daunting, list of co开发者_如何学编程mponents/tools/frameworks of what was described as a "fairly typical Java stack". I will go off and investigate these, but what else should be on my list of things to know something about? Either alternatives for the below, or additional component types not included in this list.
My main intent is to do some Scala development, but in practice that involves a lot of interaction with Java.
- Wicket
- Hibernate (JPA)
- Atomikos (JTA)
- Terracotta
- Wicket-Push (Cometd)
- Dojo
- AspectJ
- XStream
- TestNG
- DBUnit
- EasyMock
- MySQL
- Jetty
- Maven
- Hudson
EDIT: When I say "know about", for now, I don't mean know them in depth and how to develop with them. I mean that I should be aware of them, what they are for, and recognise when I should be considering using them. So I'm interested in hearing about all the common tools/technoloogies/frameworks so that I can investigate them to this initial degree.
THis is a rather large assembly of technologies for a full-scale server-park web application.
I would suggest you focus on the core Java runtime and learn it well first, since that is what all the others technologies build on top of eventually.
EDIT: As your focus is on the technologies, I would suggest that you initially learn how to write and deploy Scala programs in a Java EE 6 Server like GlassFish v3 which I think is rather nice. The reason for this is simple - all the technologies you list are separate entities which need to be brought together in order to work. You can get much of the functionality in a single package by using a Java EE server, so you can postpone the actual tinkering until you are more familiar with the Scala environment on a Java-based web platform.
When you have gotten from "I've written a Scala program" to "I've written and deployed a Scala program to my production Java EE server which I can see in this web page" you have actually accomplished a non-trivial piece of work.
I'll only comment on using the technologies I've used myself
- Hibernate (JPA) -- This framework allows you to easily work with Relational Database Records as plain old java objects
- Dojo -- Javascript library for easy client-side manipulation. If you are doing mostly server-side development you mostly don't need to worry about this.
- AspectJ -- Implementation of Aspect-Oriented Programming for cross-cutting needs. This is a deep rabbit hole. That allows you to interact with java code in functional way.
- DBUnit -- I've only used this as a tool for pre-loading a database with a bunch of test-records
- EasyMock -- Testing Library which allows you to focus on unit-testing single pieces of functionality easily
- MySQL -- Standard RDMS
- Jetty -- a pure java implementation of a servlet container. Great for quick development.
- Maven -- A build tool for managing the dependencies of your project and building/deploying your project
Put your list on the backlog and start with a powerful IDE (eclipse or netbeans).
First things to add, to my opinion, are a logging framework (log4j) and a testing framework (jUnit or TestNG). For building - I'd recommend looking at ant first before moving to maven.
Hudson is great but it only makes sense (to my opinion) if you use version control, issue tracker and building tools too.
I consider myself a Java developer, and there's exactly one item in your list that I've actually used (XStream). Additionally I'm aware of about other 5 items, but most of them I've never heard about.
I think the stuff at http://download.oracle.com/javase/7/docs/api/overview-summary.html comes before others when a "fairly typical Java stack" is concerned. How can you know what additional framework pieces you need, if you don't know what you already have in the standard runtime? There's about 40000 classes to know about. Learn ten per day, and you'll master the basics in 10 years :-)
- Smack API - good XMPP protocol API
- Saxon - XSLT processor
- Spring Framework - web-dev platform
- PostgreSQL - great RDBMS :)
- Java.NIO
- .....
And many, many more.
At least you're missing:
- EJB
- JMS
- JAXWS
精彩评论