KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > hero > jabber > JabberService


1 package hero.jabber;
2
3 /*
4 *
5 * JabberServiceMBean.java -
6 * Copyright (C) 2003 Ecoo Team
7 * valdes@loria.fr
8 *
9 *
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public License
12 * as published by the Free Software Foundation; either version 2
13 * of the License, or (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU Lesser General Public License for more details.
19 *
20 * You should have received a copy of the GNU Lesser General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 */

24
25 import javax.management.MBeanServer JavaDoc;
26 import javax.management.ObjectName JavaDoc;
27 import javax.management.InstanceAlreadyExistsException JavaDoc;
28 import javax.management.MBeanRegistrationException JavaDoc;
29 import javax.management.NotCompliantMBeanException JavaDoc;
30 import javax.management.MalformedObjectNameException JavaDoc;
31 // Jabber imports
32
import com.echomine.jabber.*;
33 import com.echomine.net.*;
34 import java.util.*;
35 import javax.naming.Context JavaDoc;
36 import javax.naming.NamingException JavaDoc;
37 import org.objectweb.jonas.service.ServiceException;
38
39 //import objectweb
40
import org.objectweb.jonas.jmx.JmxService;
41 import org.objectweb.jonas.service.AbsServiceImpl;
42 import org.objectweb.jonas.service.ServiceManager;
43
44
45 public class JabberService extends AbsServiceImpl implements JabberServiceMBean {
46
47
48     JabberSession jabberSession;
49     JabberContext jabberContext;
50     // Constants -----------------------------------------------------
51

52         
53  
54     // Attributes ----------------------------------------------------
55

56     private String JavaDoc j_user;
57     private String JavaDoc j_password;
58     private String JavaDoc j_server;
59     private int j_port;
60
61     /**
62      * Reference to a MBean server.
63      */

64     private MBeanServer JavaDoc mbeanServer = null;
65
66     public final static String JavaDoc SERVICE_NAME = "jonas:type=service,name=Jabber";
67
68     // Public --------------------------------------------------------
69

70   
71  
72     public void doInit(Context JavaDoc ctx) throws ServiceException {
73         // Get the JMX Server via JMX Service
74
try {
75
76                ServiceManager sm = ServiceManager.getInstance();
77                JmxService jmx = (JmxService)sm.getJmxService();
78                 mbeanServer = jmx.getJmxServer();
79            } catch (Exception JavaDoc e) {
80             //the JMX service may not be started
81
throw new ServiceException("JMX Server is not started...");
82            }
83             
84         try {
85             this.j_server = (String JavaDoc) ctx.lookup("jonas.service.jabberService.host");
86             System.out.println("HOST: "+this.j_server);
87             this.j_port = new Integer JavaDoc((String JavaDoc) ctx.lookup("jonas.service.jabberService.port")).intValue();
88             this.j_user = (String JavaDoc) ctx.lookup("jonas.service.jabberService.user");
89             this.j_password = (String JavaDoc) ctx.lookup("jonas.service.jabberService.password");
90         } catch (NamingException JavaDoc e) {}
91     }
92
93     public void setUser(String JavaDoc user) {j_user = user;}
94     protected String JavaDoc getUser() {return j_user;}
95     public void setPassword(String JavaDoc password) {j_password = password;}
96     protected String JavaDoc getPassword() {return j_password;}
97     public void setServer(String JavaDoc server) {j_server = server;}
98     protected String JavaDoc getServer() {return j_server;}
99     public void setPort(int port) {j_port = port;}
100     protected int getPort() {return j_port;}
101
102     public void doStart() throws ServiceException {
103
104         try {
105             // Register MailService MBean : MailServiceImplMBean
106
mbeanServer.registerMBean(this,new ObjectName JavaDoc(SERVICE_NAME));
107                 System.out.println("JabberService :: Start Service");
108         } catch (InstanceAlreadyExistsException JavaDoc iae) {
109             throw new ServiceException("Cannot start the Jabber Service (Already Exists)" , iae);
110         } catch (MBeanRegistrationException JavaDoc mbre) {
111             throw new ServiceException("Cannot start the Jabber Service (MBean registration error)" , mbre);
112         } catch (NotCompliantMBeanException JavaDoc ncmbe) {
113             throw new ServiceException("Cannot start the Jabber Service (MBean Not compliant error)" , ncmbe);
114         } catch (MalformedObjectNameException JavaDoc mone) {
115             throw new ServiceException("Cannot start the Jabber Service (ObjectName Malformed)" , mone);
116         }
117
118     this.setName("Jabber Service");
119     // Initialize the Jabber context
120
jabberContext = new JabberContext(j_user,j_password,j_server);
121
122     // Create an instance of the Jabber session factory
123
Jabber jabber = new Jabber();
124     // Create the new session
125
jabberSession = jabber.createSession(jabberContext);
126     // Connect to the server
127
try{
128         jabberSession.connect(j_server,j_port);
129     }catch(ConnectionFailedException cf){
130         System.err.println(" Jabber service -> Connection Failed:"+cf.getMessage());
131     }catch(Exception JavaDoc e){
132         System.err.println(" Jabber service -> Connection Failed:"+e.getMessage());
133     }
134     try{
135             jabberSession.getUserService().login();
136     }catch(JabberMessageException jm){
137         System.err.println(" Jabber service -> Login Failed:"+jm.getMessage());
138     }catch(Exception JavaDoc e){
139         System.err.println(" Jabber service -> Login Failed:"+e.getMessage());
140     }
141
142     }
143
144     /**
145     * Send a Jabber message to the specified JID
146     *
147     */

148     public synchronized boolean sendMessage(String JavaDoc JID, String JavaDoc resource, String JavaDoc subject, String JavaDoc messageBody){
149     try{
150         JabberChatMessage msg = new JabberChatMessage(JabberChatMessage.TYPE_NORMAL);
151         msg.setSubject(subject);
152         msg.setBody(messageBody);
153         msg.setTo(JID);
154         jabberSession.sendMessage(msg);
155         return true;
156     }catch(Exception JavaDoc e){System.err.println("Jabber service -> Send Message Failed:"+e.getMessage());}
157     return false;
158     }
159
160
161     /**
162      * Register a new user to Jabber server
163      *
164      */

165     public synchronized boolean registerUser(String JavaDoc login, String JavaDoc password, String JavaDoc email, String JavaDoc name){
166     boolean status=true;
167     jabberSession.disconnect();
168     Jabber jabber = new Jabber();
169     JabberSession session = jabber.createSession(jabberContext);
170     try {
171         session.connect(j_server, j_port);
172             HashMap fields = new HashMap();
173             fields.put("username", login);
174             fields.put("password", password);
175             fields.put("email", email);
176             fields.put("name", name);
177         try{
178         session.getUserService().register(jabberContext.getServerName(), fields);
179         }catch(JabberMessageException ex){
180         status=false;
181         System.err.println("Jabber service ->"+ex);
182         }
183         session.disconnect();
184         start();
185         return status;
186         }catch(Exception JavaDoc e){System.err.println("Jabber service ->"+e);}
187         start();
188     return false;
189
190     }
191
192     /**
193      * Add to Roster
194      *
195      */

196     public synchronized boolean addToRoster(String JavaDoc login, String JavaDoc password, String JavaDoc contactJID,String JavaDoc contactName, String JavaDoc contactGroup ){
197     boolean status=true;
198     jabberSession.disconnect();
199     Jabber jabber = new Jabber();
200     JabberContext context = new JabberContext(login,password,j_server);
201     JabberSession session = jabber.createSession(context);
202     try {
203         session.connect(j_server, j_port);
204         session.getUserService().login();
205         try{
206         session.getRosterService().addToRoster(contactJID,contactName,contactGroup,true);
207         session.getPresenceService().subscribe(contactJID);
208         }catch(Exception JavaDoc ex){
209         status=false;
210         System.err.println("Jabber service ->"+ex);
211         }
212         session.disconnect();
213         start();
214         return status;
215         }catch(Exception JavaDoc e){System.err.println("Jabber service ->"+e);}
216     start();
217     return false;
218
219     }
220     
221     public void doStop() throws ServiceException {
222       if (mbeanServer != null) {
223             try {
224                 mbeanServer.unregisterMBean(new ObjectName JavaDoc(SERVICE_NAME));
225             } catch (Exception JavaDoc e) {
226                 throw new ServiceException("Cannot stop the Jabber Service (JMX).", e);
227             }
228         }
229         System.out.println("Jabber :: Stop Service");
230         jabberSession.disconnect();
231     }
232 }
233
Popular Tags