Spring Proxy für über Service zurückgegebenen Objekte verwenden

P

Phil160876

Gast
Hallo, ich hoffe ich kann mein Problem einigermaßen beschreiben.

Ich habe mit Spring einen HttpInvokerServiceExporter deklariert und stelle somit meinen Clients einen Service zur Verfügung.

Die Klasse für diesesn Service ist
Java:
class InstanzProviderImpl implements InstanzProvider{
public Instanz getNewInstanz(){
return new InstanzImpl();
}
}

Java:
interface InstanzProvider{
public Instanz getNewInstanz();
}

Java:
interface Instanz{
}

Mein Client sollte natürlich nur die Interfaces kennen, da er ja alle Aufrufe an den Server weiterleiten soll. Jetzt ist es aber so, dass der Client versucht, beim Aufruf der getNewInstanz()-Methode versucht, die zurückgegebene InstanzImpl wieder zu deserialisieren, was er aber nicht kann, da er die Klasse ja nicht kennt (und auch nicht kennen soll). Ich möchte aber, das er auch hierfür einen Proxy nehmen soll und alle Aufrufe an den Server weiterleiten soll wie er es mit dem InstanzProvider-Service macht.

Ich hoffe, man kann mein Anliegen verstehen :)
Viele Grüße,

Phil
 

FArt

Top Contributor
Mein Client sollte natürlich nur die Interfaces kennen, da er ja alle Aufrufe an den Server weiterleiten soll. Jetzt ist es aber so, dass der Client versucht, beim Aufruf der getNewInstanz()-Methode versucht, die zurückgegebene InstanzImpl wieder zu deserialisieren, was er aber nicht kann, da er die Klasse ja nicht kennt (und auch nicht kennen soll). Ich möchte aber, das er auch hierfür einen Proxy nehmen soll und alle Aufrufe an den Server weiterleiten soll wie er es mit dem InstanzProvider-Service macht.

Ich hoffe, man kann mein Anliegen verstehen :)
Viele Grüße,

Phil

Kennen? Wie kennt ein Client eine Klasse? Darf ich vorstellen... ???

Meinst du, der Client erhält eine ClassNotFoundException?
Das ist klar. Die Klasse muss im Klassenpfad sein. Kennt er sie dann nach deiner Definition? Dann muss er sie kennen...

Tipp: wenn du einen Fehler erhälst, poste den Stacktrace...
 
P

Phil160876

Gast
Hi, ja ich bekomme eine ClassNotFoundException (sorry dass ich den Stacktrace nicht gepostet habe, habe den Sourcecode zur zeit nicht zur Hand)

Ich möchte aber nicht, dass der Client direkt auf das Objekt, das er vom Server über die getNewInstanz() bekommt, sondern er über das Interface "Instanz" die Anfragen bei Methodenaufrufen auch an den Server weiterleitet, sozusagen der Server die ganze Arbeit macht und der Client lediglich die Methoden auf dem Server aufruft und das Ergebnis empfängt. Ich hoffe, man kann das verstehen, was ich will?!
 

FArt

Top Contributor
Du möchtest von Remote auf die Servicemethoden zugreifen?
Dann darfst du nicht das Erstellen der Instanz exportieren, sondern nur die Servicemethoden. Der Provider soll ja die Factory sein, die Spring nutzt um Beaninstanzen zu erstellen. Der wird nicht exporiert.
 
P

Phil160876

Gast
Hi,

stimmt, daran habe ich noch gar nicht gedacht -.-...
Jetzt habe ich aber ein Problem, wenn jetzt ein Client eine Instanz holt und ein anderer auch, dann bekommen Sie die selbe Instanz, ich möchte aber, dass jeder Client einen "Verweis" (also auf dem Server) auf eine eigene Instanz bekommt. Wie kann ich das realisieren?
Hier mal meine xml-Files auf dem Server:

applicationContext.xml
[XML]
<beans>
<bean id="quiz" class="org.quiz.server.model.privat.impl.InstanzImpl">
</bean>
</beans>
[/XML]

web.xml
[XML]
<web-app>
<servlet>
<servlet-name>Quiz</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>Quiz</servlet-name>
<url-pattern>/Quiz/*</url-pattern>
</servlet-mapping>
</web-app>
[/XML]

Quiz-servlet.xml
[XML]
<beans>
<bean name="/Quiz"
class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
<property name="service">
<ref bean="quiz"/>
</property>
<property name="serviceInterface">
<value>org.quiz.server.model.oeffentlich.interf.Instanz</value>
</property>
</bean>
</beans>[/XML]

applicationContext.xml auf dem Client
[XML]
<beans>
<bean id="instanz" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
<property name="serviceUrl">
<value>http://localhost:8080/QuizServer/Quiz/Quiz</value>
</property>
<property name="serviceInterface">
<value>org.quiz.server.model.oeffentlich.interf.Instanz</value>
</property>
</bean>
</beans>
[/XML]
 

Ähnliche Java Themen

Neue Themen


Oben