wtorek, 12 sierpnia 2014

Spring-boot - logowanie

Ustalenie poziomu logowania w springu przy użyciu spring-boot jest realizowane poprzez:

logging.level.org.springframework.web: DEBUG logging.level.org.hibernate: ERROR

w pliku src/main/resources/application.properties

Uruchomienie serwera rest apis w spring boot

@RequestMapping - przedrostkowo

@RequestMapping przedrostkowo działa, gdy jest dodany do klasy. @Controller ma parametr określający nazwę bean-a, a nie przedrostek url-a.

Problem z uruchomieniem aplikacji

Przed momentem stoczyłem walkę z uruchomieniem projektu opartego o spring-boot. Teoretycznie prosta sprawa. Zaimportowałem dane do intellij i niestety cały czas otrzymywałem komunikat o brakującej klasie (z pakietu org.springframework.core.env.*). Sprawdzenie zależności, mvn-a, itp. nie pomagało. Ciężko było się do czegoś przyczepić.

W pewnym momencie sprawdziłem co zwraca mvn. Okazało się, że build zakończył się pozytywnie (sic!). Po kilku próbach znaleziona została przyczyna: do intellij zaimportował się jeden z podkatalogów projektu. Jego usunięcie (z projektu) zakończyło kwestię problemu.

niedziela, 3 sierpnia 2014

Liczba nullable - nie działa

Jeśli nie działa pole z @Column(nullable = true) to warto zastanowić się, czy typem jest Integer, a nie przypadkiem int.

piątek, 25 lipca 2014

@Transactional - kiedy działa?

  • metoda z @Transactional musi być publiczna
  • wywołanie metody z @Transactional musi pochodzić 'z zewnątrz' (być zrealizowane na proxy springowym)

W przypadku aspectj te tematy nie mają zastosowania.

piątek, 11 lipca 2014

@Async - dlaczego nie działa?

... bo nie może być wywoływany ręcznie.

Zlecenie jego wykonania musi pochodzić ze springa. Zadziała idealnie np. w kontrolerze.

Widać, że nie do końca: http://spring.io/blog/2010/01/05/task-scheduling-simplifications-in-spring-3-0/. Czyli wystarczy, że obiekt z metodą z @async jest wstrzyknięty.

środa, 2 lipca 2014

Spring, Tomcat, logowanie

Podczas próby logowania może się pojawiać przyjemny komunikat:

log4j:WARN Please initialize the log4j system properly

Próby przenoszenia pliku log4j.properties w różne miejsca nie dają efektu. Potencjalna przyczyna problemu? Błąd w pliku log4j.properties. Przykładowy, poprawny plik:

log4j.rootLogger=debug, stdout, R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout # Pattern to output the caller's file name and line number. #Spring Framework log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n log4j.logger.org.springframework=INFO log4j.logger.org.springframework.oxm=INFO log4j.logger.org.springframework.transaction=WARN

lokalizacja: src/main/resources/log4j.properties

piątek, 27 czerwca 2014

Tiles - problem z uruchomieniem tagów (404 taglib)

Podczas próby użycia kodu:

<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>

url http://tiles.apache.org/tags-tiles okazuje się zwracać 404. Rozwiązanie? Dodanie jar-a do projektu.

poniedziałek, 23 czerwca 2014

Problem z uruchomieniem projektu SpringMVC w intellij

Sprawdź, czy nazwa projektu przypadkiem nie jest ostatnim członem bazowej nazwy pakietu. U mnie to było przyczyną problemów z uruchomieniem aplikacji.

czwartek, 2 grudnia 2010

Wyszukać i zastąpić tekst w wielu plikach

Potrzebowałem zastąpić pewne wyrażenie we odpowiednio wyselekcjonowanych plikach w danym podkatalogu i jego podkatalogach. Rozwiązanie dostarcza cygwin:

grep wyrazenie -R . --include=*.as?x -l | xargs sed -i 's/wyrazenie/nowe_wyrazenie/g'

Jeśli wyrażenie zawiera " to w pierwszej grepowej części należy dodać \, natomiast w sedowej już nie.

getElementsByTagName - dziwne zachowanie

Udało się po 5 godzinach...

Wiecie, że getElementsByTagName tworzy "żywą kolekcję"? W trakcie przyrostu kontrolek na stronie ilość elementów w kolekcji ULEGA zmianie.

piątek, 14 maja 2010

Windows Phone - starcie

A więc spróbowałem. Nowa technologia Microsoftu, nowe nadzieje, nowe obawy. Pierwsze pobranie instalatora i próba uruchomienia zakończyły się komunikatem o nieprawidłowym systemie: Windows XP to za mało.

Zostałem zmuszony do zainstalowania nowej edycji systemu, co na szczęście przy wsparciu MSDNAA nie było zbyt kosztowne. Instalacja również nie nastręczyła problemów. Niestety skonfigurowanie systemu i dopasowanie go do przyzwyczajeń pochłonęło trochę czasu. Co mi tam i tak miałem wkrótce 'zresetować' XP :)

