Dodawanie klasy do biblioteki

Dodawanie klasy do biblioteki
JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0

Witam,
chciałbym się zapytać czy jest szansa dodać swoja klase do jakiejś biblioteki.
Np. mam .jar z biblioteka Eclipselinka i chciałbym tam wrzucić jakąś moją klase.
Jest taka możliwość ?

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Ale tak u siebie lokalnie? Możesz ja po prostu na jana wrzucic do jara, bo jar to jest zwykły zip ;] Ale nie bardzo pojmuje jaki to by miało sens praktyczny.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0

Potrzebne mi to ponieważ potrzebuje jedna klase załadowac przed wszystkim a zewnętrzne biblioteki tak włąsnie mi się ładuja.

Mam teraz taki problem w bibliotece eclipselinka mam klase PersistenceProvider.class i chce do tej biblioteki dorzucić nowa klase NewpersistenceProvider wiec zbudowałem nowy projekt i stworzyłem w nim klase:

Kopiuj

package org.eclipse.persistence.jpa;

public class NewPersistenceProvider extends org.eclipse.persistence.jpa.PersistenceProvider {

}

i plik NewPersistenceProvider.class wrzucilem do jara eclipslinka niestety jak teraz probuje to odpalić to wyskakuje mi taki bład:
Caused By: java.lang.Error: Unresolved compilation problem:
org.eclipse.persistence.jpa.PersistenceProvider cannot be resolved to a type

Co robie zle ?

W0
  • Rejestracja:ponad 12 lat
  • Ostatnio:około godziny
  • Postów:3556
0

Brakuje zależności do EclipseLink. Generalnie to masz złe podejście.

  1. Stwórz nowy, maven'owy projekt.
  2. W nim dodaj zależność od EclipseLinka, scope "provided".
  3. Stwórz swoją klasę, zbuduj, wrzuć do lokalnego repo za pomocą maven install.
  4. W drugim, mavenowym projekcie dorzuć zależność do poprzedniego projektu.

Maven powstał dokładnie po to, żeby rozwiązywać problemy takie jak te.

edytowany 1x, ostatnio: wartek01
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

@janiu ja nadal nie bardzo rozumiem co ty chcesz osiągnąć, ale to co próbujesz zrobić jest skazane na porażkę. Czemu chcesz żeby klasa ładowała się wcześniej niz inne? To jest bardzo zły pomysł polegać na kolejności classloadera, szczególnie że można ją sobie zmienić... Zresztą program powinien być tak napisany żeby nie musiał polegać na takich rzeczach jak wpływ zorzy polarnej i promieniowanie kosmiczne...

Napisz jaki jest "wyjściowy problem", bo na pewno da sie go rozwiazać bardzo łatwo.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0

chciałbym przeładować klase PersistenceProvider.xml z biblioteki eclipselinka i nadpisuje ta klase, do persistence.xml dodaje linijke:

Kopiuj
<provider>org.persistence.jpa.NewPersistenceProvider</provider>

ale wyskakuja błedy i dlatego wyczytałem ze tak może się dziac dlatego ze ta klasa ładuje sie za pozno a biblioteki zewnętrzne ładują się wczesniej.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Nie wiem gdzie to wyczytałeś, ale nie korzystaj już z tego źródła ;] A teraz pokaż JAKIE błędy ci się pojawiają.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0
Kopiuj

This version of OpenJPA cannot read a persistence.xml document with a version different from "1.0". Found: version "2.0" in "zip:D:/work/domains/clmdemo_domain/servers/wls2/tmp/_WL_user/abc-server-ear/bd0nwg/lib/abc-server-weblogic.jar!/META-INF/persistence.xml".

2015-09-29 13:41:26,252|FATAL|common.ServerStartUpBean|start|Application startup failed due to javax.persistence.PersistenceException: No Persistence provider for EntityManager named pu-non-jta|Exception:
javax.persistence.PersistenceException: No Persistence provider for EntityManager named pu-non-jta


Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

I serio myślisz że te cuda na kiju które robisz pomogą? o_O Przecież masz napisane w czym problem. Używasz starej wersji biblioteki OpenJPA która jest niekompatybilna z JPA 2.0, a twoje pliki konfiguracyjne korzystają z JPA 2.0
Użyj nowej wersji OpenJPA / Zmień providera a nie cuduj.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0

no tylko że jeżeli nie nadpisze tej klasy to wszystko działa poprawnie

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Oznacza to że próbujesz zrobić coś czego nie rozumiesz. Probujesz napisać Persistence Providera podczas gdy ewidentnie nie masz o tym pojęcia. Domyślam się, że samo extendowanie tej klasy "na pałe" nie wystarczy ;] Możesz wyjaśnić po co chcesz zrobić własną klasę która z niej dziedziczy? Bo myśle że to już jest błąd i dziwny sposób na rozwiązanie prostego problemu.
Zacznij od początku, od problemu który masz. Nie od tego jak próbujesz go rozwiązać.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0

Mam klasę A która ma adnotacje @Entity i muszę zrobić tak że w momencie kiedy ktoś doda klasę B extends A z adnotacja @Entity wtedy adnotacja klasy A zmieni się z @Entity na @MappedSuperclass.

Wydaje mi się że poprzez klasę PersistenceProvider a dokładniej przez EntityManagerFactory i Matemodel da się to zrobić, nie jestem pewien ale żeby to sprawdzić musze nadpisać ta klase i potestować jej funkcje.

