Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
Evented web apps are an hot topics these days, but it appears there is not a unique solution for that. Especially for the back-end side, independently from the programming language.
I open this topics to discuss about the various solutions offered to the community.
I tried Atmosphere, but the experience was a bit frustrating.
I spend a lot of time playing with this framework and I ended up that it was not completely developer-friendly. First of all is a maven-based project: in addition to the documentation a developer has to learn (or at least to know) how maven works and what's a pom.xml is.
Concepts looks easy, but it's plenty of java annotations, that in my opinion tends the make things too complex. The strength of this framework is that is able to decide and use the protocols supported by the client.
From what I have read node.js appears to be the more developer-friendly.
What do you think about these technologies?
I am the project leader of CometD, which is a web messaging framework that is transport agnostic (websocket with fallback to http) and ships a lot of features like message acknowledgement and clustering and many others.
CometD is also based on Maven, but its artifacts can be consumed with any other build system you already have (Ant, Ivy, Gradle, etc.).
CometD concepts are pretty simple, and you can write services that are either annotated or use inheritance.
CometD scalability is awesome: a single server in our load testing was able to handle 200k websocket clients, and other people reached even more (https://twitter.com/myBuzzNight/status/388024046027161600).
The CometD learning curve is quite low, from the reports I have.
One guy setup e-chat.co in few days.
You can setup a skeleton CometD project with a one liner or even use a pre-made skeleton project used by the CometD tutorials.
JavaScript being the language it is, you'll probably find that if your project grows beyond a certain size you want to stay with a statically typed language like Java for its refactorings, tools, IDEs, etc., not to mention the tools that are available for the JVM for monitoring/management, etc.
The scalability of the JVM in multithreaded scenarios like server-side event-driven applications is well known.
Like other solutions, CometD is backed by a company in case you need professional support.
I highly recommend node.js.
It's coded in javascript, and I personally really like being able to stick to web languages.
Also, you can use socket.io, which implements websockets using node.js.
Related
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 6 years ago.
Improve this question
I'd like to designing new web application with few requirements and considering which language/framework I should choose.
Requirements:
Web based solution (web UI and backed)
Fast deployment and setup <- by this I mean just run by single command,
no configuration needed for total beginner. Similar to
Jenkins
java -jar jenkins.war
or Gerrit.
Some kind of que to run tasks asynchronously.
No code protection
Due to the fact that I want to be simple to run and deploy (without initial configuration needed) I am considering using Java EE/Spring framework.
Initially I was considering Django or RoR since deploy is pretty easy and development is way faster than Java but those
frameworks need some kind of scheduling framework like Celery + some kind of broker so additional configuration is needed.
I am not limited to any language,(besides PHP since I just do not like it :P)
If any of you have any thoughts about my design and want to share let's do it.
Thanks a lot for any kind of question/ answers.
It is a very open question and there is really no right answer for it. Rails is really great framework for web development, there are gems basically for everything but deployment is not as straightforward as java -jar and also it does not shine that much when you have SPA on the frontend.
If you're planning to build Single Page Application with one of the modern frameworks you may want to consider Spring Boot. Main benefits:
very ops friendly (java -jar), metrics, health checks
whole application config just in one file
great MVC framework for exposing REST endpoints
implementing tasks running in background is trivial.
few programming languages to choose from: Java, Groovy, Kotlin.
Grails 3 looks also promising but since I haven't used it yet I can only suggest having a look.
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 8 years ago.
Improve this question
While looking for the job, i have attended some job interviews at companies, that work at financial sphere. Every company uses Spring Framework as main framework for development. And almost everywhere I was told 'We need proved and stable technologies, that is why we use Spring.'
I would like to know, as I can't understand, why Spring is more popular and 'safer', than Java EE (for example, Spring MVC is used more, than JSF, while both provide almost the same functionality)?
How it is possible, that native Java EE functionalities are less stable, than third-libraries?
Some reasons:
Spring was already there: J2EE was ugly (no Dependency Injection, no conversion over configuration and lot of scares from EJB2, ouch). Java EE "stole" all good ideas from Spring, and it is in fact lighter and easier than previous versions. But now, everybody already uses Spring. It means a lot of production code, lot of well tested products and so on. In the end, why do people in UK/USA use English units? (There is a huge cost to change)
Spring is lighter: You do not need a heavy Java EE application server, you can deploy your application in a web container such as Tomcat.
Spring offers a ton of features which are not available as Java EE standards, such as Spring Batch or Spring Integration. You can use Spring features with Java EE standards, but it should be supposed Spring works better with Spring, shouldn't it?
Spring Aspect-oriented programming is more flexible and power that Java EE interceptors. You can use third-party AOP with Java EE but you can have this out-of-the-box from Spring.
Spring moves faster. Spring can release often and faster because it is no standard and only one vendor. So, it is not required JCP ballots, approvals, etc. The reaction to market requirements is much faster. Some current examples: cloud, mobile, social computing.
Ironically, I have "got" a lot ideas from:
http://www.kai-waehner.de/blog/2011/11/21/why-i-will-use-java-ee-jee-and-not-j2ee-instead-of-spring-in-new-enterprise-java-projects-in-2012/
While looking for the job, I have attended some job interviews at
companies, that work at financial sphere. Every company uses Spring
Framework as main framework for development. And almost everywhere I
was told 'We need proved and stable technologies, that is why we use
Spring.'
I work in financial domain since several years - so I can speak from my experience.
Many financial service providers I know had a major upgrade to their enterprise software stack at around 2006-2008, at a time when the disillusion about EJBs were at its peak after several unmaintainable and poorly written EJB projects. So in-order to upgrade their system and also to attract developers, they began to re-implement their stuffs in Spring and Hibernate, also it was a logical step for them to start new projects in the state of the art frameworks (which at that time were Spring, Hibernate and Wicket)
But since then financial crisis broke out and not many financial service companies think of investing that much money in new development unless it is very critical. Most do not care whether Java EE 6 or 7 was launched and some of the old arguments do not hold good anymore or so.
So they would like to believe that what they have is safer, faster etc (which may or may not be true)
One thing that makes Spring attractive to developers, especially at big organizations like financial companies, is that it lets them take more control over their middleware. With pure Java EE, developers are at the mercy of an operations group that has very different goals than they have. In many cases operations wants to avoid messing with anything that works, every upgrade is a chance for things to go wrong, and it's not like they're the ones who see the benefits from upgrades, so that makes their choices very conservative. That can mean developers get stuck with obsolete versions of an application server, and if a problem comes up the developers have to work with the vendor's technical support (so you have to convince the vendor you have a problem and reproduce it under the conditions they specify), then coordinate with operations to implement the fix (which of course means justifying your request to an organization with different priorities from you). Developers like to minimize this kind of thing whenever possible.
Having Spring in the application gives the developers more freedom to update more of their infrastructure on their own schedule.
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
We are developing an application integrator which sends requests to various webservices simultaneously, aggregate data return by each webservice and format it to display on UI. Each webservice may have proprietary xml format. Also we don't wont to compromise user experience.
We identified ESB(Servicemix/Mule) and Async Http Client for this requirement.
Can anyone suggest which would be better option? Async Http Client seems good fit as it is lightweight over servicemix.
Thanks,
Amit Patel
you can also just use Apache Camel for this...
It supports a wide range of components and messaging patterns, is lightweight and has a flexible deployment model (standalone, spring, maven, webapp, OSGi, etc).
You have answered your own. Yes ESB is good option. You can use Mule.
Second option is Asynchronous messaging but it will be complicated, because You have to orchestrate the services properly.
eh, we did a productivity test on coding pure java vs. ESB (mule and spring integration). We had 3 developers do the same thing in all 3 versions (mule, SI, and just pure java with no ESB). They finsihed 6 times faster when not using an ESB and we gave alot of things in the problem that would leverage the ESB, but in the end it did not help....all the xml coding and confusion of the api usages led to really unproductive development teams. Not only that, it is hard to find ESB developers on the market as well.
NOTE: We even took an advanced spring integration guy that had been doing it and he also was faster in pure java to complete the code. He loved spring integration and after taking my test, he changed his mind.
ie. be warned of the huge productivity loss that using the wrong framework can cause. 6 times is a huge penalty. I mean 1 month vs. 6 months is a big difference.
A 6 times productivity loss is worth taking one week out and doing your own developer productivity test. Some argued with me that they didn't know the framework yet which is why we got an advanced spring integration guy to take the test.
Also, make sure your test takes at least an hour or so....just develop some fake but realistic requirements from the application that you are going to write anyways so you make progress on your application while running the study. I would be interested to see more results posted as well.
As per your requirement, I would suggest you to go with WSO2 ESB. Its and 100% free and open source ESB (Apache License 2) and unlike other ESBs, with wso2 you don't have the commercial and community versions. So, what you download for free from WSO2, comprises of all the features that are available in 'commercial versions' of other ESB vendors. Also, WSO2 offers not just an ESB but a complete SOA Platform for your SOA needs.
For the requirement you mentioned above, there is a simple sample that you can try out.
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 2 years ago.
Improve this question
As I plan to switch my career to a 100% web services development company(using open source Java technologies), I need to build a thorough knowledge in the foundation concepts and then related technologies. But I'm pretty confused by the thousands of jargon and technologies. What study/development plan would you suggest for a novice? A list of up-to-date books,articles,tutorials would be greatly appreciated.
Assuming you want "Java web services" (question is tagged with java) and assuming you already know Java and understand basic OO concepts like inheritance/polymorphism and the need for abstract classes/interfaces, start with a book preferably this.
There are many code examples. Once you have worked the basics out, check out security, performance, RESTful web services (don't get nervous about terminologies, they are mostly fancy terms for most "common-sense" stuff). Keep in mind, if you had "common sense" most of these should make sense (once you wiki or google them up).
Finally if you are someone like me who only reads if she has to clear an exam then take up the Sun certification for Web services. I know many experts scoff at this idea saying "it is not useful", I think if you are a beginner and if you clear this you will atleast know that have done something. (This is not to be confused with "Certification makes a better programmer" which can be debatable)
You will have a lot of learning to do. First of all, if you want to do ANYTHING in the Java world, you need to master Java and the standard runtime library.
A good resource for learning this is the Java Tutorial. http://java.sun.com/docs/books/tutorial/getStarted/index.html
Take particular notice of anything related to sockets, as these are essential to web services.
Then you can start considering how to do servlets, web applications and web applications providing web services.
Learn programming in machine code
Learn programming in assembler
Same in non-structured language like Fortran
Same in structured language like C, Pascal
Same in Object Oriented language like C++, Java, Delphi
At this spot one might not need this plan anymore because webservices may become obsolete, but if to continue, goto step 7
Learn abstract classes
Learn pure abstract classes
Learn interfaces
Now it is possible to start understanding cross-language interactions like JNI, COM
Briefly learn networks, client/server, RPC, protocols, remoting
Learn in depth one of remoting technologies like Corba, DCOM or XML over TCP
Learn in depth http, XML, XSD, WSDL
Implement simple client of Web Server
Having overall combined knowledge one can consider self able to see some value in WebServices
Implement few SOAP clients, consuming existing web services. Become comfortable being a WS user
Start learning service side of WebServices starting with unsecured WebService
Learn compliance verification tools
Learn WebServices
Done
I am not sure if you are an IT guy or not. I assume you are.
Here are my tips to start-off learning web services:
- learn HTML, XML
- learn OOP language like Java (core Java should be fine)
- learn SOAP
- learn/install tomcat, AXIS2
If you are pretty new to IT field, i would recommend you to reconsider your decision to learn web services, since it will take at least an year for you to be there. Take baby steps and try to learn OOP language first. Then decide what to do next. All the best!!
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 5 years ago.
Improve this question
At my current job I've been working on making web apps with Java, Tapestry, Hibernate, MSSQL, and Tomcat.
I've got an idea for a little web game I'd like to write. I'd like to know what the SO community would use for something like this.
Should I stick to what I know? I was thinking it would be very beneficial for me to learn different languages and frameworks. Any suggestions?
If its a personal project then take this as an opportunity to learn something new.
Spring Framework using Spring MVC 3.0
I recommend learning something new because even if your idea is a failure, at least you learned some new technology out of it.
I can suggest Grails as it is a modern and easy to use RAD Web-Framework, has a small learning curve and is proven to be scaleable.
It builds upon Spring MVC, Hibernate and other sophisticated frameworks and merges them with the dynamic nature of Groovy (dynamic language for the JVM) into a full-stack webframework. It follows modern principles like CoC (Convention over Configuration) and DRY (Don't repeat yourself). You can deploy the applications straightforward as .war file in tomcat or any other servlet container or applications server.
My recommendation would be to see what you could do with a combination of Google App Engine, Django, and JavaFX.
In doing so, you'd learn some new technologies (App Engine) and languages (Python for Django, JavaFX) while taking advantage of what you already know about web apps and Java.
I'd pick Haxe.
Haxe (pronounced as hex) is an open source programming language
While most other languages are bound to their own platform (Java to the JVM, C# to .Net, ActionScript to the Flash Player), Haxe is a multiplatform language.
It means that you can use Haxe to target the following platforms : Javascript, Flash, NekoVM, PHP, C++, C# and Java
If your thinking about an online game like a RPG or card game I might be selfish and suggest you have a look at Project Darkstar and let us know how you got on. I've been trying to get started with it and cannot get it up running in my environment.
PHP and MySQL is an easy place to start for web apps. Your ISP will support it and there are tons of tutorials on the web.
Once you have got the hang of it, take a look at MVC architecture. It's a way of structuring web apps.
Personally I'd then recommend looking at CodeIgniter.
However a game is a different matter, maybe try Flash?
If you want to improve your skills push what you already know. If you want to learn new languages and ways of doing things, then look at alternative technologies and stacks.
It all depends on what your goals are...