- 
        Список говнокодов пользователя konsoletyperВсего: 15 
- 
        
        
                +76         
                            - 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
 /* ------------------------------------------------------------ */
    private boolean isJspServlet ()
    {
        if (_servlet == null)
            return false;
        
        Class c = _servlet.getClass();
        
        boolean result = false;
        while (c != null && !result)
        {
            result = isJspServlet(c.getName());
            c = c.getSuperclass();
        }
        
        return result;
    }
    
    
    /* ------------------------------------------------------------ */
    private boolean isJspServlet (String classname)
    {
        if (classname == null)
            return false;
        return ("org.apache.jasper.servlet.JspServlet".equals(classname));
    }
 
 
            Копался в исходниках Jetty
         
             konsoletyper,
            26 Июля 2012 konsoletyper,
            26 Июля 2012
 
- 
        
        
                +70         
                            - 1
- 2
- 3
- 4
- 5
- 6
- 7
 if (s.startsWith("job."))
{
    s = s.trim().replaceFirst("job\\.", "");
    String name = s.split("\\.")[0];
    String paramName = s.split("\\.")[1];
    // Ещё немного говнокода, не сильно интересного
}
 
 
            
         
             konsoletyper,
            12 Июля 2012 konsoletyper,
            12 Июля 2012
 
- 
        
        
                +68         
                            - 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
 public abstract class AbstractJob implements Job
{
    private static ConcurrentHashMap<String, Boolean> mutexes = new ConcurrentHashMap<String, Boolean>();
    public abstract void job(JobExecutionContext jec, Logger logger) throws JobExecutionException;
    public void execute(JobExecutionContext jec) throws JobExecutionException
    {
        Logger logger = LoggerLocator.getLogger(this.getClass().getSimpleName());
        if (mutexes.containsKey(this.getClass().getSimpleName()))
        {
            logger.info("Job "+jec.getJobDetail().getName()+" already running");            
        }
        else
        {
            try
            {
                mutexes.put(this.getClass().getSimpleName(), true);
                job(jec, logger);
            }
            finally
            {
                mutexes.remove(this.getClass().getSimpleName());
            }
        }
    }
}
 
 
            Race condition и передача логгера в параметрах очень порадовали. А ведь вместо написания кривого велосипеда можно было просто @DisallowConcurrentExecution
         
             konsoletyper,
            12 Июля 2012 konsoletyper,
            12 Июля 2012
 
- 
        
        
                +83         
                            - 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
 private String toHTML(String unicode)
    {
        String output = "";
        char[] charArray = unicode.toCharArray();
        for (int i = 0; i < charArray.length; ++i)
        {                        
            if ((int)charArray[i]>255)
            {
                String s = ""+Integer.toHexString(charArray[i]);
                switch (s.length())
                {
                    case 1: s="\\u000"+s; break;
                    case 2: s="\\u00"+s; break;
                    case 3: s="\\u0"+s; break;
                    case 4: s="\\u"+s; break;
                    default: throw new RuntimeException( s +" is tool long to be a Character");
                }
                output += s;
            }
            else
            {
                output += charArray[i];
            }
            
        }
        return output;
    }
 
 
            Эпичнейший говнокод! На серваке top показывает нагрузку 10-12. 3000 пользователей, 100 нод, интеграция с SAP, который пачками проводит документы и выдаёт цены, отчёты по остаткам и т.п. И всё это, как оказалось, капля в море по сравнению с 5 человеками техподдержки, которые сидят в аяксовой консоле мониторинга, для которой HTTP-ответ экранируется данным шедевром. Без этого шедевра нагрузка держится в районе 2-3 даже при достаточно большой активности.
         
             konsoletyper,
            26 Июня 2012 konsoletyper,
            26 Июня 2012
 
- 
        
        
                +75         
                            - 1
- 2
- 3
- 4
- 5
- 6
 byte[] buf = new byte[8192];
int len = 0;
while ((len = is.read(buf))>0)
{
    requestString += new String(buf, 0, len, "UTF-8");
}
 
 
            Пока никто не кормил туда настоящий UTF-8. Только ascii.
         
             konsoletyper,
            28 Мая 2012 konsoletyper,
            28 Мая 2012
 
