在课堂上我们现在正在学习如何构建Spring应用程序,即使spring没有直接参与,我们也学会了如何为DAO和服务层对象创建接口.
如果我错了请纠正我:DAO层非常抽象:它只包含CRUD操作并进一步用于读取数据.(即:获取所有对象,获取特定对象等)
服务层:包含用于创建事物和删除事物的服务,这是业务逻辑应该在的地方.
现在所有这一切在服务层都有意义; 除了"更新"对象.您是否只是将"更新"功能只保存在数据库中?或者你还需要在那里定义逻辑吗?这就是我的困惑所在,我的理解是Spring中的对象只是POJO的.那么谁验证了数据呢?
比方说,我有一个对象"孩子"有:Name,SurName,Gender,Photo,Birthdate
领域.我如何命名服务?或者你只是让控制器负责验证,这对我来说似乎不对.另一方面,将需要调用的每个setter委托给服务层似乎也不正确.
所以基本上:帮助我如何通过服务层定义保存对象.
问题:是否可以在迁移脚本中创建新数据库然后连接到该数据库?怎么样?
我的场景: 我正在尝试在我的Java项目中使用flyway(使用Jersey2.4 + tomcat 7 + PostgreSQL 9.3.1 + EclipseLink的RESTful应用程序)来管理使用git的不同开发人员之间的变化.我编写了我的init脚本并运行它:
PGPASSWORD='123456' psql -U postgres -f migration/V1__initDB.sql
Run Code Online (Sandbox Code Playgroud)
它工作得很好.问题是我不能用我的脚本创建新的数据库.当我在我的脚本中包含以下行时:
CREATE DATABASE my_database OWNER postgres ENCODING 'UTF8';
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
org.postgresql.util.PSQLException: ERROR: CREATE DATABASE cannot run inside a transaction block
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1886)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:555)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:403)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:395)
at com.googlecode.flyway.core.dbsupport.JdbcTemplate.executeStatement(JdbcTemplate.java:230)
at com.googlecode.flyway.core.dbsupport.SqlScript.execute(SqlScript.java:89)
at com.googlecode.flyway.core.resolver.sql.SqlMigrationExecutor.execute(SqlMigrationExecutor.java:72)
at com.googlecode.flyway.core.command.DbMigrate$2.doInTransaction(DbMigrate.java:252)
at com.googlecode.flyway.core.command.DbMigrate$2.doInTransaction(DbMigrate.java:250)
at com.googlecode.flyway.core.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:56)
at com.googlecode.flyway.core.command.DbMigrate.applyMigration(DbMigrate.java:250)
at com.googlecode.flyway.core.command.DbMigrate.access$700(DbMigrate.java:47)
at com.googlecode.flyway.core.command.DbMigrate$1.doInTransaction(DbMigrate.java:189)
at com.googlecode.flyway.core.command.DbMigrate$1.doInTransaction(DbMigrate.java:138)
at com.googlecode.flyway.core.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:56)
at com.googlecode.flyway.core.command.DbMigrate.migrate(DbMigrate.java:137)
at com.googlecode.flyway.core.Flyway$1.execute(Flyway.java:872)
at com.googlecode.flyway.core.Flyway$1.execute(Flyway.java:819)
at com.googlecode.flyway.core.Flyway.execute(Flyway.java:1200)
at …Run Code Online (Sandbox Code Playgroud) 与使用NIO框架(例如和)来托管JAX-RS RESTful服务相比,使用Servlet容器(例如Apache Tomcat)的优缺点是什么?NettyGrizzly
我将使用Java开发RESTful应用程序.Java具有用于构建RESTful服务的JAX-RS API(JSR 331和JSR 339).正如您在此处所看到的,它有不同的实现方式.所有这些都实现了JAX-RS API,因此在它们之间进行切换应该很容易(至少在理论上).Jersey是参考实现,我现在选择它.
对于客户端部分,我将使用angularJS+ bootstrap(所以只是html/css/js而没有jsp页面).
只是为了记录,我说我PostgreSQL用作我的数据库和EclipseLink我的JPA(ORM).
在这里,我想我只是错过了一个部分,那就是服务器部分(JAX-RS服务的主机).AFAIK我可以使用一个Servlet容器(例如Apache tomcat)或定制服务器(使用NIO framwroks如Netty和Grizzly,或也许NIO.2其是JDK 7的一部分)用于这一目的.
但我不知道应该使用哪一个.我认为这两种解决方案之间的利弊有助于我选择一种解决方案.
我创建了一些JAX-RS 2.0资源(使用在Servlet容器中运行的Jeresey 2.4)和一个处理身份验证和授权的过滤器,可以通过@NameBinding注释有选择地应用.一切都很好.
我希望能够在此注释上定义一些参数(特别是访问每个方法/资源所需的安全权限),这些参数在运行时可用于过滤器以改变此行为.
我注意到拦截器可以通过javax.ws.rs.ext.InterceptorContext.getAnnotations()执行此操作,但是javax.ws.rs.container.ContainerRequestContext中没有等效的过滤器.有什么想法可以实现吗?我希望能够做类似以下的事情:
@Target({TYPE, METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
@NameBinding
public @interface Secured {
String[] requiredPermissions() default {};
}
@Secured
@Priority(Priorities.AUTHENTICATION)
public class SecurityRequestFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext containerRequestContext) throws IOException {
// extract credentials, verify them and check that the user has required permissions, aborting if not
}
}
@Path("/userConfiguration/")
public class UserConfigurationResource {
@GET
@Produces(MediaType.APPLICATION_XML)
@Secured(requiredPermissions = {"configuration-permission"})
public Response getConfig(@Context HttpServletRequest httpServletRequest) {
// produce a response
}
}
Run Code Online (Sandbox Code Playgroud) 我想jsoncpp用来编写C++代码来解析JSON文件.让我解释一下我做了什么.我创建了一个CMakeLists.txt和FindJsoncpp.cmake一个简单的c ++文件进行测试jsoncpp.当我在没有使用cmake的情况下编译C++源代码时,-I/usr/include/jsoncpp/ -ljsoncpp它运行正常.但是当我尝试使用cmake构建它时,它找不到json.h我在c ++源代码中包含的头文件.
这是我的CMakeLists.txt:
cmake_minimum_required (VERSION 2.6)
project (Parser)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
include(LibFindMacros)
message("----------- trying to find Jsoncpp-------------")
find_package(Jsoncpp)
if(Jsoncpp_FOUND)
message("INFO: we found LibJsoncpp on your pc.")
message(Jsoncpp_FOUND = ${Jsoncpp_FOUND})
message(Jsoncpp_INCLUDE_DIR = ${Jsoncpp_INCLUDE_DIR})
message(Jsoncpp_LIBRARY = ${Jsoncpp_LIBRARY})
else(Jsoncpp_FOUND)
message("WARNING: we couldn't find LibJsoncpp on your pc. DLC is disabled.")
endif(Jsoncpp_FOUND)
#set(LIBS ${Jsoncpp_LIBRARY})
# Set the include dir variables and the libraries and let libfind_process do the …Run Code Online (Sandbox Code Playgroud) 我使用 nexus 作为 Docker 容器,标签为 sonatype/nexus3:3.14.0。此外,我将 nexus 与 LDAP 连接起来以进行更好的用户管理,这对组和角色管理很有帮助。
就我而言,我创建了一个博客商店并创建了两个 docker 注册表存储库,一个托管和一个组。我尝试在托管上登录,并且工作正常。但是当我尝试连接到分组存储库时,我得到 401 Unauthorized。我也尝试连接管理员凭据,但我也遇到了同样的错误,
来自守护进程的错误响应:登录尝试 https:///v2/ 失败,状态为:401 未经授权。
欢迎提出建议 PParthenis