2016-09-26 31 views
3

我创建使用Apache ISIS simpleapp-archetype的应用程序,然后加入安全模块的依赖性(isis-module-security-domjbcrypt)到我的pom.xml的和模块和服务我的DomainAppAppManifest阿帕奇伊希斯安全模块:必需的表丢失:“ISISSECURITY.APPLICATIONROLE”

在集成测试模块中发生以下错误的项目运行后mvn clean install

[INFO] introspecting org.apache.isis.applib.services.iactn.Interaction: class-level details 
[INFO] calling @PostConstruct on all domain services 
seed-users-and-roles-fixture-script       : EXEC org.isisaddons.module.security.seed.SeedUsersAndRolesFixtureScript 
seed-users-and-roles-fixture-script/global-tenancy   : EXEC org.isisaddons.module.security.seed.scripts.GlobalTenancy 
[INFO] abort transaction [email protected][state=MUST_ABORT,commands=0] 
[INFO] ------------------------------------------------------------------------ 
[INFO] Reactor Summary: 
[INFO] 
[INFO] Simple App ......................................... SUCCESS [ 0.608 s] 
[INFO] Simple App DOM ..................................... SUCCESS [ 14.607 s] 
[INFO] Simple App Fixtures ................................ SUCCESS [ 1.285 s] 
[INFO] Simple App Application ............................. SUCCESS [ 2.204 s] 
[INFO] Simple App Integration Tests ....................... FAILURE [ 17.539 s] 
[INFO] Simple App Webapp .................................. SKIPPED 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 36.654 s 
[INFO] Finished at: 2016-09-26T18:44:48+07:00 
[INFO] Final Memory: 65M/572M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal org.apache.isis.tool:isis-maven-plugin:1.13.0:swagger (default) on project groupid-demo-integtests: Execution default of goal org.apache.isis.tool:isis-maven-plugin:1.13.0:swagger failed: org.datanucleus.store.rdbms.exceptions.MissingTableException: Required table missing : "ISISSECURITY.APPLICATIONROLE" in Catalog "" Schema "ISISSECURITY". DataNucleus requires this table to perform its persistence operations. Either your MetaData is incorrect, or you need to enable "datanucleus.schema.autoCreateTables" 
-> [Help 1] 

原则上我跟着security module github repository下的文档,但是这并没有真正在所有的工作,并通过看看quickstart module我认为需要将安全依赖关系添加到父POM中,并且需要将bcrypt依赖关系添加到App POM中,并将安全插件依赖关系添加到Dom POM中。

重现错误,这就是我所做的:

与原型创建项目

mvn archetype:generate -D archetypeGroupId=org.apache.isis.archetype -D archetypeArtifactId=simpleapp-archetype -D archetypeVersion=1.13.0 -D groupId=my.groupid -D artifactId=groupid-demo -D version=1.0-SNAPSHOT -D archetypeRepository=http://repository-estatio.forge.cloudbees.com/snapshot/ -B 

然后在/groupid-demo/pom.xml我添加了这些依赖关系:

 <dependency> 
      <groupId>org.isisaddons.module.security</groupId> 
      <artifactId>isis-module-security-dom</artifactId> 
      <version>1.13.1</version> 
     </dependency> 

     <dependency> 
      <groupId>org.mindrot</groupId> 
      <artifactId>jbcrypt</artifactId> 
      <version>0.3m</version> 
     </dependency> 

/groupid-demo-app/pom.xml我加了这个依赖:

<dependency> 
     <groupId>org.mindrot</groupId> 
     <artifactId>jbcrypt</artifactId> 
    </dependency> 

/groupid-demo-app/src/main/java/domainapp/app/DomainAppAppManifest.java我修改的模块和服务内容如下:

@Override 
public List<Class<?>> getModules() { 
    return Arrays.asList(
      DomainAppDomainModule.class, // domain (entities and repositories) 
      DomainAppFixtureModule.class, // fixtures 
      DomainAppAppModule.class  // home page service etc 
      ,org.isisaddons.module.security.SecurityModule.class 
    ); 
} 

@Override 
public List<Class<?>> getAdditionalServices() { 
    return Arrays.asList(
      org.isisaddons.module.security.dom.password.PasswordEncryptionServiceUsingJBcrypt.class 
    ); 
} 

/groupid-demo-dom/pom.xml我添加了这个依赖:

<dependency> 
     <groupId>org.isisaddons.module.security</groupId> 
     <artifactId>isis-module-security-dom</artifactId> 
    </dependency> 

然后/groupid-demo-webapp/src/main/webapp/WEB-INF/shiro.ini已被修改,这样的:

[main] 

.... 

# to use .ini file 
# securityManager.realms = $iniRealm 

isisModuleSecurityRealm=org.isisaddons.module.security.shiro.IsisModuleSecurityRealm 

authenticationStrategy=org.isisaddons.module.security.shiro.AuthenticationStrategyForIsisModuleSecurityRealm 
securityManager.authenticator.authenticationStrategy = $authenticationStrategy 

securityManager.realms = $isisModuleSecurityRealm 

最后我在根目录下执行了mvn clean install并得到了上述错误。

任何想法我在这里失踪?这真的只是一个裸骨simpleapp-archetype应用程序与应用的唯一修改是添加的安全模块。

回答

2

是的,我在今天遇到同样的问题时,将您在Apache Isis邮件列表中提出的问题放在一起this demo app

问题是生成swagger规范的maven插件使用它自己的AppManifest,并且该清单需要正确引用安全性。

因为我不想在这方面受到追踪,所以我只是禁用了招摇目标in the pom.xml(删除'!'感叹号)。

HTH 丹

+0

这似乎这样的伎俩,感谢丹:-) – mwhs

+0

更新:要解决这个问题,确保AppManifest引用也覆盖的配置属性(如integtests做),这样DN是能够创建必要的表格。 参见例子https://github.com/incodehq/incode-module-communications/blob/master/dom/src/main/java/org/incode/module/communications/dom/CommunicationsModuleDomManifest.java#L66 –

+0

@ DanHaywood我从我的PC运行我的项目工作正常,但是当我将代码推送到我的gitlab并克隆到另一台PC并运行'mvn clean install'时,出现类似错误 所需的表格丢失:目录“”Schema中的“ISISSECURITY.APPLICATIONTENANCY” “ISISSECURITY”。 DataNucleus需要此表来执行其持久性操作。要么你的元数据不正确,要么你需要启用“datanucleus.sch ema.autoCreateTables” –