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

Dieses Thema Spring - Proxy für über Service zurückgegebenen Objekte verwenden im Forum "Application Tier" wurde erstellt von Phil160876, 3. Juli 2012.

Thema: Proxy für über Service zurückgegebenen Objekte verwenden Hallo, ich hoffe ich kann mein Problem einigermaßen beschreiben. Ich habe mit Spring einen...

  1. 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
    Code (Java):
    class InstanzProviderImpl implements InstanzProvider{
    public Instanz getNewInstanz(){
    return new InstanzImpl();
    }
    }
    Code (Java):
    interface InstanzProvider{
    public Instanz getNewInstanz();
    }
    Code (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
     
  2. Vielleicht helfen dir diese Java-Grundlagen weiter --> *Klick*
  3. 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...
     
  4. 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?!
     
  5. 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.
     
  6. 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]
     
  7. KOSTENLOSES Java-Grundlagen Training im Wert von 39 € Sichere dir hier den kostenlosen Zugriff auf umfangreiches Java-Know How und starte richtig durch!