This a about a basic error that did. I got this error saying “class not found” in runtime. Let me explain the situation. I was calling a method from another osgi bundle staying in another osgi bundle. If I go in to more specific level I was working in usage agent component and I needed to call a method (a static method) that was in the rss-manager component.
In rss manager,
public static Queue <DBStatisticsEntry> getStats() { return stats; }
In Usage agent
dbStats = DBSizeChecker.getStats();
For a Java user it don't have any
errors. But remember that this did give the error, “class not
found” so before getting to know that method, it even don't know
the class. And IDE don't give any errors, means that it is not a
syntax error. And it don't give any warnings, no best practice
violations.
My guesses of what has went wrong..
- rss-manager jar inside the server do not have the DBSizeChecker class in it. As this class was added lately by me, I thought for a second what it the jar inside the server is not the current one that I am using? But opening the jar showed that class is there.
- Is this the right way to use static methods? I was confident that it was the way, but as I didn't have clue on what went wrong, I even did a search on “how to call a static method from another class in java”
- rss manager might not have started, I checked it using osgi console and it was active and running.
And what was the real problem.
DBSizeChecker class was in the
'internal' folder in the OSGI bundle. If you don't know what that is,
in OSGI we do not expose internal classes to the outside. Thats is
why we didn't get a error from IDE but from runtime. In runtime OSGI
comes in to action. This is basics in OSGI, but those matters.
This problem showed me how important is
it to have someone to help when you get errors. This error is due to
something simple but still I didn't get it, but when I showed it to a
senior (kasun) he nailed the error in a minute.
No comments:
Post a Comment