001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 package org.apache.geronimo.cxf.pojo; 019 020 import java.net.URL; 021 import java.util.Map; 022 023 import javax.naming.Context; 024 import javax.naming.NamingException; 025 import javax.transaction.TransactionManager; 026 027 import org.apache.commons.logging.Log; 028 import org.apache.commons.logging.LogFactory; 029 import org.apache.cxf.Bus; 030 import org.apache.geronimo.cxf.CXFCatalogUtils; 031 import org.apache.geronimo.cxf.CXFWebServiceContainer; 032 import org.apache.geronimo.gbean.GBeanInfo; 033 import org.apache.geronimo.gbean.GBeanInfoBuilder; 034 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; 035 import org.apache.geronimo.jaxws.JNDIResolver; 036 import org.apache.geronimo.jaxws.PortInfo; 037 import org.apache.geronimo.jaxws.ServerJNDIResolver; 038 import org.apache.geronimo.kernel.Kernel; 039 import org.apache.geronimo.naming.enc.EnterpriseNamingContext; 040 import org.apache.geronimo.transaction.GeronimoUserTransaction; 041 import org.apache.geronimo.webservices.WebServiceContainer; 042 import org.apache.geronimo.webservices.WebServiceContainerFactory; 043 044 /** 045 * @version $Rev: 508298 $ $Date: 2007-02-15 22:25:05 -0500 (Thu, 15 Feb 2007) $ 046 */ 047 public class POJOWebServiceContainerFactoryGBean implements WebServiceContainerFactory { 048 049 private static final Log LOG = LogFactory.getLog(POJOWebServiceContainerFactoryGBean.class); 050 051 private final Bus bus; 052 private final Object endpointInstance; 053 private final URL configurationBaseUrl; 054 055 public POJOWebServiceContainerFactoryGBean(PortInfo portInfo, 056 String endpointClassName, 057 ClassLoader classLoader, 058 Map componentContext, 059 Kernel kernel, 060 TransactionManager transactionManager, 061 URL configurationBaseUrl) 062 throws ClassNotFoundException, 063 IllegalAccessException, 064 InstantiationException { 065 066 Context context = null; 067 068 if (componentContext != null) { 069 GeronimoUserTransaction userTransaction = new GeronimoUserTransaction(transactionManager); 070 try { 071 context = EnterpriseNamingContext.createEnterpriseNamingContext(componentContext, 072 userTransaction, 073 kernel, 074 classLoader); 075 } catch (NamingException e) { 076 LOG.warn("Failed to create naming context", e); 077 } 078 } 079 080 this.bus = CXFWebServiceContainer.getBus(); 081 this.configurationBaseUrl = configurationBaseUrl; 082 083 Class endpointClass = classLoader.loadClass(endpointClassName); 084 this.endpointInstance = endpointClass.newInstance(); 085 086 this.bus.setExtension(new ServerJNDIResolver(context), JNDIResolver.class); 087 this.bus.setExtension(portInfo, PortInfo.class); 088 089 CXFCatalogUtils.loadOASISCatalog(this.bus, 090 this.configurationBaseUrl, 091 "WEB-INF/jax-ws-catalog.xml"); 092 } 093 094 public WebServiceContainer getWebServiceContainer() { 095 return new POJOWebServiceContainer(bus, configurationBaseUrl, endpointInstance); 096 } 097 098 public static final GBeanInfo GBEAN_INFO; 099 100 static { 101 GBeanInfoBuilder infoBuilder = GBeanInfoBuilder.createStatic(POJOWebServiceContainerFactoryGBean.class, NameFactory.GERONIMO_SERVICE); 102 infoBuilder.addAttribute("portInfo", PortInfo.class, true, true); 103 infoBuilder.addAttribute("endpointClassName", String.class, true, true); 104 infoBuilder.addAttribute("classLoader", ClassLoader.class, false); 105 infoBuilder.addAttribute("componentContext", Map.class, true, true); 106 infoBuilder.addAttribute("kernel", Kernel.class, false); 107 infoBuilder.addReference("TransactionManager", TransactionManager.class, NameFactory.TRANSACTION_MANAGER); 108 infoBuilder.addAttribute("configurationBaseUrl", URL.class, true); 109 110 infoBuilder.setConstructor(new String[]{ 111 "portInfo", 112 "endpointClassName", 113 "classLoader", 114 "componentContext", 115 "kernel", 116 "TransactionManager", 117 "configurationBaseUrl" 118 }); 119 120 GBEAN_INFO = infoBuilder.getBeanInfo(); 121 } 122 123 public static GBeanInfo getGBeanInfo() { 124 return GBEAN_INFO; 125 } 126 }