edytowany 1x, ostatnio: janiu
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Ale widzisz że to z logicznego punktu widzenia zupełnie nie ma sensu, prawda? Bo skoro klasa A jest Entity to może chcesz przechowywać obiekty tej klasy w bazie i to będą obiekty klasy A. I masz aplikację która ma bazę z tymi obiektami. A teraz ktoś robi sobie klasę B i co wtedy? Kasujesz te encje A? Bo przecież one nie są encjami B. A jeśli encji klasy A nie ma i nie będzie bo to tylko baza to możesz od razu zrobić MappedSuperclass. Taka dynamiczna zmiana to jest mocny WTF bo albo nagle skasujesz komuś pół bazy albo program będzie ci sie sypał bo JPA wykryje że ma niezgodne mapowanie z bazą danych (bo ma tabele których być nie powinno).
We need to go deeper. Jaki problem chcesz rozwiązać tym karkołomnym pomysłem? Bo mam wrażenie że idziesz tu jakąś kaskadą coraz bardziej chorych pomysłów :D Gdzieś tam na samym początku jest jakiś codzienny prosty problem, który chcesz rozwiązać w dziwny sposób, a ten dziwny sposób wymaga jakiegoś mega skomplikowanego rozwiązania, które wymaga jeszcze bardziej porytego kodu, który wymaga....
Więc pytam jeszcze raz: jaki problem chcesz rozwiązać. Ten pierwotny, nie problemy z twoimi "rozwiązaniami".


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0

W momencie kiedy ktos do mojego kodu chce dołaczyc jakas klase (klasa B extends A) encji klasy A nie bedzie, ale ten ktos nie ma dostepu zeby zmienic na @MappedSuperclass, wiec potrzebny mi mechanizm który to zmieni.

Powodem ejst pozbycie się kolumny DYTYPE która jest nie potrzebna i której nie ma w przypadku @MappedSuperclass

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Nie bardzo rozumiem czemu po prostu nie zrobisz @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS). Wtedy nie będzie tego pola o którym mówisz, bo występuje tylko dla InheritanceType.SINGLE_TABLE (które jest defaultem). W czym problem? Nie dość że uzyskasz dokładnie taki efekt jaki chcesz to jeszcze będzie to miało sens logiczny bo nie będzie problemu z encjami A które zgodnie z twoim pomysłem nagle by musiały poznikać albo wysypać aplikacje..., nie mówiąc już o tym że jest to standardowa funkcjonalność JPA i nie wymaga cudów na kiju które próbujesz wyczyniać...


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 4x, ostatnio: Shalom
JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0

Tylko ze wtedy tworzy się nowa tabela o nowej nazwie dla tej klasy dziedzicacej, a ja bym chciał żeby to się znajdowało w tej samej tabeli.

@Shalom da się to tak zrobić? Zeby nie tworzyła się nowa tabela tylko obiekty tej klasy potomnej zostały wrzucane do tamtej tabeli, ale bez kolumny DYTYPE ?

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

A jak niby JPA ma wtedy rozpoznawać którego typu jest dany obiekt? Myślisz ty chociaż trochę? o_O Jak robisz SingleTable to jakoś JPA musi wiedzieć co powyciągać jak każesz pobrać encje B. Jak nie będzie kolumny z dysktryminatorem to jak to ma zrobić? Za pomocą szaklanej kuli? o_O Poza tym nie pojmuje co ci tak kolumna przeszkadza. Ba, skoro używasz ORMa to w ogóle nie powinno cię interesować jak wygląda baza.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0

Ok dzieki za odpowiedz.
Mam jeszcze jedno pytanie. W bibliotece EclipseLinka jest taka klasa "MetamodelImpl" która zawiera mapy klas oznaczonych adnotacja "Entity" i "MappedSuperclass" i teraz np gdy przez refleksje kasuje zawartosc takiej mapy to program działa dalej a powinnien się wysypać, dlaczego tak jest? Te mapy są tylko pogladowe i nie wpływaja na działanie czy są cały czas na nowo inicjalizowany czy jak ?

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

A niby skąd pomysł że powinien sie wysypać? o_O Przecież to jest jakaś klasa z publicznie dostępnym API z której mozesz sobie pewne dane pobrać. Dlaczego uważasz że to jest klasa która trzyma wewnętrzny stan na podstawie którego wykonywane są zapytania za pomocą EntityMangera? Wcale przecież nie musi tak być.
Niemniej nie wiem jak to jest, nie znam na pamięć każdej implementacji JPA. Jeśli cie to interesuje to zapnij się tam debugerem i zobacz co z czego korzysta. Niemniej podtrzymuje to co napisałem wcześniej: robisz jakieś cuda na kiju cholera wie po co, a do tego masz bardzo małe pojęcie o tym co robisz. Nic z tego co próbujesz zrobić nie będzie działać, bo programowanie opiera sie na ROZUMIENIU co robisz. Programowanie metodą monte-carlo przez losowe zmiany w kodzie nigdy nie daje sensownych rezultatów.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
JA
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:178
0

Juz nawet nie chodzi o ten problem, własnie próbuje to wszysko zrozumieć dlatego pytam.
Chciałbym dojsc do tych list które przechowują te klasy, mógłbys mi poradzić jak się do nich dokopać ?

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Nie bardzo rozumiem pytanie. Zapnij się debugerem gdzieś gdzie wołasz jakieś query na entity mangerze i rób step into do klas z bibliteki aż trafisz na to co cie interesuje.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)