diff --git a/src/org/nutz/dao/DB.java b/src/org/nutz/dao/DB.java index f44531da3..69cae9af0 100644 --- a/src/org/nutz/dao/DB.java +++ b/src/org/nutz/dao/DB.java @@ -47,6 +47,10 @@ public enum DB { * */ GBASE, + /** + * + */ + SYBASE, /** * 其他数据库 */ diff --git a/src/org/nutz/dao/impl/jdbc/sybase/SybaseIQJdbcExpert.java b/src/org/nutz/dao/impl/jdbc/sybase/SybaseIQJdbcExpert.java new file mode 100644 index 000000000..fa158571f --- /dev/null +++ b/src/org/nutz/dao/impl/jdbc/sybase/SybaseIQJdbcExpert.java @@ -0,0 +1,29 @@ +package org.nutz.dao.impl.jdbc.sybase; + +import org.nutz.dao.DB; +import org.nutz.dao.Dao; +import org.nutz.dao.entity.Entity; +import org.nutz.dao.impl.jdbc.AbstractJdbcExpert; +import org.nutz.dao.jdbc.JdbcExpertConfigFile; +import org.nutz.dao.sql.Pojo; +import org.nutz.lang.Lang; + +public class SybaseIQJdbcExpert extends AbstractJdbcExpert { + + public SybaseIQJdbcExpert(JdbcExpertConfigFile conf) { + super(conf); + } + + public String getDatabaseType() { + return DB.SYBASE.name(); + } + + public boolean createEntity(Dao dao, Entity en) { + throw Lang.noImplement(); + } + + public void formatQuery(Pojo pojo) { + throw Lang.noImplement(); + } + +} diff --git a/src/org/nutz/dao/jdbc/Jdbcs.java b/src/org/nutz/dao/jdbc/Jdbcs.java index 12f062214..3ea92e0a8 100644 --- a/src/org/nutz/dao/jdbc/Jdbcs.java +++ b/src/org/nutz/dao/jdbc/Jdbcs.java @@ -155,8 +155,10 @@ public static JdbcExpert getExpert(String productName, String version) { JdbcExpert re = conf.matchExpert(dbName); - if (null == re) - throw Lang.makeThrow("Can not support database '%s %s'", productName, version); + if (null == re) { + log.warnf("Can not support database '%s %s', fallback to MySql 5", productName, version); + re = conf.matchExpert("mysql 5"); + } return re; } diff --git a/src/org/nutz/dao/jdbc/nutz_jdbc_experts.js b/src/org/nutz/dao/jdbc/nutz_jdbc_experts.js index 8c8dcdd5c..99456f15f 100644 --- a/src/org/nutz/dao/jdbc/nutz_jdbc_experts.js +++ b/src/org/nutz/dao/jdbc/nutz_jdbc_experts.js @@ -19,7 +19,8 @@ var ioc = { "hsql.*" : "org.nutz.dao.impl.jdbc.hsqldb.HsqldbJdbcExpert", "sqlite" : "org.nutz.dao.impl.jdbc.sqlite.SQLiteJdbcExpert", ".+derby.+" : "org.nutz.dao.impl.jdbc.derby.DerbyJdbcExpert", - "gbase.*" : "org.nutz.dao.impl.jdbc.gbase.GBaseJdbcExpert" + "gbase.*" : "org.nutz.dao.impl.jdbc.gbase.GBaseJdbcExpert", + "sybase.*" : "org.nutz.dao.impl.jdbc.sybase.SybaseIQJdbcExpert" // ~ 映射结束 }, diff --git a/src/org/nutz/mvc/impl/NutLoading.java b/src/org/nutz/mvc/impl/NutLoading.java index 6cd9ea242..b2e1e2e3f 100644 --- a/src/org/nutz/mvc/impl/NutLoading.java +++ b/src/org/nutz/mvc/impl/NutLoading.java @@ -125,7 +125,7 @@ public UrlMapping load(NutConfig config) { } - private UrlMapping evalUrlMapping(NutConfig config, Class mainModule, Ioc ioc) throws Exception { + protected UrlMapping evalUrlMapping(NutConfig config, Class mainModule, Ioc ioc) throws Exception { /* * @ TODO 个人建议可以将这个方法所涉及的内容转换到Loadings类或相应的组装类中, * 以便将本类加以隔离,使本的职责仅限于MVC整体的初使化,而不再负责UrlMapping的加载 @@ -202,7 +202,7 @@ private UrlMapping evalUrlMapping(NutConfig config, Class mainModule, Ioc ioc return mapping; } - private static void createContext(NutConfig config) { + protected void createContext(NutConfig config) { // 构建一个上下文对象,方便子类获取更多的环境信息 // 同时,所有 Filter 和 Adaptor 都可以用 ${app.root} 来填充自己 Context context = Lang.context(); @@ -226,14 +226,14 @@ private static void createContext(NutConfig config) { config.getServletContext().setAttribute(Loading.CONTEXT_NAME, context); } - private UrlMapping createUrlMapping(NutConfig config) throws Exception { + protected UrlMapping createUrlMapping(NutConfig config) throws Exception { UrlMappingBy umb = config.getMainModule().getAnnotation(UrlMappingBy.class); if (umb != null) return Loadings.evalObj(config, umb.value(), umb.args()); return new UrlMappingImpl(); } - private ActionChainMaker createChainMaker(NutConfig config, Class mainModule) { + protected ActionChainMaker createChainMaker(NutConfig config, Class mainModule) { ChainBy ann = mainModule.getAnnotation(ChainBy.class); ActionChainMaker maker = null == ann ? new NutActionChainMaker(new String[]{}) : Loadings.evalObj(config, ann.type(), ann.args()); @@ -242,7 +242,7 @@ private ActionChainMaker createChainMaker(NutConfig config, Class mainModule) return maker; } - private void evalSetup(NutConfig config, Class mainModule) throws Exception { + protected void evalSetup(NutConfig config, Class mainModule) throws Exception { SetupBy sb = mainModule.getAnnotation(SetupBy.class); if (null != sb) { if (log.isInfoEnabled()) @@ -253,7 +253,7 @@ private void evalSetup(NutConfig config, Class mainModule) throws Exception { } } - private void evalLocalization(NutConfig config, Class mainModule) { + protected void evalLocalization(NutConfig config, Class mainModule) { Localization lc = mainModule.getAnnotation(Localization.class); if (null != lc) { if (log.isDebugEnabled()) @@ -289,7 +289,7 @@ else if (log.isDebugEnabled()) { } } - private ViewMaker[] createViewMakers(Class mainModule, Ioc ioc) throws Exception { + protected ViewMaker[] createViewMakers(Class mainModule, Ioc ioc) throws Exception { Views vms = mainModule.getAnnotation(Views.class); ViewMaker[] makers; int i = 0; @@ -318,7 +318,7 @@ private ViewMaker[] createViewMakers(Class mainModule, Ioc ioc) throws Except return makers; } - private Ioc createIoc(NutConfig config, Class mainModule) throws Exception { + protected Ioc createIoc(NutConfig config, Class mainModule) throws Exception { IocBy ib = mainModule.getAnnotation(IocBy.class); if (null != ib) { if (log.isDebugEnabled()) @@ -338,7 +338,7 @@ private Ioc createIoc(NutConfig config, Class mainModule) throws Exception { } @SuppressWarnings({"all"}) - private void createSessionProvider(NutConfig config, Class mainModule) throws Exception { + protected void createSessionProvider(NutConfig config, Class mainModule) throws Exception { SessionBy sb = mainModule.getAnnotation(SessionBy.class); if (sb != null) { SessionProvider sp = null;