Piotr Jasiulewicz

Piotr Jasiulewicz PHP/Java
professional

Temat: Rozpoznawanie srodowiska z poziomu... no wlasnie

Hej,

mam problem z rozpoznawaniem srodowiska w mojej aplikacji.

Potrzebuje srodowisko deweloperskie, testowe i produkcyjne. Srodowiska roznia sie:
- persistance.xml
- wlasciwosciami .properties

Aplikacja bazuje na kontenerze Tomcat6, Spring.

O ile w aplikacji PHP czy RoR to dosc proste tu mam z tym jednak problem.
Czy w Waszych aplikacjach robi to sie zmienna w srodowisku i "ifami" ? Czy jest jakis sprytny sposob zmiany wszystko poprzez sprytny DI wlasciwosci ?

Dzieki,
Piotr
Tomasz Szymański

Tomasz Szymański Lead Java Developer,
Bravura Solutions

Temat: Rozpoznawanie srodowiska z poziomu... no wlasnie

Jedna z opcji to parametryzacja takich plików i przepuszczanie ich na etapie budowania przez mechanizm, który podstawia wartości parametrów - różne dla różnych środowisk.
Jeśli np. użyłbyś do budowania Mavena, to jest to tam nazywane "filtering". Można się wtedy obyć bez żadnych if-ów.

konto usunięte

Temat: Rozpoznawanie srodowiska z poziomu... no wlasnie

Spring od wersji 3.1 ma coś takiego jak Profiles, powinno pomóc

http://blog.springsource.org/2011/02/14/spring-3-1-m1-...Darek Z. edytował(a) ten post dnia 24.09.12 o godzinie 20:47
Jarosław Szczepankiewicz

Jarosław Szczepankiewicz Lead Technical
Consultant

Temat: Rozpoznawanie srodowiska z poziomu... no wlasnie

Osobiście prefereuję po prostu trzymanie oddzielnych plików i przy budowaniu war'a etc. wybieranie z odpowiedniego folderu. Podejścia typu transformacje xslt itp. teoretycznie mogą się sprawdzić ale chyba lekka armata. W aplikacjach z którymi miałem styczność zazwyczaj różnice pojawiały się w konfiguracji loggera, podstawowych ścieżkach (poniżej 10 zmiennych) + persistence.xml i bardziej zaawansowane mechanizmy nie były uzasadnione. Aczkolwiek zawsze samodzielnie należy ocenić dane podejście do projektu.
Piotr Jasiulewicz

Piotr Jasiulewicz PHP/Java
professional

Temat: Rozpoznawanie srodowiska z poziomu... no wlasnie

Hej,

dzieki za odpowiedzi,

nie buduje wara, aplikacje deployuje bezposrednio do kontenera. Profile sa niby spoko, ale jak tym podmienic persistance.xml ? Chcialbym wszytko miec w xmlu, a profile jakby ida w kierunku konfiguracji Java, z tego co zrozumielam. Nie uzywam tez Mavena do aplikacji, nie chodzi o to, ze sie go boje, poprostu nie moge w srodku projektu zajac sie Mavenem, samo sie nie napisze, rozumiecie.

Czy sensownym podejsciem jest wrzucenie 2 persistance unitow, jednego produkcyjnego, jednego developerskiego i wybierania reszty za pomoca pliku z properties (wie ktos jak skorzystac z wyboru innego pliku przez parametry jvma w springu?) w ktorym tez byloby okreslone ktory persistance unit ma uzywac? IMO zalatwialoby oba problemy.
Jarosław Szczepankiewicz

Jarosław Szczepankiewicz Lead Technical
Consultant

Temat: Rozpoznawanie srodowiska z poziomu... no wlasnie

co to znaczy "deployujue bezpośrednio do kontenera"?

konto usunięte

Temat: Rozpoznawanie srodowiska z poziomu... no wlasnie

