换不同的数据库,应该只改变datasource和映射文件就可以了的,
解决方案 »
- was平台下将应用绑定到域名?
- Hibernate返回HashMap问题?
- lucene应用中出现异常:java.lang.OutOfMemoryError: Java heap space(急)
- 苦恼??
- hibernatetemplate查询会造成sql注入吗
- java 数组赋值然后计算。。。
- ftpClient中的openServer()方法参数中的主机名不输入IP地址,输入域名支不支持
- 请教在TOMCAT5下,怎样配置SQL2000的JSP的连接池
- 是不是struts只能够处理表单?
- JAVA 定时器 调用重复问题
- 菜鸟问题,各位大虾能告诉我这个代码的主要思想机理我吗?在线等!新手 没什么分 ,拜托啦!
- tomcat启动问题 在线等答案 急!!!!
2楼说的部分对,我也这样实现了,只不过ORACLE的CLOB的字段实在特别,与MYSQL的LONGTEXT实现方法不用,所以server类有些不同的,一般的基本都不用改,只改数据库链接就可以了。我现在是有两个服务类oracle的com.eweb.business.ArticleService,MYSQL的com.eweb.business.ArticleSQLService现在纳闷的是为什么我在applicationContext.xml切换到ArticleSQLService服务类时却出错,即使
和ArticleService类的内容是一样的。难道SPRING的配置跟名字有些关系??错误com.eweb.util.BaseAction.getArticleService(BaseAction.java:37)
调用的就是:AppContext.getInstance().getAppContext().getBean("articleService"); oracle applicationContext.xml 配置 <bean id="articleService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" >
<property name="transactionManager">
<ref local="transactionManager"/>
</property>
<property name="target">
<ref local="articleTarget"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="*"> PROPAGATION_REQUIRED </prop>
</props>
</property>
<property name="proxyTargetClass">
<value> true </value>
</property>
</bean>
<bean id="articleTarget" class="com.eweb.business.ArticleService" singleton="true">
<property name="articleDAO">
<ref local="articleDAO" />
</property>
</bean>
<bean id="articleDAO" class="com.eweb.dao.ArticleDAO">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean> mysql applicationContext.xml 配置 <bean id="articleService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" >
<property name="transactionManager">
<ref local="transactionManager"/>
</property>
<property name="target">
<ref local="articleTarget"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="*"> PROPAGATION_REQUIRED </prop>
</props>
</property>
<property name="proxyTargetClass">
<value> true </value>
</property>
</bean>
<bean id="articleTarget" class="com.eweb.business.ArticleSQLService" singleton="true">
<property name="articleDAO">
<ref local="articleDAO" />
</property>
</bean>
<bean id="articleDAO" class="com.eweb.dao.ArticlesqlDAO">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>为何单切换MYSQL server类就出错,大家注意到DAO原理是一样的,切换了都正常的。dao接口类
public interface IArticleDAO { public void save(Article transientInstance);
public void update(Article transientInstance);
}
ArticleDAO类(oracle)
public class ArticleDAO extends HibernateDaoSupport implements IArticleDAO{public void save(Article transientInstance) {
log.debug("saving Article instance");
try {
//CLOB clob = (CLOB)transientInstance.getContent();
Session session = this.getSession();
transientInstance.setContent(Hibernate.createClob(" "));
session.save(transientInstance);
session.flush();
session.refresh(transientInstance, LockMode.UPGRADE);
CLOB clob = (oracle.sql.CLOB)((org.hibernate.lob.SerializableClob)transientInstance.getContent()).getWrappedClob();
clob.putString(1, transientInstance.getContentString());
//this.getHibernateTemplate().save(transientInstance);
log.debug("save successful");
} catch (Exception re) {
log.error("save failed", re);
re.printStackTrace();
//throw re;
}
}
}ArticlesqlDAO类(mysql)public class ArticlesqlDAO extends HibernateDaoSupport implements IArticleDAO{ public void save(Article transientInstance) {
log.debug("saving Article instance");
try {
this.getHibernateTemplate().save(transientInstance);
log.debug("save successful");
} catch (Exception re) {
log.error("save failed", re);
re.printStackTrace();
//throw re;
}
}
}service接口类
public interface IArticleService { public List findByPage(Pager pager, Long catalogId);
public Long findByPageCount(Long catalogId);
public void save(Article article);
}ArticleService (orcale)
public class ArticleService implements IArticleService{
private IArticleDAO articleDAO; public IArticleDAO getArticleDAO() {
return articleDAO;
}
public void save(Article article) {
this.getArticleDAO().save(article);
}
public Article findByTitleCatalog(String title,Long catalogId){
List list = this.getArticleDAO().findByTitleCatalog(title, catalogId);
if(list.size()>0)
{
Article article = (Article)list.get(0);
String content = "";
try {
if(article.getContent()!=null)
{
System.out.print("content :" + article.getContent().getSubString(1, (int)article.getContent().length()));
content = article.getContent().getSubString(1, (int)article.getContent().length());
article.setContentString(content);
}
else
{
article.setContentString("");
System.out.print("content :null");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return article;
}
else
{
return null;
}
}
}
ArticleSQLService (mysql)
public class ArticleSQLService implements IArticleService {
private IArticleDAO articleDAO;
public ArticleSQLService() {
super();
} public IArticleDAO getArticleDAO() {
return articleDAO;
}
public void save(Article article) {
this.getArticleDAO().save(article);
}
public Article findByTitleCatalog(String title,Long catalogId){
List list = this.getArticleDAO().findByTitleCatalog(title, catalogId);
if(list.size()>0)
{
Article article = (Article)list.get(0);
return article;
}
else
{
return null;
}
}
}就是ORACLE和mysql大字段实现不同,所以得切换service类和dao类。为什么dao类无论什么情况下都成功,而service类切换到MYSQL服务类时却出错了,如果换成ORACLE服务类,DAO还是使用MYSQL DAO类不会出错的。不知道大家看明白了没?
javax.servlet.ServletException: com.eweb.business.ArticleSQLService$$EnhancerByCGLIB$$be7a4243
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:516)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:423)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1158)
com.eweb.util.MyActionServlet.process(MyActionServlet.java:12)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause java.lang.ClassCastException: com.eweb.business.ArticleSQLService$$EnhancerByCGLIB$$be7a4243
com.eweb.util.BaseAction.getArticleService(BaseAction.java:37)
com.eweb.struts.action.ArticleAction.list(ArticleAction.java:101)
com.eweb.struts.action.ArticleAction.execute(ArticleAction.java:49)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1158)
com.eweb.util.MyActionServlet.process(MyActionServlet.java:12)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
这里忘了改为接口,强行装换出错。