- 
        
        
                +155         
                            - 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
 if (
        (_methodName == "invoke") ||
        (_methodName == "auth") ||
        (_methodName == "resetAuth") ||
        (_methodName == "registerMethod") ||
        (_methodName == "registerAllMethods")
       )
    {
       throw "Illegal method name " +_methodName +" - service method with this name already exist";
    }
    else
    {
        eval("ComponentClient.prototype."+_methodName+" = function (_parameters) {return this.invoke(\""+_methodName+"\", _parameters)}")
    }
 
 
            И там много ещё такого
         
             konsoletyper,
            30 Марта 2012 konsoletyper,
            30 Марта 2012
 
- 
        
        
                +71         
                            - 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
 try
                {
                    //PI'я капец??
                    realStream.close();
                }
                catch (Throwable t)
                {
                    throw new IOException(t);
                }
 
 
            Примечание: realStream - это обычный java.io.OutputStream
         
             konsoletyper,
            26 Марта 2012 konsoletyper,
            26 Марта 2012
 
- 
        
        
                +76         
                            - 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
 if (s.contains("-"))
                {
                    String[] sa = s.split("-", 2);
                    for (Long i = Long.parseLong(sa[0].trim()); i<=Long.parseLong(sa[1].trim()); i++)
                    {
                        departmentsQueue.add(i);
                    }
                }
                else
                {
                    Long id = Long.parseLong(s.trim());
                    departmentsQueue.add(id);
                }
 
 
            Отличный цикл! Кстати, я бы тут ещё и s.contains() убрал
         
             konsoletyper,
            25 Августа 2011 konsoletyper,
            25 Августа 2011
 
- 
        
        
                −857         
                            - 1
 CREATE DOMAIN D_TRIBOOL AS SMALLINT DEFAULT 0 NOT NULL CHECK (VALUE IN (-1,0,1));
 
 
            Возможно, вопрос о говнокодистости этой строчки является холиварным. Но меня приведённый отрывок по крайней мере немало удивил.
         
             konsoletyper,
            17 Августа 2011 konsoletyper,
            17 Августа 2011
 
- 
        
        
                +78         
                            - 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
 public class LoadManager
{
    public static Integer DEFAULT_MAX_LOAD_COUNTER = 2;
    private ConcurrentHashMap<Class, Integer> loadCounters = new ConcurrentHashMap<Class, Integer>();
    public void incLoadCounter(Class clazz)
    {
        synchronized (loadCounters)
        {
            if (!loadCounters.containsKey(clazz))
            {
                loadCounters.put(clazz, 0);
            }
            if (loadCounters.get(clazz) <= DEFAULT_MAX_LOAD_COUNTER)
            {
                loadCounters.put(clazz, loadCounters.get(clazz) + 1);
            }
        }
    }
    public void testLoadCounterAndWait(Class clazz)
    {
        synchronized (loadCounters)
        {
            if (!loadCounters.containsKey(clazz))
            {
                loadCounters.put(clazz, 0);
            }
        }
        
        try
        {
            while (loadCounters.get(clazz) > DEFAULT_MAX_LOAD_COUNTER)
            {                
                Thread.sleep(3000L + (long)Math.floor(5000 * Math.random()));
            }
        }
        catch (InterruptedException e) {}        
    }
    public void decLoadCounter(Class clazz)
    {
        synchronized (loadCounters)
        {
            if (!loadCounters.containsKey(clazz))
            {
                loadCounters.put(clazz, 0);
            }
            if (loadCounters.get(clazz) > 0)
            {
                loadCounters.put(clazz, loadCounters.get(clazz) - 1);
            }
        }
    }
}
 
 
            Наверное, нужно было вот это: http://download.oracle.com/javase/1,5.0/docs/api/java/util/concurrent/Semaphore.html
 Ну и ещё порадовал способ постановки потоков в "очередь".
 
             konsoletyper,
            17 Августа 2011 konsoletyper,
            17 Августа 2011