A profile mavenowe? Zmienna srodowiskowa?
Piotr Jasiulewicz

Piotr Jasiulewicz PHP/Java
professional

Temat: Rozpoznawanie srodowiska z poziomu... no wlasnie

Deploy przeprowadzany jest przez "wkopiowanie" aplikacji do katalogu "webapps" serwera i restart, jest ponoc jakis misterny sposob zrobienia tego bez restarty, ale podobno duzo walki. Projekt nie jest na Mavenie.

Jesli zmienna to jak w Springu? Jak ten pomysl z mojego poprzedniego posta?
Jarosław Szczepankiewicz

Jarosław Szczepankiewicz Lead Technical
Consultant

Temat: Rozpoznawanie srodowiska z poziomu... no wlasnie

"wkopiowanie" aplikacji do webapp? Hmm, czemu takie coś? Takie rzeczy widziałęm tylko przy użyciu embedded container do testowania gdzie jeszcze nie było ustalonej specyfikacji dla takich rozwiązań i każdy dostawca kontenera podchodzi inaczej do tej kwestii. Jeżeli nie daje Ci to żadnej korzyści istotnej (a mówisz że nawet nie obsługuje to hotdeploy) to bym używał oficjalnie wspieranej konfiguracji czyli EAR (nie polecam), WAR (polecam). Mają hot deploy / redeploy bez restartu a restart w zasadzie jest wymagany tylko przez błędy PermGen chociaż z wersji na wersje JDK / konkretnych kontenerów jest z tym coraz lepiej.
Generalnie niezależnie od tego co powyżej to stosowanie podmiany plików przy przekopowaniu plików lub budowaniu archiwum to ciągle ten sam pomysł tak samo skuteczny.
Piotr Jasiulewicz

Piotr Jasiulewicz PHP/Java
professional

Temat: Rozpoznawanie srodowiska z poziomu... no wlasnie

To kontener wbudowany w serwer Red5 wiec niestety nie mam wolnosci w wymienianiu elementow, bo jest najzwyczajniej zbyt skomplikowane. Jest to odpowiedz, ale niestety nie na zadane pytanie ;-) #threadDerail
Jarosław Szczepankiewicz

Jarosław Szczepankiewicz Lead Technical
Consultant

Temat: Rozpoznawanie srodowiska z poziomu... no wlasnie

z tego co pamietam red5 dziala w trybie tomcata lub w trybie wara w kontenerze zewnętrznym. W obydwu trybach jest możliwy hot deploy. Zmodyfikuj na war + spróbuj zastosować:

http://flashvisions.com/red5/deploy-applications-to-re...

wydaje sie to nieskomplikowane,
Piotr Jasiulewicz

Piotr Jasiulewicz PHP/Java
professional

Temat: Rozpoznawanie srodowiska z poziomu... no wlasnie

Hej,

dzieki sprobuje, ale w pytaniu chodzilo o co innego, jak zrobic podzial na srodowiska, persistance.xml i jak to doprowadzic w Springu do dzialania?
Jarosław Szczepankiewicz

Jarosław Szczepankiewicz Lead Technical
Consultant

Temat: Rozpoznawanie srodowiska z poziomu... no wlasnie

dałem odpowiedz jedną z możliwych do zastosowania nieważne czy użyty jest Spring czy inna architektura mającą swoje wady i zalety, nie wiem gdzie tu odejście od pytania,
Piotr Jasiulewicz

Piotr Jasiulewicz PHP/Java
professional

Temat: Rozpoznawanie srodowiska z poziomu... no wlasnie

Zapytalem jak zrobic to w Springu... odpowiedz jak zrobic to inaczej nie do konca mnie urzadza, ale dzieki.
Jarosław Szczepankiewicz

Jarosław Szczepankiewicz Lead Technical
Consultant

Temat: Rozpoznawanie srodowiska z poziomu... no wlasnie