Instalacja środowiska do rozwijania aplikacji Windows Phone zakończyła się również sukcesem, stworzenie nowego projektu przebiegło gładko, zgrzyt nastąpił dopiero w momencie zdeployowania aplikacji na emulator telefonu. Po krótkich poszukiwaniach okazało się, że mam małe szanse na to - problemy z kartą graficzną, brak wsparcia dla odpowiedniej wersji DirectX.

Rozwiązanie?

- zakup karty graficznej - minimalny koszt 150 PLN
- instalacja na innym komputerze,
- instalacja na emulatorze

Opcja pierwsza odpadła bardzo szybko. Na szczęście o trzeciej również dowiedziałem się, że nie działa (albo co najmniej są z tym potężne kłopoty). Została opcja druga. Teraz możecie wrócić do początku postu, bo kroki były te same :)

Ostatecznie projekt udało się zdeployować na telefon, pokazał się ładny ekranik - SUKCES!!!

A gdyby tak ktoś napisał to prędzej.. jasno, wyraźnie, nie musiałbym spędzić kilku godzin na bezproduktywnej pracy.

A więc: potrzebna jest karta graficzna obsługująca DirectX 10. Najlepiej jakaś NVidia (8500, 9300, etc). Ze zintegrowanymi może być spory problem.

wtorek, 29 grudnia 2009

Formatowanie double

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Double value = 14231891.32111;
            Console.WriteLine(String.Format("{0}", value));
            Console.WriteLine(String.Format("{0:00}", value));
            Console.WriteLine(String.Format("{0:n0}", value));
            Console.ReadLine();
        }
    }
}


wynik:

14231891,32111
14231891
14 231 891

poniedziałek, 21 grudnia 2009

Problemy z Accessem w VisualStudio

W przypadku problemów z użyciem bazy danych Access (poprzez OLE DB) w Visual Studio i uzyskiwaniem komunikatu polecam zainstalowanie:

MDAC 2.7 sp1

u mnie to pomogło :)

Property (właściwości) kontrolki - problem z ustaleniem wartości w aspx

Objawy:
- mimo prawidłowego ustawienia wartości dla właściwości nie jest ona widoczna w code-behind,
- wartość zmiennej występuje w kolekcji Attributes danej kontrolki,
- sprawa dotyczy strony (aspx) lub kontrolki (ascx)

to polecam (rozwiązanie):
- zmienić dostępność właściwości w code-behind na public. Protected, internal, private niestety powodują nieprawidłowe działanie.

czwartek, 3 grudnia 2009

DropDownList wewnątrz FormView

W sytuacji, kiedy załadowanie danych do DropDownList w FormView stanowi problem dobrym rozwiązaniem jest podpięcie się pod zdarzenie OnLoad konkretnej kontrolki DropDownList, a następnie tam wypełnienie jej. Np. w następujący sposób:

    protected void PeriodDropDownList_Load(object sender, EventArgs e)
    {
        DropDownList list = (DropDownList)sender;
        list.DataSource = EnumsHelper.IntoDictionary(typeof(Period));
        list.DataTextField = "Value";
        list.DataValueField = "Key";
    }

Jeszcze lepszym rozwiązaniem jest wykorzystanie OnDataBinding - zdarzenie wywoływane przed przypięciem danych. Dla OnLoad podczas zagnieżdżania FormView pojawił się problem z nadpisywaniem danych wybranych przez użytkownika.

poniedziałek, 16 listopada 2009

lxml - python 2.6, windows

Instalacja lxml (w najnowszej wersji) dla python 2.6 jest co najmniej irytująco trudne. Rozwiązanie (częściowe) to skorzystanie nie z wersji 2.2.4 tylko z wersji 2.2. O dziwo, tam instalator dla pythona 2.6 istnieje..

Adres: http://pypi.python.org/pypi/lxml/2.2

poniedziałek, 9 listopada 2009

Christopher Alexander - idea wzorców projektowych

Nie Alexandrescu, tylko Alexander. Christopher Alexander. Andrei Alexandresu to rumuński programista(ekspert) od C++. Zajmuje się wyrafinowanymi technikami w metodach szablonowych (template methods).

ACID - what does it mean?

[za wikipedią]


ACID jest skrótem od angielskich słów:
- atomicity - atomowość,
- consistency - spójność,
- isolation - izolacja,
- durability - trwałość.

czwartek, 5 listopada 2009

IHttpHandler - sesja, null

Czasem pojawia się potrzeba użycia sesji z poziomu własnego IHttpHandler. Próba bezpośredniego dostępu do kontenera poprzez HttpContext często kończy się wyjątkiem/zwróconym nullem - mimo, że kilka sekund wcześniej ustawiona została z poziomu strony aspx zmienna. Dlaczego tak się dzieje?

ASP.NET wymaga oznaczenia handlera korzystającego z sesji w jeden z dwóch sposobów:

- IReadOnlySessionState - kiedy potrzebna jest tylko opcja odczytu danych z sesji,
- IRequiresSessionState - kiedy również zapis się przyda.