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.axis2.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.geronimo.gbean.GBeanInfo; 030 import org.apache.geronimo.gbean.GBeanInfoBuilder; 031 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; 032 import org.apache.geronimo.jaxws.annotations.AnnotationHolder; 033 import org.apache.geronimo.kernel.Kernel; 034 import org.apache.geronimo.naming.enc.EnterpriseNamingContext; 035 import org.apache.geronimo.naming.reference.SimpleReference; 036 import org.apache.geronimo.transaction.GeronimoUserTransaction; 037 import org.apache.geronimo.webservices.WebServiceContainer; 038 import org.apache.geronimo.webservices.WebServiceContainerFactory; 039 040 /** 041 * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $ 042 */ 043 public class POJOWebServiceContainerFactoryGBean implements WebServiceContainerFactory { 044 045 private static final Log LOG = LogFactory.getLog(POJOWebServiceContainerFactoryGBean.class); 046 047 private final ClassLoader classLoader; 048 private final org.apache.geronimo.jaxws.PortInfo portInfo; 049 private final String endpointClassName; 050 private URL configurationBaseUrl; 051 private Context context; 052 private AnnotationHolder holder; 053 private String contextRoot; 054 055 public POJOWebServiceContainerFactoryGBean(org.apache.geronimo.jaxws.PortInfo portInfo, 056 String endpointClassName, 057 ClassLoader classLoader, 058 Map componentContext, 059 Kernel kernel, 060 TransactionManager transactionManager, 061 URL configurationBaseUrl, 062 AnnotationHolder holder, 063 String contextRoot) 064 throws InstantiationException, IllegalAccessException, ClassNotFoundException { 065 066 if (componentContext != null) { 067 068 // The name should match WebServiceContextAnnotationHelper.RELATIVE_JNDI_NAME 069 componentContext.put("env/WebServiceContext", new WebServiceContextReference()); 070 071 GeronimoUserTransaction userTransaction = new GeronimoUserTransaction(transactionManager); 072 try { 073 this.context = EnterpriseNamingContext.createEnterpriseNamingContext(componentContext, 074 userTransaction, 075 kernel, 076 classLoader); 077 } catch (NamingException e) { 078 LOG.warn("Failed to create naming context", e); 079 } 080 } 081 082 this.portInfo = portInfo; 083 this.classLoader = classLoader; 084 this.endpointClassName = endpointClassName; 085 this.configurationBaseUrl = configurationBaseUrl; 086 this.holder = holder; 087 this.contextRoot = contextRoot; 088 } 089 090 public WebServiceContainer getWebServiceContainer() { 091 POJOWebServiceContainer container = new POJOWebServiceContainer(portInfo, endpointClassName, classLoader, 092 context, configurationBaseUrl, holder, contextRoot); 093 try { 094 container.init(); 095 } catch (Exception e) { 096 throw new RuntimeException("Failure initializing web service containter", e); 097 } 098 return container; 099 } 100 101 private static class WebServiceContextReference extends SimpleReference { 102 public Object getContent() throws NamingException { 103 return new POJOWebServiceContext(); 104 } 105 } 106 107 public static final GBeanInfo GBEAN_INFO; 108 109 static { 110 GBeanInfoBuilder infoBuilder = GBeanInfoBuilder.createStatic(POJOWebServiceContainerFactoryGBean.class, NameFactory.GERONIMO_SERVICE); 111 infoBuilder.addAttribute("portInfo", org.apache.geronimo.jaxws.PortInfo.class, true, true); 112 infoBuilder.addAttribute("endpointClassName", String.class, true, true); 113 infoBuilder.addAttribute("classLoader", ClassLoader.class, false); 114 infoBuilder.addAttribute("componentContext", Map.class, true, true); 115 infoBuilder.addAttribute("kernel", Kernel.class, false); 116 infoBuilder.addReference("TransactionManager", TransactionManager.class, NameFactory.JTA_RESOURCE); 117 infoBuilder.addAttribute("configurationBaseUrl", URL.class, true); 118 infoBuilder.addAttribute("holder", AnnotationHolder.class, true); 119 infoBuilder.addAttribute("contextRoot", String.class, true, true); 120 121 infoBuilder.setConstructor(new String[]{ 122 "portInfo", 123 "endpointClassName", 124 "classLoader", 125 "componentContext", 126 "kernel", 127 "TransactionManager", 128 "configurationBaseUrl", 129 "holder", 130 "contextRoot" 131 }); 132 133 GBEAN_INFO = infoBuilder.getBeanInfo(); 134 } 135 136 public static GBeanInfo getGBeanInfo() { 137 return GBEAN_INFO; 138 } 139 }