2010-03-02 2 views
0
  • Comment puis-je accéder à un bean géré par jsf (par exemple, des icefaces) à partir d'un client blazeds?
  • Sera-t-il possible de partager également les mêmes informations de session? (Par exemple, si j'ai une page avec un jsf/ICEfaces composant et un client swf - peuvent-ils utiliser la même session?)

Répondre

0

d'abord vous devez mettre en œuvre le FlexFactory dans votre usine:
http://livedocs.adobe.com/blazeds/1/blazeds_devguide/factory_2.html

-je changer le SpringFactory un peu afin que vous puissiez accéder à l'instance actuelle de la fève donnée:

public class BeanFactory implements FlexFactory { 

private static final String SOURCE = "source"; 

public void initialize(String id, ConfigMap configMap) {} 

public FactoryInstance createFactoryInstance(String id, ConfigMap properties) { 
    BeanFactoryInstance instance = new BeanFactoryInstance(this, id, properties); 
    instance.setSource(properties.getPropertyAsString(SOURCE, instance.getId())); 
    return instance; 
} 

public Object lookup(FactoryInstance inst) { 
    BeanFactoryInstance factoryInstance = (BeanFactoryInstance) inst; 
    return factoryInstance.lookup(); 
} 

static class BeanFactoryInstance extends FactoryInstance { 
    BeanFactoryInstance(BeanFactory factory, String id, ConfigMap properties) { 
     super(factory, id, properties); 
    } 

    public String toString() { 
     return "BeanFactory instance for id=" + getId() + " source=" + getSource() + " scope=" + getScope(); 
    } 

    public Object lookup() { 
     HttpServletRequest hsr = FlexContext.getHttpRequest(); 
     String beanName = getSource(); 

     try 
     { 
      Object o = hsr.getSession().getAttribute(beanName); 
      return o; 
     } 
     catch (Exception e) 
     { 
      ServiceException se = new ServiceException(); 
      String msg = "Java Bean '" + beanName + "' does not exist."; 
      se.setMessage(msg); 
      se.setRootCause(e); 
      se.setDetails(msg); 
      se.setCode("Server.Processing"); 
      throw se; 
     } 
    } 
}} 

au service-config.xml (WEB-INF/dossier flex) vous devez vous inscrire cette usine:

<factories> 
    <factory id="beanFactory" class="packageName.BeanFactory"/> 
</factories> 

alors vous devez vous enregistrer l'usine à votre destination dans le Remoting-config.xml comme ceci:

<destination id="remoteService"> 
     <properties> 
      <factory>beanFactory</factory> 
      <source>beanName</source> 
      <scope>session</scope> 
     </properties> 
</destination> 

Quel est donc ce BeanFactory faire:
lorsque vous souhaitez accéder à distance par de flex à java ou à l'application jee, vous déclarez un objet remote en flex avec la destination "remoteService" qui est configurée dans le fichier remoting-config.xml. Au moment où vous accédez de flex à Java en appelant une méthode côté serveur, le beanfactory prend en charge l'instance actuelle du bean que vous déclarez dans le fichier remoting-config.xml en transmettant la requête au FlexContext:
HttpServletRequest hsr = FlexContext .getHttpRequest();

maintenant vous avez la session et avec le beanName l'instance en appelant
hsr.getSession(). GetAttribute (beanName)

cela ne fonctionne pas avec des haricots d'application et de session et seulement si jsf instancié la fève avant la BeanFactory veulent accéder à la fève ...

lorsque vous souhaitez intégrer un swf fichier avec ICEfaces vous devez prendre la glace: outputMedia-Tag un ensemble lecteur-attribut « flash »

si vous travaillez avec éclipse pour développer votre application jee et vous intégrer le tomca t en éclipse, vous pouvez définir le dossier racine du serveur dans les propriétés de votre flex-projet dans le dossier tomcat (constructeur flex):
alt text (Désolé pas de temps pour faire cela semble bon;))

maintenant vous pouvez démarrer le serveur tomcat directement dans eclipse et vous pouvez déboguer sur flex et java aussi :)

espérons que cela aide!

Questions connexes