Hi Gaurav, did you try a "control" with your file search method? I.e.,
you're saying you're case-insensitive searching on "category_category"
but nothing is getting returned -- did you try also searching something
that you *know* exists in the project (say, "class", "public", "return",
etc.) and your IDE/search method indeed did return lots of matches?
Because if you get zero search results with the latter we know the
problem is with the way you're configuring your search, not the
non-existence of "category_category". (Also are you searching on every
type of file extension, not just .java files?)
Somewhere in your code the JPA layer has decided to calculate
"category_category" as a table name, I would guess because that's what
is exactly in the code someplace (as you can see the query below
generated "...FROM category_category t0, category t1..."). One useful
experiment might be to rename the "category" table (t1) above to
"category2" -- would the SQL above change to "category2_category2,
category2..." or (I think) "...FROM category_category t0, category2
t1...") If the former, that would indicate that "category2_category2"
is being dynamically generated from the "category2" table name. If the
latter, that would mean "category_category" is hardcoded somewhere and
not related to the "category" table name you've properly configured.
I probably won't be able to get to this until next weekend anyway, so
I'm going to have you finish it, also as a confidence-builder for you
(if you let JPA push you around now, it's always going to bully you... :)
Regards,
Glen
PS: Just to clarify, when an pre-5.1-SNAPSHOT user installs Roller
5.1-SNAPSHOT, the Roller startup should automatically detect that the
system is currently using an older Roller database and do the database
upgrade (creating of new the "category" table and prepopulation of it).
Roller has always done this as so long as you put the necessary
migration scripts in the right place there should be no problem.
However, those of us already on 5.1-SNAPSHOT like myself before your
patch will need to manually create that table in our database (the
Roller script won't notice 5.1-SNAPSHOT-->5.1-SNAPSHOT, so won't create
"category" by itself.) No problem, we'll just figure out the necessary
SQL statements for Dave and he can add it to his Roller project blog.
On 01/04/2014 04:47 PM, Gaurav wrote:
Hello Glen,
I searched whole project and did not find anywhere. I think might be I
have done something wrong, as when I start with new database,
everything work just deleting gives me this error. If I work on old
database it even did not start up (localhost:8080/roller) gives my
below error.
I have checked almost everything I can, might be some wrong java code
and anything I done wrong that causes this. Should I submit by work so
you can look on to it, or if we are not in any hurry than I can look
into it again step by step (I prefer second option if we have one more
week. Just another week or so, next week i have some tight schedule).
I know I am taking too much time, but I am new to this level of Java
code, as I worked maximum time at client side. But I really loving
java code and learned a lot till now, before this I just worked with
Java on small projects. OpenSource Projects really are very powerful
and good way to learn new things.
Exception [EclipseLink-4002] (Eclipse Persistence Services -
2.5.0.v20130507-3faac2b):
org.eclipse.persistence.exceptions.DatabaseException Internal
Exception: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table
'roller.category_category' doesn't exist Error Code: 1146 Call: SELECT
t1.id, t1.description, t1.image, t1.name, t1.websiteid FROM
category_category t0, category t1 WHERE ((t0.WeblogCategory_id = ?)
AND (t1.id = t0.weblogCategories_id)) bind => [1 parameter bound]
Query: ReadAllQuery(name="weblogCategories"
referenceClass=WeblogCategory sql="SELECT t1.id, t1.description,
t1.image, t1.name, t1.websiteid FROM category_category t0, category t1
WHERE ((t0.WeblogCategory_id = ?) AND (t1.id = t0.weblogCategories_id))")
Thanks
Gaurav
On Sunday 05 January 2014 12:00 AM, Glen Mazza wrote:
Hi Gaurav, no, that relation shouldn't be needed anymore.
As for the table name, at the top of your orm.xml file the table name
the file maps against is declared -- perhaps you accidentally called
it category_category. I would grep or use a file search from your
IDE of your entire roller source code, looking for where
category_category is being declared -- (probably) has to be there
someplace. (More specifically, do a file search on "DataModifyQuery"
-- that's probably exactly where the problem is.)
Once working, try to import the latest code changes into your code
before submitting a patch (actually create a backup patch first just
in case). Not sure but I think a simple svn update will do -- svn
will identify some files where it will need your assistance to
resolve any differences -- it shouldn't be too hard or time-consuming
to do.
Regards,
Glen
On 01/04/2014 08:55 AM, Gaurav wrote:
Hello Glen,
I just want to know that the below relations in
WeblogCategory.orm.xml are required or not as now the parent is not
used so, I don't think its needed now. I have commented the below
lines.
<many-to-one name="parent"
target-entity="org.apache.roller.weblogger.pojos.Category">
<join-column name="parentid" insertable="true"
updatable="true" nullable="true"/>
</many-to-one>
<one-to-many name="weblogCategories" mapped-by="parent"
target-entity="org.apache.roller.weblogger.pojos.Category"
fetch="LAZY">
<cascade>
<cascade-remove/>
</cascade>
</one-to-many>
<transient name="inUse"/>
I asked this because, getting categories giving me mysql exception.
The new table is 'roller.category' but it executes for
'roller.category_category'.
I am not able to get what I have done wrong.
Internal Exception:
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table
'roller.category_category' doesn't exist
Error Code: 1146
Call: DELETE FROM category_category WHERE (WeblogCategory_id = ?)
bind => [1 parameter bound]
Query: DataModifyQuery(name="weblogCategories" sql="DELETE FROM
category_category WHERE (WeblogCategory_id = ?)")
Also, I have changed the getWeblogCategoryByPath to
getWeblogCategoryByName so feeds and other places work fine. I have
able to get catgeory list, new entries are creating successfully.
Just deleting the weblog is giving me above error.
Thanks
Gaurav
On Saturday 04 January 2014 12:53 PM, Gaurav wrote:
Hello Glen,
I have already deleted getPath and getParent and in the mid of
everything. I hope I will be able to complete this by Monday. If
still, I get some major issues due to this, I will switch to what
you suggested. Just give me time till Monday, as I have done almost
80% of code cleaned regarding the path and parentcategory. I will
get back to you soon with some patches and then you can test it.
Also, my ICLA have been filed, got the receipt of my ICLA.
Thanks
Gaurav
On Wednesday 01 January 2014 08:07 AM, Glen Mazza wrote:
Gaurav, sorry, it just occurred to me there's a simpler
intermediate step that can be done. While we need the database
table without a path column, and to remove the "path" member
*variable* from WeblogCategory (or its replacement), we can still
keep indefinitely keep getPath(), just hardcode it to "/" +
categoryName, which is precisely what the old code returns for any
top-level category--the rest of the system can stay just as it did
before. Switching the rest of the code from getPath() to using
getName() can be done at any time, bit by bit whenever, that's not
necessary to implement positioning, that's just a code cleanup
issue. Likewise, for WeblogCategory.getParent(), it may be as
simple as adding a root category object as part of the Weblog's
constructor (but not saved to the database), and having
WeblogCategory.getParent() just return
website.getParentCategory()--that way all categories for a weblog
will have the same root category as before, and the rest of the
code base should function fine. Once we're on the new table, then
it's an issue of implementing positioning--getting rid of
getParent() and getPath() can be done by anybody at a later date.
Regards,
Glen
On 12/31/2013 08:09 AM, Glen Mazza wrote:
No problem, I'm available to help (or finish it up) if needed.
For a seemingly simple switch, you're certainly getting a *full*
education of the Roller codebase. :)
BTW, I hope you're not testing via mvn jetty:run, as that
requires you to keep logging in for the first time, creating a
blog for the first time, etc., whenever you start it. Very
inefficient and tiring. Normally I just build (mvn clean
install) and dump the WAR into standalone Tomcat on my local
machine. The database & other configuration I keep permanently
in roller-custom.properties in the Tomcat lib/ folder, so the new
WAR just takes over with the same configuration, blogs, accounts,
etc., that old WAR was using. (Check the Roller install guide for
full instructions.)
Also vital is that you know how to debug/trace Roller code in
Eclipse or IntelliJ while it is running on Tomcat (or another
servlet container). It's much simpler than it seems, and will
save you a lot of time. These instructions are for Eclipse but
Intellij (my preference) is basically the same:
http://www.jroller.com/gmazza/entry/eclipse_debug_web_services#ec3.
Checking variable values while it's running will point you to
where problems are much more quickly.
Happy New Year!
Regards,
Glen
On 12/31/2013 06:39 AM, Gaurav wrote:
Hello Glen,
As, I previously told you that the test cases are giving
problem, actually I think we have to do some changes in Test
Cases also, as many of the methods involving path and parent are
removed so, many times in test cases (it did not get correct
values and give errors).
I have successfully showed the categories by website till now in
the admin section. Also, the entries are saved just, I ran out
of memory issue in happen when I save an entry that entry,
although it get saved when I refresh the page.
Also, as their is not path now, we have to do some changes in
velocity files, as feeds are giving error in showing, although
if I direct enter the URL its working fine. I have cleared many
parts of the code, just I have test of the roller parts which
are linked the path and parent. I am thinking of correcting the
test cases, as I can run them and if test cases are fine then
might be everything will work fine.
I will return to work on this after 3 days, as I will be and
will get be to it during coming weekend again. I will wrap this
out asap for you to test and will attach patches coming weekend.
Thanks
Gaurav
On Saturday 28 December 2013 05:49 PM, Gaurav wrote:
Thanks for that info, I have changed my settings in the eclipse.
Yes, you are right I will leave the ordering part for now and
work on clearing the code for now. For now I will just add a
column in category table with position, leaving it null for now.
Regards,
Gaurav
On Saturday 28 December 2013 05:33 PM, Glen Mazza wrote:
Your last ImprovedCreateUser.patch had some tab characters in
it, and our project uses spaces for tabs (just have Eclipse
insert 4 spaces whenever you hit the tab key, with no tab
characters.) Very few Apache projects (any?) are tab-indented
today. It is a simple fix with IntelliJ IDEA (Edit -> Convert
Indents -> To Spaces), I'm sure Eclipse has an equivalent.
For blogs migrating from pre-5.1 versions, we can keep the
position NULL by default (and when you order by position, with
null values, they will come out in any order, like they do
today.) Whenever a new blog is created with the default three
categories, those can be assigned positions (probably 0-based
for leftmost is best.) For migrated blogs, once the user goes
to the category page and makes a change for the first time,
numbers can be written for the very first time--no special
extra UI is needed for this purpose. But like I was saying,
this is such a lengthy patch you may wish to forget about the
ordering right now--it doesn't work anyway in Roller right
now. It may be best to get us to the new table and get rid of
the paths, and once we're on that firmer foundation
implementing positioning (on the Category page and in the
templates) will be much simpler.
Regards,
Glen
On 12/28/2013 06:14 AM, Gaurav wrote:
Hello Glen,
I will change the position to be integer, and will exclude
the category where parent null, but still what can be done
for the position as the old data did not have position, so
how and on what basis we have to add position to it. I was
thinking that we can left it as null, and provide some UI in
backend where user can assign position themselves.
I will take care of spacing, will search what I am doing
wrong. As, I am not sure is that you are talking about
formatting the code, or anything else. As I use tab (with 4
spaces) in Eclipse IDE.
Thanks
Gaurav
On Saturday 28 December 2013 04:27 PM, Glen Mazza wrote:
BTW, not to be hated, but make sure any code you submit is
space-padded (4 spaces), *not* tab-padded. Your IDE should
be able to convert it for you if you've been doing tab-padding.
Regards,
Glen
On 12/28/2013 05:06 AM, Gaurav wrote:
Hello Glen,
I am confused on how to add and on what basis we have to
addd position to the new category table. Below two sql
commands can be used for coping data and deleting the root
categories.
create table category (
id varchar(48) not null primary key,
name varchar(255) not null,
description varchar(255),
websiteid varchar(48) not null,
image varchar(255),
position varchar(48)
);
insert into category(id,name,description,websiteid,image)
select id,name,description,websiteid,image from
weblogcategory;
delete from category where name="root";
What do you suggest for this ?
Thanks
Gaurav
On Saturday 28 December 2013 06:56 AM, Glen Mazza wrote:
Take your time, this is a messy change as it affects many
areas of the code. But Roller will be architecturally much
more solid and simpler once this change is done. I have
your ROL-1616 and ROL-1982 on my plate for this weekend.
Glen
On 12/27/2013 02:40 PM, Gaurav wrote:
Hello Glen,
I have deleted the path and all related methods, but its
seems to me that the path methods like
(getWeblogCategoryByPath) and many other path and parent
related methods, are scattered over the whole roller.
There are many occurrence of these methods and I have to
sort out each piece of code as now there is no path so,
mostly we check for categoryPath != null in if
conditions, so these are no longer needed.
Also, I as thinking after testing and completing this we
can delete the WeblogCategory and replace with Category
method, as it will be clean. I also figured out why my
tests are failing as during creating of weblogentry it
did not find the categories, as that class was using old
WeblogCategory table and using that class methods. I
think I will definitely will figure out everything at the
end and will successfully test with the unit tests.
I am now in the editor part so can display the categories
on front end, I am now all over the 1-2-3-4 steps you
mentioned. As soon as I will able to display the
categories (small issues left) at the backend, I will
again go through my changes. Also, at this time I can
only create patch for new table and migration script, as
all other classes code are interrelated so can't submit
now. I will test every single thing related to
categories, then I will submit my patches.
Although I have learned a lot new things, just spent last
two full days on this sorting out things, many times
ending up nowhere from where I started. But I am
confident that I will definitely complete this task. Just
I am worrying that I must be taking too much time.
If there is something, you can advice me I would happy to
follow that also.
Thanks
Gaurav
On Friday 27 December 2013 05:09 AM, Glen Mazza wrote:
If it helps, you can provide interim patches, so long as
it doesn't break the current code base. You may want to
create a patch just creating the new database table
(which will be ignored by the current code) and sql
insert-select scripts to move from the current table to
the new one, then one converting the code to using the
new table without sorting, then (finally) one that
implements sorting of the categories.
Glen
On 12/26/2013 08:12 AM, Gaurav wrote:
Hello Glen,
I have created and updated all necessary files in JPA
and for database, I tried compiling the code it gave me
errors in test cases. As I am not sure that what I am
wrong in this. Although I tried compiling without
running test cases, it worked fine. I tested it with
tomcat and new table category is created and initial
category (General, Finance and Technology) are created
with the position 1,2,3. Still there are many thing I
have to clean up and sort out and will test it again.
Thanks
Gaurav
On Thursday 26 December 2013 03:31 PM, Gaurav wrote:
Ok, got your point. I will check on other Roller parts
also if parent name and path aren't be using in any
other part of Roller. I will go into the RSS and Atom
feeds later on, and see what changes it need. As, till
now I have changed many files and created some, so
will first test this part then go into that feeds part.
Thanks
Gaurav
On Thursday 26 December 2013 03:23 PM, Glen Mazza wrote:
Sounds good, but may require more work to make sure
all is good with the RSS and Atom feeds as a result
(which I believe rely on path). Where path is used to
check for equivalence, I guess name (and blog/website
ID, if necessary) alone will do now. We may need to
check (if we aren't already) that no two categories
have the same name, where prior we were checking that
no two paths are the same (i.e., allowing category
paths USStates/Georgia and Countries/Georgia but now
needing to disallow two categories named "Georgia".)
Regards,
Glen
On 12/26/2013 12:47 AM, Gaurav wrote:
Hello Glen,
I am thinking of removing the path coloumn also, as
it does not make sense now as there will no
subcategories and all will have same path (like
/categoryname). WDYT ?
Thanks
Gaurav
On Wednesday 25 December 2013 04:05 PM, Glen Mazza
wrote:
Yes, the root category can be nuked.
Glen
On 12/25/2013 05:28 AM, Gaurav wrote:
Hello Glen,
I want to know as now all the categories will be
top level, so the root category which is created
by default on addWeblog isn't needed. So, I can
remove that code also ? I am in half completed
with the 1-2 steps will soon submit some patched
in jira issue. You can look on to them whenever
you will get time from other projects.
Merry Christmas :)
Thanks
Gaurav
On Tuesday 24 December 2013 10:57 AM, Gaurav wrote:
Glen,
Thanks a lot for replying soon on this, I
understand your commitments. As this will give me
more time on working on this issue. I will give
my 100% on this, as I also want to get into more
and more open source projects. For Now I am
focusing on Roller for starting my contributions
in open source.
Thanks
Gaurav
On Tuesday 24 December 2013 10:51 AM, Glen Mazza
wrote:
No, not a rush (unfortunately I can't help much
right now either, as my other project JSPWiki
has a new release going out.) But please be
patient with us on your recent submitted patches
-- we haven't forgotten you and are happy with
your efforts on this project so far, we just
have full-time jobs and, even after that, other
obligations -- for open source work, we usually
have to beg, borrow and steal time to work on them.
Glen
On 12/24/2013 12:05 AM, Gaurav wrote:
Hello Glen,
I am going through this having some issues,
although not major till now. I have still
working on 1-2 steps, might be I am slow as get
less time. (Wish we also have holidays of this
festive season in India :P) Just want to know
isn't there any hurry for completing this asap
? Although, I am sure will definitely complete
this as I have understood the structure of
Roller completely. Just I have to go through
the JPA more and read about this.
Thanks
Gaurav
On Saturday 21 December 2013 04:59 PM, Glen
Mazza wrote:
Looking good. Anything you're missing will
become apparent to you as you work along. The
Roller installation guide and here
(http://www.jroller.com/gmazza/entry/apache_derby_setup)
can show you how to test also with Derby if
you'd like. (It is usually simpler than MySQL,
and another benefit of working on Roller is
that you become multiple-database-lingual very
quickly.)
Glen
On 12/21/2013 06:16 AM, Gaurav wrote:
Hello Glen,
Thanks for helping in this and I with this
much deep information, I can start working in
it. I have started working on this Issue and
have followed your steps.
1. Created a new table in createdb.vm and in
migration scripts also. I have for mow stared
working on MySQL.
2. In JPAWeblogEntryManagerImpl class, I have
commented updatePathTree and
getRootWeblogCategory methods
3. I have created a new file for now
Category.orm.xml and enterd details of new
table. A new class Category in weblogger/pojos.
I have created new files for now and will
work on this and add new position coloum and
code regarding this. Other than UI and
template Layer, I think I have covered all
files on which I have to work on the Database
and JPA layers ? Please tell me if I am wrong
anywhere or following wrong workflow.
Thanks
Gaurav
On Saturday 21 December 2013 04:59 AM, Glen
Mazza wrote:
Hi Gaurav, we use Velocity for our database
scripts -- you see a createdb.vm plus
migration scripts (5.0 to 5.1) -- we'll want
our change in both places (IIRC), new users
have the createdb run and Roller upgraders
with their current DB's have the 5.0 to 5.1
migration script run.
We have multiple issues here and I'd like to
get this done right (I plan on helping out
where you'd like). Namely, we've moved from
a hierarchical category structure
(categories having subcategories having
their own subcatorgories etc.) to a flat
single-level structure (all categories are
top level) -- that was done a week or so
back. Problem is, the database tables are
still assuming hierarchical (they will work
with flat structures but are overkill--we
don't need a parent ID column anymore.)
Also, the JPA objects are designed for
hierarchical but can simplified a bit more
to flat structure. Incidentally,
"sequenceNum" is ambiguous about what it
means, I would say "position" or "ordering"
(INT null, null for migrators who don't yet
have a position defined) is clearer.
I think the simplest way to handle this--for
both new installers and upgraders--is:
1.) Database: To create a new table, say
"category" designed precisely as we need,
and have the migration scripts select from
the old weblogcategory and insert into the
new category table. (We then ignore the
weblogcategory table.) We'll need to test
the scripts with at least two databases (2
of probably MySQL, Derby and/or PostgreSQL)
and guess for the others--if we're wrong the
user community can supply a patch fixing it.
2.) JPA: The JPA persistence object (the old
WeblogCategory) will need
simplifying/restructuring as it's now
flat-level. Indeed, I think things will get
a *lot* simpler here, as it may just be the
parent Weblog holding a list of some sort of
Category objects--that's it.
3.) UI Layer: The category.jsp (or whatever
it's called) and its Struts action class
will now need to use the new Category object
(and table) instead of WeblogCategory. The
UI page will need two changes: (1) all new
categories will be placed (and saved) at the
bottom of the category list (and as result,
appear last (right-most) in the category
list, and, later (2) probably have up and
down buttons in the table allowing users to
easily reorder the categories as they like.
(Strictly speaking, 1 alone is all that's
needed for ordering, as you can
remove/name/delete/recreate categories to
eventually get them in the position you'd
like, but (2) of course is much nicer.)
4.) Template layer (haven't looked into
this): The templates (probably just a macro
or two) will need updating to ensure that
they output the category names per the new
position order.
It's a lot of work, but one advantage is
that I'd like to do the same thing with
bookmarks/blogrolls (team discussion
pending...), switch from a hierarchical to
flat-level for those too. If we can do this
for categories, the logic/UI design, etc.,
will carry over 100% to bookmarks.
I was planning on eventually getting to this
myself, so am available to work with you on
whatever parts you'd like. I think going in
order 1-2-3-4 and having separate commits
may be the cleanest way of doing this.
What's nice about using a brand new table
and JPA object is that the old objects can
still work in the code while we're creating
the new, we just don't activate the new
until the very end.
WDYT? (Also, other team members on the
above ideas...?) Or are there other Roller
tasks you'd like to sink your teeth into
instead? I can look at this otherwise, but
this looks like a very good exercise for
someone wanting to get more involved in
Roller, as it covers all the layers of the
webapp.
Regards,
Glen
On 12/20/2013 10:43 AM, Gaurav wrote:
Hello,
I have started working on ROL-1981, as
discussed in previous discussion threads I
will add new column sequenceNum in
weblogcategory table. Then we can assign
sequenceNum to each category according to
websideid. If anyone have some ideas
regarding this, please help me. Also, need
some help on how to go with this issue, and
how to add new coloum, I found .sql file,
do I need to add there new column. Also, Is
this possible that that when I restart the
roller it will add new column to database ?
Thanks for Any ideas/help.
[1] -
https://issues.apache.org/jira/browse/ROL-1981