Google App Engine (Java + String + Velocity)数据访问调试,出现错误 Cannot find class [javax.naming.Context]

Tags: html5

最近赶赶时髦,也做一个简单的云开发。
在众多的云平台中,我选择了 Google App Engine,虽然已被墙……

下载Elipse,安装 Google App Engine 和 Spring STS,这个按章官网的提示来就行了,没什么好说的。

然后安装AppEngine的文档,配置 ADO 数据映射,在本地测试,一切正常。使用Spring做 PersistenceManager 的依赖注入配置如下:


[html
<!-- Context bean --> 
<bean id="persistenceManagerFactory" class="javax.jdo.JDOHelper" factory-method="getPersistenceManagerFactory"> 
    <constructor-arg> 
        <value>transactions-optional</value> 
    </constructor-arg> 
</bean> 
 
<bean id="persistenceManager" factory-bean="persistenceManagerFactory" factory-method="getPersistenceManager" scope="request" destroy-method="close">        </bean> 

写了一些简单数据操作,在本地测试一切正常。然后发布到服务器上,出现异常。
查看AppEngine控制台提供的日志,发现如下错误


Cannot find class [javax.naming.Context]

这方面的中文资料几乎没有。Google了一下发现一些英文介绍,大概是说 PersistenceManagerFactory 这个对象不可以用 Spring 注入。于是按照 Google 文档的方法,将 Factory 封装到一个静态属性中去


[java]
public class PMF { 
    private static final PersistenceManagerFactory pmfInstance = JDOHelper 
            .getPersistenceManagerFactory("transactions-optional"); 
 
    private PMF() { 
    } 
 
    public static PersistenceManagerFactory get() { 
        return pmfInstance; 
    } 

修改配置如下:


[html] 
<!-- Context bean --> 
<bean id="persistenceManagerFactory" class="xxx.PMF" factory-method="get"> 
</bean> 
 
<bean id="persistenceManager" factory-bean="persistenceManagerFactory" factory-method="getPersistenceManager" scope="request" destroy-method="close">        </bean> 

重新上传之后,发现错误类型变成了:


Cannot find class [javax.naming.Name]

看来使用 Spring 注入 PersistenceManager 也是不行的,于是在 PMF 中添加如下代码:


[java]
public static PersistenceManager getPersistenceManager() { 
    return get().getPersistenceManager(); 

修改Spring配置如下:

[html] 
<bean id="persistenceManager" class="xxx.PMF"  
    factory-method="getPersistenceManager" scope="request"  destroy-method="close"> 
</bean> 

本文链接:http://www.4byte.cn/learning/43153.html