Beste allemaal,
Ik ben bezig met een project waarbij ik een Oracle Database gebruik.
De verbinding hierheen wordt geinitialiseerd in de klasse Database
De initialize methode zoals hierboven wordt enkel aangeroepen bij het inloggen in de applicatie of het aanmaken van een proef account (dus bij eerste gebruik van de applicatie waar een database connectie voor nodig is).
Om te voorkomen dat de database verbinding twee keer geinitialiseerd wordt heb ik bij het initialiseren een check gedaan of de datasource (ods) nog null is.
Echter als ik findbug run krijg ik dit terug:
Op het moment dat ik de if(ods == null) weghaal verdwijnt deze bugmelding, maar volgens mij gaat hij dan juist bij elke aanroep van initialize een nieuwe datasource aanmaken met dezelfde gegevens, wat dus overbodig is.
De foutmelding kan ik echter niet zo heel veel wijs uit
Mijn vraag is dan ook, is dit echt een bug en moet ik het aanpassen of is dit geen echte bug en kan ik het het beste zo laten staan?
Bedankt alvast voor jullie reacties!
Ik ben bezig met een project waarbij ik een Oracle Database gebruik.
De verbinding hierheen wordt geinitialiseerd in de klasse Database
code:
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
| [...] /** The data source. */ private static OracleDataSource ods = null; /** * Initialize. * * @param dbUrl the database url * @param dbUser the database user * @param dbPassword the database password */ @SuppressWarnings("deprecation") public static void initialize(String dbUrl, String dbUser, String dbPassword) { try { if (ods == null) { DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); ods = new OracleDataSource(); ods.setURL(dbUrl); ods.setUser(dbUser); ods.setPassword(dbPassword); ods.setConnectionCachingEnabled(true); } } catch (SQLException ex) { throw new DAOException("Init Database Connections" + ex.getMessage()); } } [..] |
De initialize methode zoals hierboven wordt enkel aangeroepen bij het inloggen in de applicatie of het aanmaken van een proef account (dus bij eerste gebruik van de applicatie waar een database connectie voor nodig is).
Om te voorkomen dat de database verbinding twee keer geinitialiseerd wordt heb ik bij het initialiseren een check gedaan of de datasource (ods) nog null is.
Echter als ik findbug run krijg ik dit terug:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| Bug: Incorrect lazy initialization and update of static field api.common.Database.ods Pattern id: LI_LAZY_INIT_UPDATE_STATIC, type: LI, category: MT_CORRECTNESS This method contains an unsynchronized lazy initialization of a static field. After the field is set, the object stored into that location is further updated or accessed. The setting of the field is visible to other threads as soon as it is set. If the futher accesses in the method that set the field serve to initialize the object, then you have a very serious multithreading bug, unless something else prevents any other thread from accessing the stored object until it is fully initialized. Even if you feel confident that the method is never called by multiple threads, it might be better to not set the static field until the value you are setting it to is fully populated/initialized. |
Op het moment dat ik de if(ods == null) weghaal verdwijnt deze bugmelding, maar volgens mij gaat hij dan juist bij elke aanroep van initialize een nieuwe datasource aanmaken met dezelfde gegevens, wat dus overbodig is.
De foutmelding kan ik echter niet zo heel veel wijs uit
Bedankt alvast voor jullie reacties!