/**
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.drools.container.spring.beans;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.drools.SystemEventListenerFactory;
import org.drools.container.spring.beans.StatefulKnowledgeSessionBeanFactory.JpaConfiguration;
import org.drools.grid.Grid;
import org.drools.grid.conf.GridPeerServiceConfiguration;
import org.drools.grid.conf.impl.GridPeerConfiguration;
import org.drools.grid.impl.GridImpl;
import org.drools.grid.impl.MultiplexSocketServerImpl;
import org.drools.grid.io.AcceptorFactoryService;
import org.drools.grid.io.impl.MultiplexSocketServiceCongifuration;
import org.drools.grid.remote.mina.MinaAcceptorFactoryService;
import org.drools.grid.service.directory.WhitePages;
import org.drools.grid.service.directory.impl.CoreServicesLookupConfiguration;
import org.drools.grid.service.directory.impl.WhitePagesLocalConfiguration;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
/**
*
* @author Lucas Amador
*
*/
public class GridBeanFactory
implements
FactoryBean,
InitializingBean {
private String id;
private GridImpl grid;
private Map coreServices;
private WhitePages whitePages;
private JpaConfiguration jpaConfiguration;
private SocketServiceConfiguration socketServiceConfiguration;
// private String type;
// private GenericConnection connection;
//
public Object getObject() throws Exception {
return this.grid;
}
//
public Class<Grid> getObjectType() {
return Grid.class;
}
public boolean isSingleton() {
return true;
}
public void afterPropertiesSet() throws Exception {
this.grid = new GridImpl( new HashMap() );
MultiplexSocketServiceCongifuration socketConf = null;
if ( this.coreServices == null ) {
this.coreServices = new HashMap();
}
GridPeerConfiguration conf = new GridPeerConfiguration();
GridPeerServiceConfiguration coreSeviceLookupConf = new CoreServicesLookupConfiguration( this.coreServices );
conf.addConfiguration( coreSeviceLookupConf );
//Configuring the WhitePages
if ( this.whitePages != null ) {
WhitePagesLocalConfiguration wplConf = new WhitePagesLocalConfiguration();
wplConf.setWhitePages( this.whitePages );
conf.addConfiguration( wplConf );
}
conf.configure( this.grid );
// We do this after the main grid configuration, to make sure all services are instantiated
if ( this.socketServiceConfiguration != null ) {
AcceptorFactoryService acc = null;
if ( "mina".equals( this.socketServiceConfiguration.getAcceptor() ) ) {
acc = new MinaAcceptorFactoryService();
}
if ( acc == null ) {
// Mina is the default for the moment
acc = new MinaAcceptorFactoryService();
}
socketConf = new MultiplexSocketServiceCongifuration( new MultiplexSocketServerImpl( this.socketServiceConfiguration.getIp(),
acc,
SystemEventListenerFactory.getSystemEventListener(),
this.grid ) );
for ( String[] services : this.socketServiceConfiguration.getServices() ) {
Object service = ((GridImpl) this.grid).get( services[0].trim() );
if ( service == null ) {
throw new RuntimeException( "Unable to configure socket. Service '" + services[0] + "' could not be found" );
}
if ( "auto".equals( services[1].trim() ) ) {
} else {
socketConf.addService( services[0].trim(),
service,
Integer.parseInt( services[1].trim() ) );
}
}
socketConf.configureService( this.grid );
}
}
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
public WhitePages getWhitePages() {
return whitePages;
}
public void setWhitePages(WhitePages whitePages) {
this.whitePages = whitePages;
}
public Map getCoreServices() {
return coreServices;
}
public void setCoreServices(Map coreServices) {
this.coreServices = coreServices;
}
public JpaConfiguration getJpaConfiguration() {
return jpaConfiguration;
}
public void setJpaConfiguration(JpaConfiguration jpaConfiguration) {
this.jpaConfiguration = jpaConfiguration;
}
public SocketServiceConfiguration getSocketServiceConfiguration() {
return socketServiceConfiguration;
}
public void setSocketServiceConfiguration(SocketServiceConfiguration socketServiceConfiguration) {
this.socketServiceConfiguration = socketServiceConfiguration;
}
public static class SocketServiceConfiguration {
private String ip;
private String acceptor;
private List<String[]> services;
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getAcceptor() {
return acceptor;
}
public void setAcceptor(String acceptor) {
this.acceptor = acceptor;
}
public List<String[]> getServices() {
if ( this.services == null ) {
this.services = new ArrayList<String[]>();
}
return services;
}
public void setServices(List<String[]> services) {
this.services = services;
}
}
}