views:

91

answers:

3

Hello fellas. I am not new to software developing, but in the last years I was almost completely involved with web applications development, most likely to PHP with MySQL/PostgreSQL.

Now I am changing focus. I would like to start programming for desktop applications, with Java. The decision about language was motivated by the following reasons: it is a mature language, has space into the market, it is multiplatform, full of resources, and has some very nice IDEs (I am using netbeans 6.9).

I am not new to OOP concepts (or most of them at least), but Java has a huge gamma of solutions (technologies, frameworks and so on), and I am getting lost with that. Can't decide what is the most appropriate solution to adopt and learn from.

That said, let's get to the point. I will describe the software targets, some things I has adopted so far, and expect someone to give me some trail to follow filling the messy points.

My application is a small business application. Usual stuff about products, sales, cash management. It needs to run into a small office, with some computers (not a fully standalone desktop application). Not every user can do everything. Some would have privileges to access financial stuff, others only sell, others only fulfill products, and so on.

Per above highlevel definition, we know that it will operate like a client-server application. One server will be installed into just one machine, all others will just have the client. I am using HSQL as backend for persistence.

Would like to use Swing to build the UI (to keep theming based on the OS). Possibilities for the client include sending email (not directly, but through some already-set email client [Thunderbird, Outlook]) and printing (to any available printer in the network).

For this I am using Desktop API.

Alright, finally we got were I am loosing the grip: which framework / technology do you recommend to make development quick (pre-built forms based on the available tables), and as modular as possible?

As I said, different users would have different privileges, but instead of just checking and disabling, I would like to keep modules separated. In different packs, or something like that.

EJB? BlueJ? JavaBeans? OSGi? Swing Application Framework? I'm kinda lost with those. Any help will be appreciated.

+3  A: 

If you're lost, keep it simple.

For the kind of desktop apps you describe, you'll need Swing and JDBC. If you switch to web, substitute JSPs written using only JSTL and servlets. You'll have to know HTML and CSS to write JSPs. You can embellish those with JavaScript as needed.

You'll go a long way with just those.

The others you mentioned are just noise until you become more comfortable:

  1. EJBs are for enterprise scale apps. You get to leave a lot of complex stuff like threading, object pooling and lifecycle, etc. to an app server and concentrate on expressing your business logic in distributed, transactional components called Enterprise Java Beans. Not necessary to start.
  2. BlueJ is a beginners IDE designed to shield folks from the complexities of Java. I wouldn't recommend it.
  3. OSGi - modular deployments for web apps. Not necessary to start.
  4. Swing App Framework? I'm not familiar with it - I don't write Swing. If you mean Spring, I think it's an excellent framework, but not necessary to start.
duffymo
Swing Application Framework is actually quite nice thing and de facto standart way how to write Swing applications (it is wonderfully integrated in NetBeans IDE so you can just simply use template)
Xorty
Thank you, Xorty, I'll give it a look.
duffymo
Thx duffymo, this is very close to the asnwer I was looking for.
Dave
+2  A: 

This is a bit off-topic, but I think it should be said anyway.

My application is a small business application. Usual stuff about products, sales, cash management. It needs to run into a small office, with some computers (not a fully standalone desktop application). Not every user can do everything. Some would have privileges to access financial stuff, others only sell, others only fulfill products, and so on.

You are attempting something very ambitious here. There are countless existing applications for doing this kind of thing for small business, some of them household names. What makes you think that you can can do better? What makes you think you can compete?

The fact that you are new to Java makes this doubly ambitious.

My advice would be:

  • If you have dreams of making lots of money out of this, forget it. You are >10 years too late.

  • If you are doing this for some client, your company or yourself to use, they / you would probably be better off using an off-the-shelf business application.

  • If you are doing this for "the public good", you labors would be more fruitful if you joined some existing open source business application project.

  • If you are just doing this "for fun" ... go for it. (This doesn't strike me as a "fun" project though ...)

Stephen C
+1. our company has an awful time-tracking app in ASP + Microsoft SQL Server that they spent a lot of time writing. better to just use real software instead of writing your own, when you can.
Jason S
Stephen, my intentions should not make any difference to the answer. I am not any teenager dreaming about dominate the world, I have no interest at this point to join any open source project... well I'll not discuss this any further. My question were merely technical. Keep the answers at the same level.
Dave
@Dave - I hope you've got deep pockets then. Good luck ... you'll need it.
Stephen C
Stephen, this is not a matter about wealth or luck. I know you answered with some "good intentions", but made wrong suppositions. As I said, your answer was not bad... if I was a 16 years old boy attempting to rule out the world. It was a matter of point of view after all.
Dave
@Dave - even if you had 20+ years IT and business experience, and $1M+ in capital, I >>still<< think you'd need a lot of luck to make a profit on a general small-business application.
Stephen C
@Stephen, did you realize that at any moment I didn't mention "profit". As I said many times, you are just assuming things, and the problems of assuming underlying causes/motivations are right that: they could be terribly wrong.As I also said many times, I know you probably had some good intentions, and your answer, despite slight aggressive and ironic on some spots, isn't that bad. The major problem was you didn't really answer my question, which was merely technical. You just made some wrong assumptions and went with non-tech advices, which for me were completely useless, unfortunately.
Dave
@Dave - good luck with your quest for technical answers. Unfortunately, I doubt they will help.
Stephen C
+1  A: 

Starting off with java, swing desktop app is normal... I must say though that the components included in the default, i never liked, i thought they were too ugly. https://substance.dev.java.net/ Is a look and feel lib for java. So do your app, think it through though and make sure you have some sort of design in mind. Its easier and often faster if you have an idea of where you're going visually than if you just start coding and hope you reach somewhere you like.

Get paper and pencil out,scribble little notes and drawings of your GUI. You don't necessarily need frameworks and the lot, if your app will need to store data then look at the JDBC driver to connect to mysql, or have a look at embedded databases such as HSQLDB...

robinsonc494
Hi robinsonc494. I am not an artist. Just need some functional stuff, and delegate this responsability to keep consistence with OS native look and feel is kinda follow the safe path.Thx for the tips about the change in the creation/design process flow. About JDBC and embedded HSQLDB I already knew, just not decided yet to make it embedded or wrap a server with the pack.
Dave
cool, and trust me you don't have to be an artist. Just a rough layout to give u an idea of where you wanna get to... take my word for it, if someone considered me to be an artist, i'd be convinced they're blind...
robinsonc494
nice one rob. Will take your words.
Dave