hallo zusammen,
folgender code liegt mir vor:
dieser code wird von einem servlet (also im multithreaded-kontext) verwendet...
nun habe ich über nach einen stresstest durchgeführt, und mir ist aufgefallen dass es manchmal crasht in der funktion addUnknownLanguage(...), die member-map "unknownLanguages" scheint eine NullPointerException zu verursachen...
könnte das helfen?:
...also die map ich im konstruktor zuweisen, sondern direkt als member im klassenrumpf instazieren. und anschliessend im konstruktor unknownLanguages.putAll(...), anstatt der oberen, auskommentierten zeile?
grüsse,
jan
folgender code liegt mir vor:
Java:
public class UnknownLanguageCookieManager
{
private static final File file = new File(FileIO.TEMP_DIR, "unknownLanguages.xml");
private static final Logger mLogger = StaticLogger.getInstance();
private final Map<String, Integer> unknownLanguages;
private final boolean doLog;
public UnknownLanguageCookieManager(final Map<String, Integer> unknownLanguages, boolean doLog)
{
this.unknownLanguages = unknownLanguages;
this.doLog = doLog;
}
public void addUnknownLanguage(final String countryCode)
{
// synchronized(unknownLanguages)
// {
int value = 1;
if (this.unknownLanguages.containsKey(countryCode))
{
value = this.unknownLanguages.get(countryCode).intValue();
value++;
}
this.unknownLanguages.put(countryCode, Integer.valueOf(value));
// }
}
.....
dieser code wird von einem servlet (also im multithreaded-kontext) verwendet...
nun habe ich über nach einen stresstest durchgeführt, und mir ist aufgefallen dass es manchmal crasht in der funktion addUnknownLanguage(...), die member-map "unknownLanguages" scheint eine NullPointerException zu verursachen...
könnte das helfen?:
Java:
public class UnknownLanguageCookieManager
{
private static final File file = new File(FileIO.TEMP_DIR, "unknownLanguages.xml");
private static final Logger mLogger = StaticLogger.getInstance();
// volatile or not???
private volatile Map<String, Integer> unknownLanguages = new ConcurrentHashMap();
private final boolean doLog;
public UnknownLanguageCookieManager(final Map<String, Integer> unknownLanguages, boolean doLog)
{
// this.unknownLanguages = unknownLanguages;
this.unknownLanguages.putAll(unknownLanguages);
this.doLog = doLog;
}
public void addUnknownLanguage(final String countryCode)
{
// synchronized(unknownLanguages)
// {
int value = 1;
if (this.unknownLanguages.containsKey(countryCode))
{
value = this.unknownLanguages.get(countryCode).intValue();
value++;
}
this.unknownLanguages.put(countryCode, Integer.valueOf(value));
// }
}
.....
...also die map ich im konstruktor zuweisen, sondern direkt als member im klassenrumpf instazieren. und anschliessend im konstruktor unknownLanguages.putAll(...), anstatt der oberen, auskommentierten zeile?
grüsse,
jan