2009-03-11 10 views
5

Utworzyłem niektóre zasoby JDBC i zasoby niestandardowe w GlassFish. Nazwałem zasobu JDBC jdbc/mydb i zasobu niestandardowego service/test.Jak mogę uczynić zasobu niestandardowego również wyszukiwane w glassfish przez java: com/env-scheme?

Połączenie JDBC jest sprawdzane pod numerem ic.lookup("java:comp/env/jdbc/mydb"). Można go również znaleźć pod adresem ic.lookup("jdbc/mydb"), który ma pewne wady, patrz odpowiedź Robina poniżej.

Ale mój zasób niestandardowy musi być sprawdzony pod numerem ic.lookup("service/test"). Linia ic.lookup("java:comp/env/service/test") nie działa. Czy to możliwe, a jeśli tak: jak?

Odpowiedz

3

Prefiks wskazuje użycie odwołania do zasobu, które zostało zdefiniowane dla encji Java EE, z której jest wykonywane wyszukiwanie JNDI. Będziesz musiał zdefiniować takie odniesienie dla niestandardowego zasobu, a także wyszukać go w ten sam sposób.

Przedrostek nie jest konieczny do wyszukiwania JDBC, ponieważ można zamiast tego użyć pełnej nazwy jndi. Problem z tym podejściem polega na tym, że jeśli przeniesiesz zasób w taki sposób, że nie będzie on już zlokalizowany w lokalnym kontekście początkowym, nie znajdziesz go bez zmiany nazwy odnośnika w kodzie, aby uwzględnić informacje o lokalizacji. Używanie odniesienia chroni twój kod przed tym, więc zmieni się tylko mapowanie w odnośniku.

Niektóre info here zużycia

+0

OK. Ale co muszę zdefiniować, aby używać prefiksu 'java: com: env /' dla zasobów niestandardowych? Nie zrobiłem czegoś specjalnego dla JDBC, więc GlassFish/NetBeans musi to zapewnić. Dodałem tylko zasoby do pliku web.config i odniesienia do zasobu w sun-web.xml. – doekman

+0

Niestety, Twoje dane wskazują na informacje IBM, które nie są niezależne od dostawcy ... – doekman

+0

Nie, nie jest, ale zasady dotyczące sposobu ich używania. Przykłady konfiguracji są specyficzne dla ibm, a używane protokoły znajdują zasoby. Nie jesteś pewien, czy to może być neutralne dla dostawcy, musisz określić, jak to zrobić z wybranym serwerem aplikacji. – Robin

0

Nie jestem pewien, co rozumie przez „GlassFish niestandardowy zasobu”. Specyfikacja Java EE mówi, że przestrzeń nazw 'java: comp/env' jest zarezerwowana dla wyszukiwań zasobów, które są powiązane tylko dla tej konkretnej aplikacji. Więc

ic.lookup("java:comp/env/jdbc/mydb") 

faktycznie oznacza, że ​​JDBC/mojabd to nazwa wiązania dla aplikacji (EJB/servlet etc), które robisz z odnośnika. Wykonywanie bezpośredniego wyszukiwania bez użycia prefiksu java: comp/env ogranicza aplikację do środowiska serwera, na którym jest wdrażany.

1

Jeśli utworzono niestandardowe-resources w domain.xml, może zapomniałeś dodać je jako zasób-ref pod Serwery/tag serwera w domain.xml:

<resources> 
     <!-- JDBC RESOURCE --> 
     ... 
     <custom-resource res-type="java.lang.String" jndi-name="MyCustomStringResource" 
         factory-class="org.glassfish.resources.custom.factory.PrimitivesAndStringFactory"> 
      <property name="value" value="hello, this is a string resource"></property> 
     </custom-resource> 
     ... 
    </resources> 
    <servers> 
     <server name="server" config-ref="server-config"> 
      <application-ref ref="__admingui" virtual-servers="__asadmin"></application-ref> 
      ... 
      <resource-ref ref="MyCustomStringResource"></resource-ref> 
      ... 
     </server> 
    </servers> 
0

GlassFish 3 i maksymalnie wykorzystuje GUI administratora na localhost: 4848 używać GUI i przejdź do JDNI> Dział niestandardowy> nowy zasób

do poprzedniej wersji GlassFish polecam zmianę glassfish.xml do wystąpienia nowego zasobu przy użyciu specyfikatorów

Powiązane problemy