2016-08-31 12 views
0

私が継承しているモデルクラス:モデル計装 - ActiveWeb

public class AbstractUser extends Model 

public class User extends AbstractUser 

私はいくつかの子供たちのプロジェクトに基本プロジェクトから延長しようとしています。各プロジェクトのユーザーは、多くの同様の基本属性を持ちますが、カスタム属性は1つまたは2つだけです。私はこのような方法で拡張することができると期待しているので、バグやアップデートがベースクラスに関して起こるとき、私はベースクラスへの更新を行うだけです。また、複数のプロジェクトにコードを重複させる必要があります。これを他のクラスにも拡張する予定です。 app.controllersでこれを行うprobはありません。

もちろん、私の基本クラスはうまくいきます。私の拡張クラスでは、私が実行しています:

mvn org.javalite:activejdbc-instrumentation:1.4.12:instrument 

を...その後、私の桟橋のWebアプリケーションに展開WARを動かします。拡張モデルにヒットするたびに、次のスタックトレースが得られます。

org.javalite.activejdbc.InitException: failed to determine Model class name, are you sure models have been instrumented? 
at org.javalite.activejdbc.Model.modelClass(Model.java:2726) 
at org.javalite.activejdbc.Model.findAll(Model.java:2349) 
at com.nearstar.model.ApplicationProperties.getInstance(ApplicationProperties.java:41) 
at app.controllers.LoginController.login(LoginController.java:56) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at org.javalite.activeweb.ControllerRunner.executeAction(ControllerRunner.java:289) 
at org.javalite.activeweb.ControllerRunner.run(ControllerRunner.java:65) 
at org.javalite.activeweb.RequestDispatcher.doFilter(RequestDispatcher.java:202) 
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1676) 
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) 
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) 
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) 
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) 
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) 
at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) 
at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) 
at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) 
at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) 
at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) 
at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) 
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) 
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1668) 
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:581) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548) 
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226) 
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180) 
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511) 
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) 
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:213) 
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:119) 
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134) 
at org.eclipse.jetty.server.Server.handle(Server.java:524) 
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:319) 
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:253) 
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273) 
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95) 
at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93) 
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303) 
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148) 
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136) 
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671) 
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589) 
at java.lang.Thread.run(Thread.java:745) 

このように計測モデルを拡張することはできますか?

答えて

1

まず、are you sure models have been instrumented?というメッセージが表示された場合は、モデルが計測されていないことを意味します。 IDE上書きされたクラスファイルまたはスクリプトが動作していない可能性がありますが、この状態でこのメッセージが表示されます。

第2に、ActiveJDBCの継承にはいくつかの制限があります。この文書をご覧ください:http://javalite.io/inheritance

あなたがしたいことは可能です。私はそれで多くの問題を参照してくださいない。しかし私のプロジェクトでは、通常、すべてのモデル、ユーティリティクラス、およびサービスを含む単一のcommon Mavenモジュールがあります。次に、Mavenの依存関係メカニズムを使用してcommonを他のプロジェクトにプルします。このアプローチは、何年もの間、多くの商業プロジェクトにとって非常にうまく機能しました。

第3に、パッケージapp.controllersはコントローラにのみ必要です:)あなたのモデルはどのパッケージとモジュールにも配置できます。モデルがインストルメントされ、クラスパス上に配置される限り、モデルは期待通りに動作します。