Quick thoughts on things
An email about the future technologies PDF Print E-mail
Written by Chintan Rajyaguru   
Friday, 17 November 2006 19:28

I recently received an email through my website about what is the future of certain technologies and how one should move forward especially if he/she has lost touch with some of the new technologies. I thought the email and my response to it might be useful to the community so I am posting them here as they are (without any changes)...

<email>

I was pretty impressed by your thoughts. I think your ideas and presentaion of problems was real good. I found your blog by accident on searching for my destination which direction move about the technologies in J2EE with EJB/Websphere/RAD/WSAD/DB2 and wondering about spring/hibernate/EJB3 how I can adopt them within our infrastructure. Pretty much confused. This maily because I guess I lost touch with new techs, whatz happening there. Recently came across SOA forum meeting and found it was mazing. At the same time felt very in-secured about my self. I am sorry for writng things with no clear picture but this how I am going through today. Hope I would find some light and direction from you and your site in future.

</email> 

<my response>

Thank you for your note. While I will continue to post on my website (unfortunately, it doesn't happen as frequently as I would like) let me respond to your email as well.

First, it's not your fault that you feel insecure or are confused about the direction of your career and the direction of technology market as a whole. Technology keeps changing fast. New frameworks, specifications and tools keep coming out all the time. If for some reason, you don't use them, you feel like being in a whole different world in a pretty short period of time.

This has happened to me. I was on an analysis/architecture project for some time. While that experience was very valuable, when I finished, there were Hibernate, JSF I had absolutely no idea about. Additionally, technology companies intentionally keep churning out new products and programming models frequently to continue to make consulting money. 

Here are some pointers that might help you move forward

1. Try to have a fairly good understanding of tools from at least one vendor. For example, I specialize in IBM offerings: WebSphere, RAD, DB2, Portal, Content management etc. I don't know JBoss and WebLogic as well but that has never been a problem. Knowing just Java/J2EE is not enough. You must know tools. Recently, we lost a developer because he couldn't even successfully import projects in WSAD/RAD. He was good in writing code but we had to spend a lot of time holding his hands, which was quite ineffective for the whole team 

2. Never forget to think of a problem in terms of architecture and design. I always ask my developers to think in terms of business problem --> architecture --> design --> code. This becomes more and more important as you transition from programmer to developer to designer to architect and so on 

3. As far as technologies and framework go, focus more on J2EE than on Spring and Hibernate. There are plenty of applications deployed on J2EE and they are likely to go to Java EE 5 and EJB 3 than to Spring/Hibernate. Why? Because they will be forced to migrate when they migrate to newer versions of the application servers they are using. For example, pretty soon, WebSphere 5.x will not be supported so companies will be forced to upgrade from J2EE 1.3. And it's easy to go from J2EE 1.3 to 1.4 or 5 but not to Spring/Hibernate. Even for new applications, I see Spring/Hibernate being used more in conjunction with J2EE than standalone. It takes a really good architect to create a pure Spring/Hibernate/POJO based enterprise application - very few of them exist and they are not available. Knowing Struts is a must though. It's an old framework; pretty much used everywhere - old and new projects alike. I don't see JSF replacing struts any time soon because of lack of available JSF skills 

4. SOA and web services - definitely the way to go in the future. As you may have seen on my website survey, that is what people think as well! Why are SOA and web services important? They solve the next level of complexity in IT. Remember when HTML was hot and HTML programmers were paid a lot of money? Now, you can create an html page in Microsoft word (creates ugly code though)! Remember when if you knew C language, you were considered smart (and geek)? IT industry wants to solve more complex problems and in the process, it invents the next level. Lower level languages and technologies, while important, don't remain lucrative forever. Java will probably face the same problem (not in the near future though) in the sense that writing Java programs will get easier and easier requiring lower level skills. But, creating SOA/web services based systems will require advanced skills and knowledge of the latest tools and specifications. If you have these skills, you will bring more value to the table.

To summarize,

1. Focus on at least one tool

2. Always know that business problem drives the IT solution 2. Stay with the specifications (J2EE) 3. Don't ignore SOA and web services

Hope this helps...

</my response>

Last Updated on Monday, 20 November 2006 20:07
 
How to set your billing rate: estimating expenses PDF Print E-mail
Written by Chintan Rajyaguru   
Wednesday, 04 October 2006 16:17

Disclaimer: I am not an attorney, tax advisor or small/large business expert. Everything I write here is my personal opinion so take it with a grain of salt. I am not affiliated with any vendor so any product I mention is just for example purposes, I don't recommend any products or services. 

Yesterday, I wrote about how to estimate your utilization when you are planning to become an independent consultant. Today, I am going to give some pointers about estimating your expenses. Once you know your expenses, you can calculate the amount of money you have to make to justify quitting full time job. I used the following formula:

My income as an employee + my expenses as an independent consultant = money I have to make to justify quitting my job

How do you estimate your expenses? Consider the following expenses:

  • Accountant's fee every year
  • Government fees (for example, Illinois has yearly fee to run an LLC)
  • Business supplies - I only considered supplies I would need for business. For example, cost of printing business cards counts but cost of printer cartridge doesn't because I would buy printer cartridge even if I didn't have a business
  • Business insurances - there could be a separate blog entry about insurance but if you own a business, you would at least need general liability insurance, professional liability insurance (some clients require it), worker's compensation (if you are going to have employees) and its variants
  • Personal insurances - health, life, short term and/or long term disability. I did pay for some of these insurances as an employee as well so I only calculated the difference
  • Self employment tax - if you start an LLC, you will be paying so called self employment taxes. It is 15.3% on the first $90,000 you make every year. As an employee, you pay half of it and your employer pays the other half. As a self employed, you pay both the halves
  • Any professional memberships or subscriptions you might need
  • Any other cost you might incur as a result of quitting your job (e.g. forced to buy a second car, move to a more expensive location)
  • Cost of lost benefits such as 401k match, paid vacation and more - this is an expense because now you will have to pay for these out of your own pocket
  • One time expenses or startup expenses: I didn't pay much attention to startup expenses because they incur only once and I didn't want to factor them into my billing rate but here are some startup expenses you might want to consider:
    • LLC articles of organization filing fee
    • Laptop and related accessories such as internet security software, hardware locks etc.
    • Bank account fee
    • Attorney fee if you need advice on what type of company to form
    • Software such as Quick Books to maintain your books

I am intentionally not putting any numbers against any of these expenses. You need to do a lot of research to estimate them. Don't take others' expenses and assume that you will incur the same amount.

Last Updated on Wednesday, 04 October 2006 16:18
 
How to set your billing rate: estimating utilization PDF Print E-mail
Written by Chintan Rajyaguru   
Tuesday, 03 October 2006 07:55

 

Disclaimer: I am not an attorney, tax advisor or small/large business expert. Everything I write here is my personal opinion so take it with a grain of salt. I am not affiliated with any vendor so any product I mention is just for example purposes, I don't recommend any products or services. 

I want to go independent but how much should I charge? Every consultant thought about this or similar question sometime in his or her life - most likely while considering consulting as a career. Some consultants recommend doubling or even tripling your current rate as an employee while others determine billing rate by dividing desired income by number of hours you expect to work. In any case, you have to know the number of hours you expect to work (called utilization) and amount of money you want to (or have to) make.

How to determine number of billable hours per year? You have to use your judgment to answer this question but use the following data points:

  • If you put your resume on monster.com or similar and get a lot of phone calls and emails, it means your skills are in demand and the market is good; you shouldn't have any problems finding projects throughout the year. When I started, I used to get at least 3-5 emails a day and a phone call a day so I knew that there were a lot of jobs out there for me. Be careful though. A lot of 'opportunities' will simply not match your skill set and interest
  • Look at your vacation plans. If you have to take vacation during certain time of the year, you have less flexibility. You will not be working while on vacation and on top of that you may loose time between the projects. Try to use time between the projects as vacation
  • Consider your location. If you are located in a big city, chances are there is a lot of work for you
  • The length of your contract will also impact the number of hours you will work in a year. My first contract was 8 months long so I knew that during the year, I would be between projects only once and I could estimate higher utilization
  • Finally, consider public holidays and emergency situations. Companies have 8-11 holidays in a given year, which means a loss of 64 - 88 hours per year for you. Add to that the hours you would loose due to unforeseen circumstances. Remember, you can't call in sick without loosing money!

When I was considering going independent, I estimated that I would work between 1600 and 1800 hours per year. I adjusted that number to 1800 hours/year when I got my first 8 months long contract and I didn't have any major vacation planned.

Tomorrow, I will talk about estimating the income...

Last Updated on Wednesday, 04 October 2006 16:12
 
Using spring and EJB togetherÂ… and violating EJB 2.x specification PDF Print E-mail
Written by Chintan Rajyaguru   
Thursday, 21 September 2006 17:20
How to use Spring and EJB together

It is well documented that you can use spring framework and EJBs in the same application. Let me quickly outline how this is done:

 

spring-ejb

 

As you can see in the figure above,

  • ALL the business methods are defined in a so called business interface, which is a Plain Old Java Interface (POJI). This interface is extended by both remote and local interfaces of the EJB and hence the bean gets the business methods as EJB methods
  • The bean also implements the business interface and is forced to define implementation of all the business methods. Within the implementation of the business methods, the bean class simply delegates the method call to MyPOJO
  • MyPOJO is a java class, which implements the business interface and provides the implementations of the business methods. This allows for easy testing of business methods by invoking POJO outside the container
  • The bean class maintains an instance variable of type MyBizInterface. The underlying implementation (POJO) of this interface is provided by spring. When a business method is invoked on the bean class, the bean class delegates the method call to the POJO. Like this: 

// AbstractStatelessSessionBean is spring framework provided bean

MyBean extends AbstractStatelessSessionBean implements MyBizInterface{

    // instance variable of type business interface (uses POJO at runtime)

    private MyBizInterface myService;

    // wire ejb bean with POJO on ejbCreate()

    protected void onEJBCreate () throws CreateException{

        // try catch and other code ignored for simplicity

        // getBeanFactory() and getBean() are defined in the super class

        myService = (MyBizInterface)                                                                                                  getBeanFactory().getBean("ServiceNameDefinedInSpringFile");

    }    

    // this method must be implemented because the bean class implements the

   // business interface

    public void bizMethod (){

        // delegate to POJO

        myService.bizMethod();

    }

}

The problems

When you add a business method, you have to add it to both bean class and the POJO. There are two problems with this approach as I see it:

  1. The bean class doesn't really need to implement the business interface. The only purpose implementing the business interface serves is that it forces the bean class to implement the business method. This doesn't accomplish anything because you would have implemented all business methods (and delegated to POJO) in the bean class anyway
  2. According to EJB specification, the business methods defined in the remote interface must throw java.rmi.RemoteException. The specification also states that the business methods defined in the local interface must NOT throw RemoteException. Since we use one business interface to define methods for both local and remote interfaces, we cannot meet both the requirements. Currently (in WebSphere), if you declare methods in the local interface to throw RemoteException, you only get warning but it's still violation of the specification

No problem when using EJB 3.0 specification

Per section 3.3 of simplified EJB specification, "...the methods of the business interface should not throw the java.rmi.RemoteException, even if the interface is a remote business interface..." In this case, the business interface will simply need to define the business methods (without any exceptions) and remote and local interface need to extend the business interface.

 
Don't forget that / in front of WEB-INF PDF Print E-mail
Written by Chintan Rajyaguru   
Wednesday, 13 September 2006 16:12

It's easy to guess that these days I have moving some projects between IDEs (WSAD to RAD to WAS 6.1 toolkit). The issue I have spent most time fixing is this exception…

 

uncaught init() exception thrown by servlet action: javax.servlet.UnavailableException: Parsing error processing resource path WEB-INF/struts-config.xml

at org.apache.struts.action.ActionServlet.handleConfigException(ActionServlet.java:769)

at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:741)

