Bonjour Monsieurs,
Je voudrais faire communiquer ma db 11g avec forms 10gR2.
J'ai trouver sur le net un exemple avec les pjc http://forms.pjc.bean.over-blog.com/...e-4168506.html.
J'ai tester apparemment ça marche lorsqu'il s'agit d'une seule forms.
Dans mon cas c'est un projet (une application), alors j'ai essayé d'adapter.
A l'ouverture de l'appli j'ouvre le socket au cas où c'est pas encore fait
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
If Name_In('Global.InitServer') = '0' Then
      Message('Open Socket Server on the Port ' || To_Char(Port) || ' on Localhost', no_acknowledge);
      Set_Custom_Property( 'LAF_BLOCK.SOCKET', 1, 'INIT_SERVER', to_char(Port) );
      Copy('1','Global.InitServer');
  End If;
Le code de mon bean est sensiblement le meme que celui du lien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Declare
    eventName      Varchar2(30) := :System.custom_item_event;
    eventValues    ParamList;
    eventValueType Number;
    LC$Msg         Varchar2(512);
    LC$Value       Varchar2(256);
 
    V_Poste        Varchar2(100);
    V_Msg          Varchar2(500);
Begin
   If (eventName='SENDMSG') Then
      eventValues := get_parameter_list(:System.custom_item_event_parameters);
      get_parameter_attr(eventValues,'MESSAGEVALUE',eventValueType, LC$Msg);
      -- Display the message --
      --:BL.MSGS := :BL.MSGS || LC$Msg || Chr(10) ;
      --Synchronize ; 
 
      --Select Substr(LC$Msg,1,Instr(LC$Msg,'#@$')-1),
      --       Substr(LC$Msg,Instr(LC$Msg,'#@$')+3)
      --  Into V_Poste,V_Msg
      --From Dual;
      V_Poste := Substr(LC$Msg,1,Instr(LC$Msg,'#@$')-1);
      V_Msg   := Substr(LC$Msg,Instr(LC$Msg,'#@$')+3);      
 
      If :Toolbar.Pc = V_Poste Then
         Pb_Display_Msg(V_Msg);
      End If;
      Synchronize ;            
   End If;
