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

最近赶赶时髦,也做一个简单的云开发。

在众多的云平台中,我选择了 Google App Engine,虽然已被墙……

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

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


	<!-- 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 封装到一个静态属性中去


public class PMF {
	private static final PersistenceManagerFactory pmfInstance = JDOHelper
			.getPersistenceManagerFactory("transactions-optional");

	private PMF() {
	}

	public static PersistenceManagerFactory get() {
		return pmfInstance;
	}
}


修改配置如下:


	<!-- 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 中添加如下代码:


	public static PersistenceManager getPersistenceManager() {
		return get().getPersistenceManager();
	}


修改Spring配置如下:

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

重新发布后问题解决 :)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值