Napisałeś: cytat: "Aplikacja bazuje na kontenerze Tomcat6, Spring." nie ma tutaj słowa o tym że ma wykorzystywać mechanizmy konfiguracji dostarczane przez springa. Dostałeś odpowiedz spełniającą kryteria które napisałeś, umożliwia uruchamianie min. aplikacji bazujących na Tomcat6, Spring.

Jeżeli korzystasz z JPA to lokalizacja pliku persistence.xml jest spisana w specyfikacji JPA i od niej zależy np. zasięg persistence unita i przeszukiwanie classpatha w poszukiwaniu entities i wiec zmiana persistence.xml runtime jest troche sprzeczna z zalożeniami JPA by design.
Piotr Jasiulewicz

Piotr Jasiulewicz PHP/Java
professional

Temat: Rozpoznawanie srodowiska z poziomu... no wlasnie

Jeżeli korzystasz z JPA to lokalizacja pliku persistence.xml jest spisana w specyfikacji JPA i od niej zależy np. zasięg persistence unita i przeszukiwanie classpatha w poszukiwaniu entities i wiec zmiana persistence.xml runtime jest troche sprzeczna z zalożeniami JPA by design.

Chodzilo mi raczej o zadeklarowanie 2 unitow w tym samym pliku w samej aplikacji i wybierania A/B na podstawie czegos. Wciaz potrzebuje konkretnie rozwiazania (kodu) jak to zrobic i czy w ogole jest sens.
Piotr Nowicki

Piotr Nowicki JFB Systems,
właściciel

Temat: Rozpoznawanie srodowiska z poziomu... no wlasnie

Jak nie chcesz Mavena to możesz Ant'a :)
Skrypt ant, profil=dev
w projekcie 2 pliki:
persistence-unit-dev.xml
persistence-unit-prod.xml

w jakimś targecie kopiowanie pliku persistence-unit-{$profileName} ze zmianą nazwy na peristence-unit.xml

jak chcesz prod to zmieniasz nazwę profilu i budujesz
Piotr Jasiulewicz

Piotr Jasiulewicz PHP/Java
professional

Temat: Rozpoznawanie srodowiska z poziomu... no wlasnie

Jasne, to wiem, ale czy ktos mi odpowie na pytanie?

"Chodzilo mi raczej o zadeklarowanie 2 unitow w tym samym pliku w samej aplikacji i wybierania
A/B na podstawie czegos. Wciaz potrzebuje konkretnie rozwiazania (kodu) jak to zrobic i czy w
ogole jest sens."
Tomasz Szymański

Tomasz Szymański Lead Java Developer,
Bravura Solutions

Temat: Rozpoznawanie srodowiska z poziomu... no wlasnie

Ja jeszcze raz zaryzykuję nieodpowiedzenie na Twoje konkretne pytanie :-) Bo nurtuje mnie czym tak naprawdę ma się różnić Wasza warstwa ORM między środowiskami. Nie chodzi tu rozumiem o adres bazy danych, bo od tego jest abstrakcja zwana... datasource.
Mają mieć różny zestaw encji? Wydaje mi się to karkołomne. Różnych persistence providerów? Chyba nie mniej karkołomne. Może żebyśmy się wypowiedzieli czy to ma sens (bo o to również pytałeś), przydałoby się, żebyśmy to wiedzieli.

No ale jeśli już rzeczywiście chcesz tak robić, to może pomógłby Ci SpringEL? Coś w tym rodzaju:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="#{ systemProperties['persistenceUnitName'] }"/>
</bean>
Piotr Jasiulewicz

Piotr Jasiulewicz PHP/Java
professional

Temat: Rozpoznawanie srodowiska z poziomu... no wlasnie

Ha! O to chodzilo ;) Nie persistance unity roznia sie tylko adresem bazy, haslem. Jeszcze powiedz gdzie ustawic persistenceUnitName ?

Następna dyskusja:

Interface XML-RPC z metodam...




Wyślij zaproszenie do