at org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:687)

at org.apache.struts.action.ActionServlet.init(ActionServlet.java:333)

at javax.servlet.GenericServlet.init(GenericServlet.java:256)

<more …>

 

Obviously when you see a parsing error, you would think your struts-config.xml file is either not well formed or not valid. I checked and double checked with various xml tools only to find out that my struts-config was fine. Upon close inspection of my web.xml file, I realized that the file defined struts-config.xml like this

<init-param>

<param-name>config</param-name>

<param-value>WEB-INF/struts-config.xml</param-value>

</init-param>

 

This is incorrect. The location of struts-config.xml should be defined relative to the web application root like this:

<init-param>

<param-name>config</param-name>

<param-value>/WEB-INF/struts-config.xml</param-value>

</init-param>

 

Notice the slash in front of WEB-INF. This tells the parser to look for struts-config.xml relative to the web application root. If you don't put the slash, the parser looks for the file relative to the current location (i.e. relative to the web.xml file in which the entry is defined).

 

Surprisingly, the entry without slash worked fine in WSAD (I don't know why) but when moved to RAD, it gave me the exception. What makes it worse is the exception reporting. Looking at the stack trace there is no way to know what the actual problem is. To an extent all these xml based frameworks suffer from this problem but more on that later.

 
«StartPrev12345678910NextEnd»

Page 8 of 15
 

Calendar

< September 2010 >
Mo Tu We Th Fr Sa Su
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30