End;
Lorsque je suis sur la première forms ( forms d'accueil) ça marche il m'affiche le message dans la forms.

Java Plug-in 1.6.0_43
Utilisation de la version JRE 1.6.0_43-b01 Java HotSpot(TM) Client VM
Répertoire d'accueil de l'utilisateur = C:\Documents and Settings\Administrator

----------------------------------------------------
c: effacer la fenêtre de la console
f: finaliser les objets de la file d'attente de finalisation
g: libérer la mémoire
h: afficher ce message d'aide
l: vider la liste des chargeurs de classes
m: imprimer le relevé d'utilisation de la mémoire
o: déclencher la consignation
q: masquer la console
r: recharger la configuration des politiques
s: vider les propriétés système et déploiement
t: vider la liste des threads
v: vider la pile des threads
x: effacer le cache de chargeurs de classes
0-5: fixer le niveau de traçage à <n>
----------------------------------------------------

proxyHost=null
proxyPort=0
connectMode=HTTP, native.
La version Forms Applet est : 10.1.2.0
! DrawLAF1: *** ***
! DrawLAF1: *** Look and Feel Project v1.7.7.2 ***
! DrawLAF1: *** ***
ServerSocket is running
outLine=657#@$Bon de Caisse Fonds à l'ACCD Disponible
Sendmessage=657#@$Bon de Caisse Fonds à l'ACCD Disponible
outLine=657#@$Bon de Caisse Fonds à l'ACCD Disponible
Sendmessage=657#@$Bon de Caisse Fonds à l'ACCD Disponible

Mais une fois que je quitte la forms de connexion pour une autre, meme si je reviens sue la forms, j'ai un souci
Java Plug-in 1.6.0_43
Utilisation de la version JRE 1.6.0_43-b01 Java HotSpot(TM) Client VM
Répertoire d'accueil de l'utilisateur = C:\Documents and Settings\Administrator

----------------------------------------------------
c: effacer la fenêtre de la console
f: finaliser les objets de la file d'attente de finalisation
g: libérer la mémoire
h: afficher ce message d'aide
l: vider la liste des chargeurs de classes
m: imprimer le relevé d'utilisation de la mémoire
o: déclencher la consignation
q: masquer la console
r: recharger la configuration des politiques
s: vider les propriétés système et déploiement
t: vider la liste des threads
v: vider la pile des threads
x: effacer le cache de chargeurs de classes
0-5: fixer le niveau de traçage à <n>
----------------------------------------------------

proxyHost=null
proxyPort=0
connectMode=HTTP, native.
La version Forms Applet est : 10.1.2.0
! DrawLAF1: *** ***
! DrawLAF1: *** Look and Feel Project v1.7.7.2 ***
! DrawLAF1: *** ***
ServerSocket is running
outLine=657#@$Bon de Caisse Fonds à l'ACCD Disponible
Sendmessage=657#@$Bon de Caisse Fonds à l'ACCD Disponible
outLine=657#@$Bon de Caisse Fonds à l'ACCD Disponible
Sendmessage=657#@$Bon de Caisse Fonds à l'ACCD Disponible
java.lang.NullPointerException
at oracle.forms.handler.JavaContainer.customActionPerformed(Unknown Source)
at oracle.forms.ui.BeanManager.dispatchCustomEvent(Unknown Source)
at oracle.forms.ui.VBean.dispatchCustomEvent(Unknown Source)
at oracle.forms.fd.SocketServer.SendMessage(SocketServer.java:117)
at oracle.forms.fd.SocketServer.run(SocketServer.java:76)
at java.lang.Thread.run(Unknown Source)
le code du SendMessage
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package oracle.forms.fd;

import oracle.forms.handler.IHandler;
import oracle.forms.ui.VBean;
import oracle.forms.properties.ID;
import oracle.forms.ui.CustomEvent;

  /**
   * A Bean to transform the Forms module
   * into a socket server
   *
   * @author Francois Degrelle
   * @version 1.1
   *
   * tried only with the Sun Java Plugin
   */

public class SocketServer extends VBean  implements Runnable
{
  // variables
  public final static ID initServer     = ID.registerProperty("INIT_SERVER");
  public final static ID stopServer     = ID.registerProperty("STOP_SERVER");
  private static final ID SEND_MSG      = ID.registerProperty("SENDMSG");
  private static final ID MESSAGEVALUE  = ID.registerProperty("MESSAGEVALUE");

  static Thread              runner ;
  public static boolean      bMsg = false ;
  public static String       sMessage = "" ;
  private static IHandler    mHandler;
  private Server             server ; // special class that init the socker server


  public void init(IHandler handler)
  {
    mHandler = handler;
    super.init(handler);
  }


      // we start the thread here
      private void startThread()
      {
        if (runner == null )
        {
          runner = new Thread(this);
          runner.start();
        }
      }

      // we stop the thread here
      private static void stopThread()
      {
        if (runner != null )
        {
          runner = null;
        }
      }

      // Start the thread
      public void run()
      {
        Thread theThread = Thread.currentThread();
        while (runner == theThread)
        {
            // well we need sleep to release processor for do any thing else
            try {
                theThread.sleep(1000);
            } catch (InterruptedException e) {
                System.err.println("Error : " + e);
                e.printStackTrace();
            }
            // tell Forms that a message is incoming
            if( bMsg )
            {
              System.out.println("Sendmessage="+sMessage);
              SendMessage(sMessage) ;  -- Ligne 76
              bMsg = false ;
              if( sMessage.equalsIgnoreCase("BYE."))
                stopThread() ;
            }
        }
      }

  /*
   *  Set some properties
   */
  public boolean setProperty(ID property, Object value)
  {
    // Start the socket server on the given port
    if( property == initServer )
    {
      int iPort = Integer.parseInt((String)value) ;
      server = new Server(iPort);
      server.start();
      startThread() ;
      return true ;
    }
    // Stop the socket server
    else if( property == stopServer )
    {
        server.close();
        stopThread() ;
      return true ;
    }
    else
    {
     return super.setProperty(property, value);
    }
  }

  // send message back to Forms
  public void SendMessage( String sMessage )
  {
    try{
      CustomEvent ce = new CustomEvent(mHandler, SEND_MSG);
      mHandler.setProperty( MESSAGEVALUE, sMessage );
      dispatchCustomEvent(ce);  --Ligne 117
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }

}
Merci pour votre aide