axis2 Web服务。在哪里放置我自己的配置

时间:2010-02-17 12:35:29

标签: java tomcat web-services axis2

我使用axis2和POJO部署(到Tomcat服务器)用Java编写了一个Web服务。我的服务打开了与MySQL数据库的连接。为此,我需要连接字符串。我在哪里放置连接字符串,所以我不必在代码中硬编码?我如何从代码中访问它?我想在服务级别的某处设置此参数,而不是整个服务器的全局参数。这可能吗?

2 个答案:

答案 0 :(得分:1)

您可以使用tomcat为您配置数据库连接,然后使用JNDI查找javax.sql.DataSource。

看看tomcat的这些:

使用JNDI还意味着,如果您需要移动到其他Web容器/应用服务器,您将自动变得更加兼容。

答案 1 :(得分:1)

如果您想使用配置文件,可以在以下位置放置一个:

axis2/WEB-INF/services/classes/config-file.xml

您可以使用AxisService类加载器在代码中访问此文件,该类加载器在startUp(ConfigurationContext configctx,AxisService服务)方法期间可用。启动服务时(部署后或容器重启后)会触发startUp()。

import org.apache.axis2.engine.ServiceLifeCycle;
public class LifeCycleImpl implements ServiceLifeCycle {

    public void startUp(ConfigurationContext configctx, AxisService service) {    

        InputStream in  = service.getClassLoader().getResourceAsStream("config-file.xml");
        //Extract your database config from the input stream

        //Create database connection

        //Store the connection as a service parameter using service.AddParameter

}

在服务实现类的init(ServiceContext serviceContext)方法中,您可以通过ServiceLifeCycle.startUp()方法访问在ServiceContext.getAxisService().getParamterValue()期间创建的数据库连接。

注意:您必须在服务的services.xml文件中指定ServiceLifeCycle实施类,作为class标记的service属性:

<!-- The class attribute defines the hook into the Service lifecycle methods
startUp and shutDown -->
<service name="YourService" class="com.macima.webservice.LifeCycleImpl">
    <!--Specify the web service's implementation class -->
    <parameter name="ServiceClass">com.macima.webservice.ServiceImpl</parameter>    
    <!--Declare methods exposed by the web service-->
    <operation name="getSomething">
        <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
    </operation>
    </parameter>
</service>

使用此方法,您的配置文件将保留在aar文件之外。好处是您可以通过不同的测试环境提升相同的aar文件,为环境特定的配置文件中的每个环境选取相关设置。此外,您可以编辑配置文件,而无需打开aar文件。

相关问题